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

算法原理:

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

例:

ABC

DEF

GHI

对E点进行锐化:

  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;
  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点进行锐化。

  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值类似
  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()方法,所以一维数组的对应图片的宽高有点麻烦。

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

  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. }

android 图片特效处理之锐化效果的更多相关文章

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

    这篇将讲到图片特效处理的锐化效果.跟前面一样是对像素点进行处理,算法是通用的. 算法原理: 一.简单算法:分别获取当前像素点和八个周围像素点的RGB值,先求出当前像素点的RGB值与八个像素点RGB值的 ...

  2. android 图片特效处理之 光晕效果

    这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...

  3. android 图片特效处理之 图片叠加

    这篇将讲到图片特效处理的图片叠加效果.跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片 ...

  4. android 图片特效处理之光晕效果

    这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...

  5. android 图片特效处理之图片叠加

    这篇将讲到图片特效处理的图片叠加效果.跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片 ...

  6. android 图片特效处理之怀旧效果

    图片特效处理系列将介绍图片的像素点的特效处理,这些物资注重的是原理.也就是说只要你知道这些算法不管是C++,VB,C#,Java都可以做出相同的特效.下面将介绍图片怀旧效果的算法.算法如下: 上面公式 ...

  7. android图片特效处理之怀旧效果

    图片特效处理系列将介绍图片的像素点的特效处理,这些物资注重的是原理.也就是说只要你知道这些算法不管是C++,VB,C#,Java都可以做出相同的特效.下面将介绍图片怀旧效果的算法.算法如下: 上面公式 ...

  8. android图片特效处理之图片叠加

    这篇将讲到图片特效处理的图片叠加效果.跟前面一样是对像素点进行处理,可参照前面的android图像处理系列之七--图片涂鸦,水印-图片叠加和android图像处理系列之六--给图片添加边框(下)-图片 ...

  9. android图片特效处理之光晕效果

    这篇将讲到图片特效处理的图片光晕效果.跟前面一样是对像素点进行处理,本篇实现的思路可参见android图像处理系列之九--图片特效处理之二-模糊效果和android图像处理系列之十三--图片特效处理之 ...

随机推荐

  1. HDFS的安全模式

  2. Hadoop框架基础(一)

    ** Hadoop框架基础(一)     学习一个新的东西,传统而言呢,总喜欢漫无目的的扯来扯去,比如扯扯发展史,扯扯作者是谁,而我认为这些东西对于刚开始接触,并以开发为目的学者是没有什么帮助的,反而 ...

  3. 基于python3-sklearn,Flask 的回归预测系统

    看到一副图片挺有意思,放在片头 序 "傍晚小街路面上沁出微雨后的湿润,和煦的西风吹来,抬头看看天边的晚霞,嗯明天又是一个好天气.走到水果摊旁,挑了个根蒂蜷缩.敲起来声音浊响的青绿西瓜,一边满 ...

  4. OpenGL编程逐步深入(八)伸缩变换

    准备知识 伸缩变换非常简单,它的目的是增大或者缩小对象的尺寸.例如:你可能希望用同一个模型创建不同大小的对象(例如形状相同,但大小不同的树木)或者你想改变对象的大小使它和游戏场景匹配.这些例子中你可能 ...

  5. logsource and ALO

    1.首先配置sourcedb上的nfs服务,oggstd上挂载sourcedb的online redo和archive log的目录     oggsource上配置:  vi /etc/export ...

  6. Chrome Service Model

    Chrome Service Model John Abd-El-Malek February 2016 Objective Move Chrome codebase towards a servic ...

  7. linux傻瓜式安装lnmp

    一.百度 https://lnmp.org/install.html 二.点击 <安装> 三.登录 linux cd /usr/local/ wget -c http://soft.vps ...

  8. 【noip2016】蚯蚓(单调性+队列)

    题目贼长 大意是你有n个线段,每一秒你要拿出来最长的一个线段切成两段长度为[p*u](向下取整)和u-[p*u]两段(其中u是线段长,p是一个大于0小于1的实数)没被切的线段长度加q(0<q&l ...

  9. uptime---系统总共运行时间和系统的平均负载

    uptime命令能够打印系统总共运行了多长时间和系统的平均负载.uptime命令可以显示的信息显示依次为:现在时间.系统已经运行了多长时间.目前有多少登陆用户.系统在过去的1分钟.5分钟和15分钟内的 ...

  10. 使用SVN+Axure RP 8.0创建团队项目

    一.使用到的工具:VisualSVN Server --SVN服务器:https://www.visualsvn.com/server/ Axure RP 8.0  :http://www.downc ...