在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)

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

 read_image (Image, 'C:/Users/happy xia/Desktop/lena.png')
get_image_size (Image, Width, Height) GenGaussFilter (ImageFilter, 7, 30, Width, Height)

sigma :=
* gen_gauss_filter (ImageFilter, sigma, sigma, 0.0, 'none', 'rft', Width, Height) rft_generic (Image, ImageFFT2, 'to_freq', 'none', 'complex', Width)
convol_fft (ImageFFT2, ImageFilter, ImageConvol2)
rft_generic (ImageConvol2, ImageFiltered2, 'from_freq', 'n', 'real', Width)
* gray_range_rect (ImageFiltered2, ImageFiltered2, , )
* invert_image (ImageFiltered2, ImageFiltered2)
dev_display (ImageFiltered2)
min_max_gray (Image, ImageFiltered2, , Min, Max, Range)
intensity (Image, ImageFiltered2, Mean, Deviation)
disp_message (, 'Min:' + Min + ' ' +'Max:' + Max +' '+ 'Mean:' + Mean, 'image', , , 'red', 'true')
dump_window (, 'png', 'halcon_dump')

其中,函数GenGaussFilter 是这样的:

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

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

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

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

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

sigma :=
gen_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, , , 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、检测缺陷异常时,小的数字,即高斯模糊的值以刚好模糊掉纹理为佳。

Photoshop中的高斯模糊、高反差保留和Halcon中的rft频域分析研究的更多相关文章

  1. Photoshop和Halcon中的极坐标变换

    极坐标想必学过高中数学的人都听过,一般的坐标系中用(x, y)值来描述一个点的位置,而在极坐标系中,则使用到原点的距离ρ和夹角θ来描述该点的位置. 我很早就接触了Photoshop,知道Photosh ...

  2. 【短道速滑九】仿halcon中gauss_filter小半径高斯模糊优化的实现

    通常,我们谈的高斯模糊,都知道其是可以行列分离的算法,现在也有着各种优化算法实现,而且其速度基本是和参数大小无关的.但是,在我们实际的应用中,我们可能会发现,有至少50%以上的场景中,我们并不需要大半 ...

  3. halcon中你不知道的标定板细节

    本人文着重阐述以下问题: halcon是否只能使用halcon专用的标定板? halcon标定板如何生成? halcon标定板如何摆放,拍照数量有无限制? halcon是否只能使用halcon专用的标 ...

  4. Halcon中的坐标系特点及XLD的镜像转换

    我们知道,Halcon中的坐标系的原点在左上角,而一般二维平面坐标系的原点在左下角.那么Halcon中坐标系和一般的二维坐标系有什么区别呢?我通过下面这个例子来分析. gen_image_const ...

  5. Halcon中缩放Region或XLD的方法研究

    在Halcon中,Region和XLD之间可以彼此转换.但这种转换并不是“无损”的,XLD可以是不闭合的,但是Region一定是闭合的.因此,如果将不闭合的XLD转为Region,然后再转回XLD,那 ...

  6. HALCON中的算子大全(中英对照)

    HALCON中的算子大全(中英对照) Chapter 1 :Classification1.1 Gaussian-Mixture-Models1.add_sample_class_gmm功能:把一个训 ...

  7. 【工程应用一】 多目标多角度的快速模板匹配算法(基于NCC,效果无限接近Halcon中........)

    愿意写代码的人一般都不太愿意去写文章,因为代码方面的艺术和文字中的美学往往很难兼得,两者都兼得的人通常都已经被西方极乐世界所收罗,我也是只喜欢写代码,让那些字母组成美妙的歌曲,然后自我沉浸在其中自得其 ...

  8. Html5 中获取镜像图像 - 解决 WebGL 中纹理倒置问题

    Html5 中获取镜像图像 - 解决 WebGL 中纹理倒置问题 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致& ...

  9. Android应用项目中BaseAdapter、SimpleAdapter和ArrayAdapter中的三种适配器

    一.写在前面: 本次我们来讲解一下Android应用中三个适配器:BaseAdapter.SimpleAdapter和ArrayAdapter.其中常见的是BaseAdapter,也是个人推荐使用的适 ...

随机推荐

  1. java日常知识点积累

    java类型中的普通非static方法 示例代码: package com.lvzhi; /** * Created by lvzhi on 2017/9/3 */ public class MyTh ...

  2. tf.cast()数据类型转换

    tf.cast()函数的作用是执行 tensorflow 中张量数据类型转换,比如读入的图片如果是int8类型的,一般在要在训练前把图像的数据格式转换为float32. cast定义: cast(x, ...

  3. 树的直径证明+HDU2196

    首先把无向图变成一棵树,直径肯定由叶子组成. 有以下两种情况: 第一种:经过根节点,则找两个最远的叶子肯定是直径,也就是B+D. 第二种:不经过根节点,则目标的两个叶子肯定有一个不为根的公共祖先,如红 ...

  4. Bandicam下载 + 破解

    BANDICAM是一款屏幕游戏录制工具. 今天给大家详细介绍下它的下载和破解使用. 安装方法: 一.准备工作 1.官网下载最新版. https://www.bandicam.com/cn/ 2.下载注 ...

  5. UVA11019 Matrix Matcher【hash傻逼题】【AC自动机好题】

    LINK1 LINK2 题目大意 让你在一个大小为\(n*m\)的矩阵中找大小是\(x*y\)的矩阵的出现次数 思路1:Hash hash思路及其傻逼 你把一维情况扩展一下 一维是一个bas,那你二维 ...

  6. 未能加载文件或程序集“NPOI”或它的某一个依赖项

    自己遇到过得一个很麻瓜很耽误时间的bug,也请教了一些大神嫩是没找到解决方法 下面分享下问题和解决方法 做的是一个下载功能,本地是没问题IIS站点导出EXCEL的时候出错 我这边看不到错误信息,只能一 ...

  7. django创建第一个项目helloworld

    环境:centos 7,已安装python 3.6环境 1.安装django并创建django第一个项目 1.1.使用pip安装django# pip install Django或指定安装版本# p ...

  8. Spring Mvc:用MultiPartFile上传单个文件,多个文件

    1.单个文件上传步骤: 添加Apache文件上传jar包 首先需要下载两个apache上传文件的jar包,commons-fileupload-1.3.1jar,commons-io-2.4.jar ...

  9. tornado相关文章

    http://www.linuxzen.com/shi-yong-tornadojin-xing-wang-luo-yi-bu-bian-cheng.html http://cloudaice.com ...

  10. python re示例

    #!/usr/bin/env python # encoding: utf-8 # Date: 2018/5/25import re s = '124311200111155214'ss = re.s ...