好了。
本篇我们继续研究下那段内有乾坤的代码:
sigma1:=1 sigma2:=225 gen_gauss_filter(GaussFilter1, sigma1, sigma1, 0, 'none', 'rft', Width, Height) gen_gauss_filter(GaussFilter2, sigma2, sigma2, 0, 'none', 'rft', Width, Height) sub_image(GaussFilter1, GaussFilter2, ImageFilter, 1, 0)
在photoshop中有一个滤镜叫“高反差保留”,效果是这样的:
半径为1的效果:
半径为10的效果:
高反差保留滤镜的意思是:在图像中颜色过渡明显(边缘)的地方,保留指定半径内的边缘细节,并隐藏图像的其它部分,值越大保留的原图像素越多。
当参数“半径”很小的时候,只保留高频部分(边缘),当“半径”逐渐增大时,保留高频和中频部分,当“半径”值极大时,中高低频都得到保留。
我们用halcon实现一下:
从效果上看基本上和photoshop是差不多的。
上面是(sigma1:=0,sigma2:=大于0的值)取得的效果。
可以看到这种取值方式下,其效果等于potoshop的“高反差保留”滤镜。
而从这个“高反差保留”的效果上来看,它实际是一个高频过滤器。
当参数“半径”很小的时候,只保留高频部分(边缘),当“半径”逐渐增大时,保留高频和中频部分,当“半径”值极大时,中高低频都得到保留。
而之前我们提过高斯滤波器实际上是一个低通过滤器。
因此理论上来讲: 原图=高斯+高反差保留
口说无凭,勇哥来实验一下:
在photoshop中复制原图为两个图层。
一个起名为“高斯”,一个为“高反差保留”
对图层“高斯”做高斯模糊滤镜,11个像素。
对另一个图层做“高反差保留”滤镜,21个像素。
选中图层“高斯”
把图层混和模式改为“叠加”
可以看到原图出来了。
实际上跟原图比起来还是有些差别的,这个就在于你的高斯与高反差保留滤镜的参数设置。
这些设置会影响到图像中的低频、高频、中频部分有多少会被滤掉了。
如果完全没滤掉,那才是跟原图一样了。
而那段乾坤代码,实际上是可以兼有高斯与高反差保留的两个特点于一身。
上图是sigma取值:7, 30时的效果。
可以近似理解为先对图像进行值为30的高反差保留,然后对图像进行值为7的高斯模糊。注意:较大的值为高反差保留的值,较小的值为高斯模糊的值,跟7或30的顺序无关。
如果你sigma取值为:30,7则是反相的效果
最后总结一下:
高斯模糊是一个低通滤波器,而高反差保留是一个高通滤波器。
本文讨论的代码则是一个带通滤波器(或者说“带阻滤波器”)——先通过高反差保留让中高频通过,然后通过高斯模糊抑制高频,最终的结果是让中频通过。
当然,如果较大的那个值很大时,例如sigma为2,210,则是先让中高低频都通过,然后抑制高频,结果是让中低频通过。
这样设计的滤波器通常可以用来做纹理缺陷检测(同时抑制高频和低频,从而找出缺陷)。
下图是sigma为 2,210的效果:

