分享

图像锐化算法 C++ 实现

 学海无涯GL 2012-09-10

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

原图 raw

raw

减去模糊图 blur

blur

_________________________________________________________

等于 mask

mask

这个时候, 我们发现,减法做完的这个图赫然勾勒出了原图的边缘!! 这样给我们一个启示就是, 如果我们把这个mask加到原图上那岂不就是锐化了? (不明白? 锐化的意思就是边缘的色差比较大, 产生的图片貌似清晰的效果) 说干就干, 马上我们来做个新的算式:

老图 raw:

raw

+ 加上mask

mask

_______________________________________________________

等于锐化图 sharpen

sharp

怎么样, 是不是有了锐化的效果了??所以我们实际上的锐化效果就是从这么简单的想法衍生出来的。 所以锐化的公式可以简单的表述为 sharp = raw + ( raw-blur ); 再来看看我们原来的高斯模版的话就是这样:

formula

这样的话, 我们的锐化算法,也变得和之前的高斯平滑差不多了, 就是像素的加权平均值的计算就可以得到了。可以想见的事情是代码肯定也会出奇的一致! 这是那个template改掉了:

  1. /**
  2. ** method to remove sharp the raw image with unsharp mask
  3. * @param gray input grayscale binary array
  4. * @param smooth output data for smooth result, the memory need to be allocated outside of the function
  5. * @param width width of the input grayscale image
  6. * @param height height of the input grayscale image
  7. */
  8. void sharpenImage (unsigned char* gray, unsigned char* smooth, int width, int height)
  9. {
  10. int templates[25] = { -1, -4, -7, -4, -1,
  11. -4, -16, -26, -16, -4,
  12. -7, -26, 505, -26, -7,
  13. -4, -16, -26, -16, -4,
  14. -1, -4, -7, -4, -1 };
  15. memcpy ( smooth, gray, width*height*sizeof(unsigned char) );
  16. for (int j=2;j<height-2;j++)
  17. {
  18. for (int i=2;i<width-2;i++)
  19. {
  20. int sum = 0;
  21. int index = 0;
  22. for ( int m=j-2; m<j+3; m++)
  23. {
  24. for (int n=i-2; n<i+3; n++)
  25. {
  26. sum += gray [ m*width + n] * templates[index++] ;
  27. }
  28. }
  29. sum /= 273;
  30. if (sum > 255)
  31. sum = 255;
  32. if (sum <0)
  33. sum = 0;
  34. smooth [ j*width+i ] = sum;
  35. }
  36. }
  37. }

当然, 这个锐化算法或者说锐化的模板只是我根据前面的算式自己计算的来的,其实还是有非常主流的锐化模版可以供使用的, 比如说著名的拉普拉斯算子. 点开这些类似的网页你也可以获取一些有用的信息:

http://www./wiki/Image_Sharpening_and_Blurring

http://www./output/html/Linearspatialfiltering.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多