图像锐化算法 C++ 实现
来源:互联网 发布:windows无法识别音响 编辑:程序博客网 时间:2024/06/18 10:39
之前一段我们提到的算法都是和平滑有关, 经过平滑算法之后, 图像锐度降低, 降低到一定程度, 就变成了模糊。 今天我们反其道行之, 我们看看锐化是怎么做的。 这里的锐化, 还是的从平滑谈开去。我们先来观察原来的图像和平滑图像的区别:
原图 raw
减去模糊图 blur
_________________________________________________________
等于 mask
这个时候, 我们发现,减法做完的这个图赫然勾勒出了原图的边缘!! 这样给我们一个启示就是, 如果我们把这个mask加到原图上那岂不就是锐化了? (不明白? 锐化的意思就是边缘的色差比较大, 产生的图片貌似清晰的效果) 说干就干, 马上我们来做个新的算式:
老图 raw:
+ 加上mask
_______________________________________________________
等于锐化图 sharpen
怎么样, 是不是有了锐化的效果了??所以我们实际上的锐化效果就是从这么简单的想法衍生出来的。 所以锐化的公式可以简单的表述为 sharp = raw + ( raw-blur ); 再来看看我们原来的高斯模版的话就是这样:
这样的话, 我们的锐化算法,也变得和之前的高斯平滑差不多了, 就是像素的加权平均值的计算就可以得到了。可以想见的事情是代码肯定也会出奇的一致! 这是那个template改掉了:
- /**
- ** method to remove sharp the raw image with unsharp mask
- * @param gray input grayscale binary array
- * @param smooth output data for smooth result, the memory need to be allocated outside of the function
- * @param width width of the input grayscale image
- * @param height height of the input grayscale image
- */
- void sharpenImage (unsigned char* gray, unsigned char* smooth, int width, int height)
- {
- int templates[25] = { -1, -4, -7, -4, -1,
- -4, -16, -26, -16, -4,
- -7, -26, 505, -26, -7,
- -4, -16, -26, -16, -4,
- -1, -4, -7, -4, -1 };
- memcpy ( smooth, gray, width*height*sizeof(unsigned char) );
- for (int j=2;j<height-2;j++)
- {
- for (int i=2;i<width-2;i++)
- {
- int sum = 0;
- int index = 0;
- for ( int m=j-2; m<j+3; m++)
- {
- for (int n=i-2; n<i+3; n++)
- {
- sum += gray [ m*width + n] * templates[index++] ;
- }
- }
- sum /= 273;
- if (sum > 255)
- sum = 255;
- if (sum <0)
- sum = 0;
- smooth [ j*width+i ] = sum;
- }
- }
- }
当然, 这个锐化算法或者说锐化的模板只是我根据前面的算式自己计算的来的,其实还是有非常主流的锐化模版可以供使用的, 比如说著名的拉普拉斯算子. 点开这些类似的网页你也可以获取一些有用的信息:
- 图像锐化算法 C++ 实现
- 图像锐化算法 C++ 实现
- 图像锐化算法 C++ 实现
- 图像锐化算法 C++ 实现
- 图像锐化算法
- 图像锐化算法
- 常用图像锐化算法
- OpenCV实现图像锐化
- 数字图像处理,图像锐化算法的C++实现
- ISP算法之图像锐化
- [原创]图像算法 图像自动锐化(聚焦)
- C# 对图像进行锐化 锐化的算法
- 基于OpenCV的Laplace图像锐化算法
- Win8Metro(C#)数字图像处理--2.11图像锐化
- [C#]浮雕化、锐化图像处理
- 图像锐化
- 图像锐化
- 图像锐化
- generate parentthese
- hdu5339-Untitled // BestCoder Round #49 ($) 1001 (搜索)
- hdu 5311 Hidden String
- 单选按钮(RadioButton)与复选框(CheckBox)的功能与用法
- Windows环境下main()函数传入参数
- 图像锐化算法 C++ 实现
- Thrift 基础教程(一)安装篇
- Shell脚本中$的用法
- mysq 锁机制详解
- java各种读取properties文件方法
- hadoop问题之java.net.NoRouteToHostException: 没有到主机的路由
- hdu 5312 Sequence
- HDU - 2732 Leapin' Lizards(ISAP Dinic EK)
- JAVA内省(Introspector)