`
java-mans
  • 浏览: 11414726 次
文章分类
社区版块
存档分类
最新评论

我的OpenCV学习笔记(10):空域滤波之锐化滤波器

 
阅读更多

锐化的作用是加强图像的边沿和轮廓,通常也成为高通滤波器:

模板一般设计为中心处的值为正,外围的值为负(总系数之和为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;


结果差异就很明显:

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics