锐化效果

这篇将讲到图片特效处理的锐化效果。跟前面一样是对像素点进行处理,算法是通用的。

算法原理:

一、简单算法:分别获取当前像素点和八个周围像素点的RGB值,先求出当前像素点的RGB值与八个像素点RGB值的和的平均数,再乘以相应的系数,然后在与当前像素点之和。

例:

ABC

DEF

GHI

对E点进行锐化:

[java] view plaincopy

  1. float delta = 0.3;
  2. E.r = (E.r - (A.r + B.r + C.r + D.r + F.r + G.r + H.r + I.r) / 8) * delta + E.r;

[java] view plaincopy

  1. float delta = 0.3;
  2. E.r = (E.r - (A.r + B.r + C.r + D.r + F.r + G.r + H.r + I.r) / 8) * delta + E.r;

E.g,E.b类似,delta建议取0.3,具体多少无所谓,试一下就知道了。但按照上面原理,没有达到预期的效果,改变delta的值也不行,所以后面代码就不贴出来了,感兴趣的可以研究一下。

二、拉普拉斯变换:将拉普拉斯矩阵中的项与相应点的RGB值之积再乘以相应的系数的和作为当前点的RGB值。

例:用上面的例子,还是对E点进行锐化。

[java] view plaincopy

  1. // 拉普拉斯矩阵
  2. int[] laplacian = new int[] { -1, -1, -1, -1, 9, -1, -1, -1, -1 };
  3. float delta = 0.3;
  4. E.r = A.r * laplacian[0] * delta + B.r * laplacian[1] * delta + C.r * laplacian[2] * delta + D.r * laplacian[3] * delta + E.r * laplacian[4] * delta + F.r * laplacian[5] * delta + G.r * laplacian[6] * delta + H.r * laplacian[7] * delta + I.r * laplacian[8] * delta;
  5. // E.g和E.b值类似

[java] view plaincopy

  1. // 拉普拉斯矩阵
  2. int[] laplacian = new int[] { -1, -1, -1, -1, 9, -1, -1, -1, -1 };
  3. float delta = 0.3;
  4. E.r = A.r * laplacian[0] * delta + B.r * laplacian[1] * delta + C.r * laplacian[2] * delta + D.r * laplacian[3] * delta + E.r * laplacian[4] * delta + F.r * laplacian[5] * delta + G.r * laplacian[6] * delta + H.r * laplacian[7] * delta + I.r * laplacian[8] * delta;
  5. // E.g和E.b值类似

下面看效果图:

原图:

处理后:

貌似处理有点问题,中间会看到很多的竖线,很明显,可能是没有优化好,因为采用了getPiexels() 和setPixels()方法,所以一维数组的对应图片的宽高有点麻烦。

下面贴代码,仅供参数,同样注意图片的大小,数组大小不能超过虚拟机规定值。

[java] view plaincopy

    1. /**
    2. * 图片锐化(拉普拉斯变换)
    3. * @param bmp
    4. * @return
    5. */
    6. private Bitmap sharpenImageAmeliorate(Bitmap bmp)
    7. {
    8. long start = System.currentTimeMillis();
    9. // 拉普拉斯矩阵
    10. int[] laplacian = new int[] { -1, -1, -1, -1, 9, -1, -1, -1, -1 };
    11. int width = bmp.getWidth();
    12. int height = bmp.getHeight();
    13. Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
    14. int pixR = 0;
    15. int pixG = 0;
    16. int pixB = 0;
    17. int pixColor = 0;
    18. int newR = 0;
    19. int newG = 0;
    20. int newB = 0;
    21. int idx = 0;
    22. float alpha = 0.3F;
    23. int[] pixels = new int[width * height];
    24. bmp.getPixels(pixels, 0, width, 0, 0, width, height);
    25. for (int i = 1, length = height - 1; i < length; i++)
    26. {
    27. for (int k = 1, len = width - 1; k < len; k++)
    28. {
    29. idx = 0;
    30. for (int m = -1; m <= 1; m++)
    31. {
    32. for (int n = -1; n <= 1; n++)
    33. {
    34. pixColor = pixels[(i + n) * width + k + m];
    35. pixR = Color.red(pixColor);
    36. pixG = Color.green(pixColor);
    37. pixB = Color.blue(pixColor);
    38. newR = newR + (int) (pixR * laplacian[idx] * alpha);
    39. newG = newG + (int) (pixG * laplacian[idx] * alpha);
    40. newB = newB + (int) (pixB * laplacian[idx] * alpha);
    41. idx++;
    42. }
    43. }
    44. newR = Math.min(255, Math.max(0, newR));
    45. newG = Math.min(255, Math.max(0, newG));
    46. newB = Math.min(255, Math.max(0, newB));
    47. pixels[i * width + k] = Color.argb(255, newR, newG, newB);
    48. newR = 0;
    49. newG = 0;
    50. newB = 0;
    51. }
    52. }
    53. bitmap.setPixels(pixels, 0, width, 0, 0, width, height);
    54. long end = System.currentTimeMillis();
    55. Log.d("may", "used time="+(end - start));
    56. return bitmap;
    57. }

