锐化的作用是加强图像的边沿和轮廓,通常也成为高通滤波器:
模板一般设计为中心处的值为正,外围的值为负(总系数之和为0):
int main()
{
//源图像
Mat scr = imread("D:/picture/img.tif");
Mat rst;
imshow("原图像",scr);
Mat kernel(3,3,CV_32F,Scalar(-1));
// 分配像素置
kernel.at<float>(1,1) = 8;
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;
结果差异就很明显: