zoukankan      html  css  js  c++  java
  • [转]Photoshop中的高斯模糊、高反差保留和Halcon中的rft频域分析研究

    在Halcon的rft变换中,我们经常可以看到这样的算子组合:

    rft_generic (Image, ImageFFT2, 'to_freq', 'none', 'complex', Width)
    convol_fft (ImageFFT2, ImageFilter, ImageConvol2)
    rft_generic (ImageConvol2, ImageFiltered2, 'from_freq', 'n', 'real', Width)

    这个很容易理解,即将图片从空间域转到频域,然后做一次卷积计算,最后从频域转回空间域。

    最简单的高斯滤波器是这样构造的:(其中,Width, Height是图片的宽、高)

    sigma :=2
    gen_gauss_filter (ImageFilter, sigma, sigma, 0.0, 'none', 'rft', Width, Height)

    有时候我们还会看到更复杂的高斯滤波器构造,举例如下:

     1 read_image (Image, 'C:/Users/happy xia/Desktop/lena.png') 2 get_image_size (Image, Width, Height) 3  4 GenGaussFilter (ImageFilter, 7, 30, Width, Height) 5  6 sigma :=2 7 * gen_gauss_filter (ImageFilter, sigma, sigma, 0.0, 'none', 'rft', Width, Height) 8  9 rft_generic (Image, ImageFFT2, 'to_freq', 'none', 'complex', Width)    10 convol_fft (ImageFFT2, ImageFilter, ImageConvol2)11 rft_generic (ImageConvol2, ImageFiltered2, 'from_freq', 'n', 'real', Width)12 *  gray_range_rect (ImageFiltered2, ImageFiltered2, 11, 11)13 *  invert_image (ImageFiltered2, ImageFiltered2)14 dev_display (ImageFiltered2)15 min_max_gray (Image, ImageFiltered2, 0, Min, Max, Range)16 intensity (Image, ImageFiltered2, Mean, Deviation)17 disp_message (3600, 'Min:' + Min + '   ' +'Max:' +  Max  +'   '+ 'Mean:' + Mean, 'image', 12, 12, 'red', 'true')18 dump_window (3600, 'png', 'halcon_dump')

    其中,函数GenGaussFilter 是这样的:

    1 gen_gauss_filter (GaussFilter1, Sigma1, Sigma1, 0.0, 'none', 'rft', Width, Height)2 gen_gauss_filter (GaussFilter2, Sigma2, Sigma2, 0.0, 'none', 'rft', Width, Height)3 sub_image (GaussFilter1, GaussFilter2, ImageFilter, 1, 0)4 return ()

    ImageFilter滤波器是通过一个高斯滤波器减去另一个高斯滤波器得到的,这又是什么意思呢?

    我从Photoshop的高斯模糊高反差保留滤镜中得到了启发。

    我本人熟悉Photoshop的用法,Photoshop是一款商业图像处理设计软件。

    事实上,下式就是一个高斯低通滤波器,即高斯模糊:

    sigma :=2gen_gauss_filter (ImageFilter, sigma, sigma, 0.0, 'none', 'rft', Width, Height)

    当sigma = 2时,只是稍微模糊图片,当sigma = 10时,则有强烈的模糊效果,这和Photoshop中的高斯模糊是一致的。

    当sigma = 10时,Halcon程序跑出来的结果是:(跟Photoshop做出的效果对比,模糊程度类似,仅仅是对比度强一些)

    再来看看Photoshop的高反差保留滤镜(滤镜——其它——高反差保留):

    高反差保留滤镜的意思是:在图像中颜色过渡明显(边缘)的地方,保留指定半径内的边缘细节,并隐藏图像的其它部分,值越大保留的原图像素越多。

    当参数“半径”很小的时候,只保留高频部分(边缘),当“半径”逐渐增大时,保留高频和中频部分,当“半径”值极大时,中高低频都得到保留。 

    并且可以证明:高反差保留 + 高斯模糊 = 原始图像。

    而对于函数GenGaussFilter 设计的滤波器ImageFilter来说:它同时兼有高反差保留和高斯模糊的特性。

    1 gen_gauss_filter (GaussFilter1, Sigma1, Sigma1, 0.0, 'none', 'rft', Width, Height)2 gen_gauss_filter (GaussFilter2, Sigma2, Sigma2, 0.0, 'none', 'rft', Width, Height)3 sub_image (GaussFilter1, GaussFilter2, ImageFilter, 1, 0)4 return ()

    对于函数GenGaussFilter (ImageFilter, 7, 30, Width, Height)来说,可以近似理解为先对图像进行值为30的高反差保留,然后对图像进行值为7的高斯模糊。注意:较大的值为高反差保留的值,较小的值为高斯模糊的值,跟7或30的顺序无关。

    如果顺序是:GenGaussFilter (ImageFilter, 30, 7, Width, Height),结果图像其实只是反相的关系,这可以对结果图像执行invert_image反相算子来验证。

    当这样取值时:

    GenGaussFilter (ImageFilter, 0, 1, Width, Height)

    此时相当于仅进行了值为1的高反差保留,边缘棱角分明,而低频区域几乎没有任何细节。

    当这样取值时:

    GenGaussFilter (ImageFilter, 0, 10, Width, Height)

    此时,脸部、肩部等低频区域(光滑的区域)细节都出来了一部分。

    如果我们把值改成:

    GenGaussFilter (ImageFilter, 2, 10, Width, Height)

    此时图像又被模糊了。相当于在原先的基础上,叠加了一个值为2的高斯模糊效果。

    通过上面的分析,我们知道了,高斯模糊是一个低通滤波器,而高反差保留是一个高通滤波器。GenGaussFilter (ImageFilter, 2, 10, Width, Height)则是一个带通滤波器(或者说“带阻滤波器”)——先通过高反差保留让中高频通过,然后通过高斯模糊抑制高频,最终的结果是让中频通过。

    当然,如果较大的那个值很大时,例如GenGaussFilter (ImageFilter, 2, 210, Width, Height),则是先让中高低频都通过,然后抑制高频,结果是让中低频通过。

    这样设计的滤波器通常可以用来做纹理缺陷检测(同时抑制高频和低频,从而找出缺陷)。

    对于滤波器GenGaussFilter (ImageFilter, sigma1, sigma2, Width, Height)和最终转回到空间域的图像来说,本人研究出以下结论:

    1、结果图像的均值接近于0,亮的是正值,暗的是负值;


    2、调换滤波器中的两个数字,相当于对结果图像反相;


    3、大的数字相当于高反差保留,小的数字相当于高斯模糊;


    4、大的数字非常大的时候,四周可能会出现暗角(未严格验证);


    5、大的数字取到合适的值的时候,可以消除待测物起伏不平整的影响(起伏不平整的地方通常频率不是特别高);


    6、检测缺陷异常时,小的数字,即高斯模糊的值以刚好模糊掉纹理为佳。


    ---------------------
    作者:xh6300
    来源:CNBLOGS
    原文:https://www.cnblogs.com/xh6300/p/6592308.html#4512088

  • 相关阅读:
    基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果(转)
    javascript中call、apply、argument、callee、caller
    Google Analytics10条有用教程(转)
    小问题
    MySQL exists的用法介绍
    warning C4005: “AF_IPX”: 宏重定义的解决办法
    /MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
    _mkdir
    文件读写操作总结
    Distinct
  • 原文地址:https://www.cnblogs.com/dinghw/p/12532030.html
Copyright © 2011-2022 走看看