锐化效果,布布扣,bubuko.com

时间: 2024-10-03 14:02:05

锐化效果的相关文章

【转】三、android图片特效处理之锐化效果

这篇将讲到图片特效处理的锐化效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理: 一.简单算法:分别获取当前像素点和八个周围像素点的RGB值,先求出当前像素点的RGB值与八个像素点RGB值的和的平均数,再乘以相应的系数,然后在与当前像素点之和. 例: ABC DEF GHI 对E点进行锐化: float delta = 0.3; E.r = (E.r - (A.r + B.r + C.r + D.r + F.r + G.r + H.r + I.r) / 8) * delta + E.r

android图片特效处理之锐化效果

这篇将讲到图片特效处理的锐化效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理: 一.简单算法:分别获取当前像素点和八个周围像素点的RGB值,先求出当前像素点的RGB值与八个像素点RGB值的和的平均数,再乘以相应的系数,然后在与当前像素点之和. 例: ABC DEF GHI 对E点进行锐化: [java] view plaincopy float delta = 0.3; E.r = (E.r - (A.r + B.r + C.r + D.r + F.r + G.r + H.r + I

数字图像处理,图像锐化算法的C++实现

http://blog.csdn.net/ebowtang/article/details/38961399 之前一段我们提到的算法都是和平滑有关, 经过平滑算法之后, 图像锐度降低, 降低到一定程度, 就变成了模糊. 今天我们反其道行之, 我们看看锐化是怎么做的. 这里的锐化, 还是的从平滑谈开去.我们先来观察原来的图像和平滑图像的区别: 原图 raw: 模糊图 blur: _________________________________________________________ 源图

ImageView 各种工具类

package imageUtil; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import android.content.Context; import android.graphics.Bitmap; import android.grap

AI相关 TensorFlow -卷积神经网络 踩坑日记之一

上次写完粗浅的BP算法 介绍 本来应该继续把 卷积神经网络算法写一下的 但是最近一直在踩 TensorFlow的坑.所以就先跳过算法介绍直接来应用场景,原谅我吧. TensorFlow 介绍 TF是google开源出来的人工智能库,由python语言写的 官网地址:http://www.tensorflow.org/   请用科学上网访问 中文地址:http://www.tensorfly.cn/ 当然还有其他AI库,不过大多数都是由python 写的 .net 的AI库叫 Accord.net

中值滤波与图像锐化

本文主要包括以下内容 中值滤波及其改进算法 图像锐化, 包括梯度算子.拉普拉斯算子.高提升滤波和高斯-拉普拉斯变换 本章的典型囊例分析 对椒盐噪声的平滑效果比较 Laplacian与LoG算子的锐化效果比较 中值滤波 中值滤波本质上是一种统计排序滤波器. 对于原图像中某点(i,j), 中值滤波以该点为中 心的邻域内的所有像素的统计排序中值作为(i, j) 点的响应. 中值不同于均值, 是指排序队列中位于中间位置的元素的值,例如=采用3x3 中值滤披 器, 某点.(i,j) 的8 个邻域的一系列像

Atitit 图像处理之理解卷积attilax总结

Atitit 图像处理之理解卷积attilax总结 卷积的运算可以分为反转.平移,相乘,求和. 在图像处理中,图像是一个大矩阵,卷积模板是一个小矩阵.按照上述过程,就是先把小矩阵反转,然后平移到某一位置,小矩阵的每一个小格对应大矩阵里面的一个小格,然后把对应小格里面的数相乘,把所有对应小格相乘的结果相加求和,得出的最后结果赋值给小矩阵中央小格对应的图像中小格的值,替换原来的值.就是上述说到的,反转.平移.相乘.求和.        一般图像卷积就是从第一个像素(小格)开始遍历到最后一个像素(小格

ASP组件AspJpeg(加水印)生成缩略图等使用方法

ASP组件AspJpeg(加水印)生成缩略图等使用方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-12-17我要评论 ASPJPEG是一款功能相当强大的图象处理组件,用它可以轻松地做出图片的缩略图和为图片加上水印功能.下面简单介绍一下使用方法,需要的朋友可以了解下 一.为图片添加水印 复制代码 代码如下: <% Dim Jpeg ''''//声明变量 Set Jpeg = Server.CreateObject("Persits.Jpeg") ''''//调用组件

GPUImage滤镜之锐化

应用锐化工具可以快速聚焦模糊边缘,提高图像中某一部位的清晰度或者焦距程度,使图像特定区域的色彩更加鲜明. 在应用锐化工具时,若勾选器选项栏中的“对所有图层取样”复选框,则可对所有可见图层中的图像进行锐化.但一定要适度.锐化不是万能的,很容易使东西不真实. 在GPUImage中使用GPUImageSharpenFilter类来实现图像的锐化效果 片段着色 precision highp float; varying highp vec2 textureCoordinate; varying hig