参考文献:
http://blog.csdn.net/xmfthu/article/details/15027195
http://blog.sina.com.cn/s/blog_627e716701015z79.html
锐化的作用是加强图像的边沿和轮廓,通常也成为高通滤波器:
模板一般设计为中心处的值为正,外围的值为负(总系数之和为0):
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
using namespace cv;
int main()
{
//源图像
Mat scr = imread("lena.jpg");
Mat rst;
imshow("原图像",scr);
Mat kernel(3,3,CV_32F,Scalar(-1));
// 分配像素置
// kernel.at<float>(1,1) = 8;
kernel.at<float>(1,1) = 8.9;
filter2D(scr,rst,scr.depth(),kernel);
imshow("锐化结果",rst);
waitKey(0);
return 0;
}
我们可以看到,虽然增强了边沿,但是图像本身的层次和亮度已经基本丢失,对于那些与模板运算后小于0的数,会将他们自动置0,所以会有大片的黑色。
而我们通常使用的,是高增益滤波器,他在增强边沿、细节的同时,不会丢失源图像的低频成份:
高增益 = A原图-低通=(A-1)原图+(原图*低通)=(A-1)原图+高通,所以当A>1时,就会将源图像的一部分加入到高通滤波的结果中。
对于3*3的模板,正中间的数kernel(1,1)= 9A-1;其他数为-1。
程序只改动一行:
- kernel.at<float>(1,1) = 8.9;
结果差异就很明显:
参考文献:
http://ggicci.blog.163.com/blog/static/210364096201262123236955/