工控编程吧

标题: 工业视觉halcon FFT相关滤波器介绍 [打印本页]

作者: qq263946146    时间: 2019-6-12 00:58
标题: 工业视觉halcon FFT相关滤波器介绍
fft_image(Image : ImageFFT : : )
fft_image计算输入图像(image)的傅里叶变换,即,它将图像转换成频域。
所使用的算法是快速傅里叶变换。这与下面调用相对应
fft_generic(Image,ImageFFT,'to_freq',-1,'sqrt','dc_center','complex')


2.gen_filter_mask( : ImageFilter : FilterMask, Scale, Width, Height : )
gen_filter_mask将空间域中的筛选器掩码存储为实数图像。
滤镜掩码的中心位于生成图像的中心。
参数Scale决定了滤波器掩码的值乘以多少(这导致滤波器的傅里叶变换值更大)。
在FilterMask中给出的相应的过滤矩阵可以从文件或元组生成。
滤波器矩阵的格式由算子 convol_image描述。
示例过滤器掩码可以在HALCON主目录中的“filter”目录中找到。
该算子对于滤波器掩码的频响可视化非常有用(通过对该算子的结果图像进行傅里叶变换)。


3.fft_image_inv(Image : ImageFFTInv : : )
fft_image_inv计算输入图像(image)的傅里叶反变换,即,它将图像转换回空间域。
这与下面调用相对应
fft_generic(Image,ImageFFT,'from_freq',1,'sqrt','dc_center','byte')


下面函数例程:
gen_filter_mask (ImageFilterEE, 'laws_ee', 1.0, 512, 512)
fft_image (ImageFilterEE, EE)
gen_filter_mask (ImageFilterSS, 'laws_ss', 1.5, 512, 512)
fft_image (ImageFilterSS, SS)
gen_filter_mask (ImageFilterRR, 'laws_rr', 0.1, 512, 512)
fft_image (ImageFilterRR, RR)
fft_image_inv (RR, ImageFFTInv)

4.correlation_fft(ImageFFT1, ImageFFT2 : ImageCorrelation : : )
correlation_fft计算傅里叶变换后的输入图像在频域中的相关性。
通过将ImageFFT1与ImageFFT2的复共轭相乘计算相关系数。
需要注意的是,为了在空间域中实现相关性的正确缩放,
正向转换必须使用带Norm = 'none'的fft_generic或rft_generic操作符,
反向转换必须使用带Norm = 'n'的fft_generic或rft_generic操作符。
如果ImageFFT1和ImageFFT2包含相同数量的图像,则对应的图像是成对关联的。
否则,ImageFFT2必须只包含一个图像。在这种情况下,对ImageFFT1的每张图像与ImageFFT2进行关联。
例程:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size(Image,Width,Height)
rft_generic(Image,ImageFFT,'to_freq','none','complex',Width)
correlation_fft(ImageFFT,ImageFFT,Correlation)
rft_generic(Correlation,AutoCorrelation,'from_freq','n','real',Width)

5.phase_correlation_fft(ImageFFT1, ImageFFT2 : ImagePhaseCorrelation : : )
phase_correlation_fft计算傅里叶变换后的输入图像在频域内的相位相关性。
通过将ImageFFT1与ImageFFT2的复共轭相乘,再除以乘积的绝对值,计算相位相关。
需要注意的是,为了在空间域中实现相位相关性的正确缩放,
正向变换必须使用带Norm = 'none'的fft_generic或rft_generic运算符,
反向变换必须使用带Norm = 'n'的fft_generic或rft_generic运算符。
如果ImageFFT1和ImageFFT2包含相同数量的图像,则对应的图像是相位相关的成对图像。
否则,ImageFFT2必须只包含一个图像。
在这种情况下,对ImageFFT1和ImageFFT2的每张图像进行相位相关。


例程:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size(Image,Width,Height)
rft_generic(Image,ImageFFT1,'to_freq','none','complex',Width)
rft_generic(Image,ImageFFT2,'to_freq','none','complex',Width)
phase_correlation_fft(ImageFFT1,ImageFFT2,PhaseCorrelationFFT)
rft_generic(PhaseCorrelationFFT,PhaseCorrelation,'from_freq','n','real',Width)
* 确定两个图像之间的平移。
local_max_sub_pix (PhaseCorrelation, 'facet', 1, 0.02, Row, Column)




6.gen_gabor( : ImageFilter : Angle, Frequency, Bandwidth, Orientation, Norm, Mode, Width, Height : )
gen_gabor生成一个Gabor滤波器,该滤波器具有用户可定义的带通频率范围和Hilbert变换符号。
这是通过计算频域中的对称滤波器来实现的,该滤波器可以通过参数Angle, Frequency, Bandwidth, Orientation来调整,
从而在频域中滤除空间域中的某个频段和某个方向范围。


参数Frequency(中心频率=到DC项的距离)和Orientation(方向)决定滤波器的中心。
频率值越大,传递的频率越高。
Orientation为0的值生成一个水平方向的“crescent”(新月点向上凸起)。
较高的Orientation值导致新月的逆时针旋转。


参数Angle和Bandwidth用于确定滤波器所传递的频率范围和角度。
Angle越大,通过过滤器的角度范围就越小(因为“新月”变得越窄)。
Bandwidth越大,通过的频带越小(因为“新月”变薄)。


为了使滤波操作的整体效率达到最大,可以使用参数Norm来指定滤波器的归一化因子。
如果使用fft_generic和Norm = 'n',则可以避免FFT中的规范化。
Mode可用于确定滤波器的直流项位于何处。
如果使用fft_generic,则可以使用'dc_edge'获得效率。
如果使用fft_image和fft_image_inv进行过滤,则必须使用Norm = 'none'和Mode = 'dc_center'。
注意,gen_gabor不能创建可以与rft_generic一起使用的过滤器。


所得到的图像是一个双通道实图像,包含第一通道中的Gabor滤波器和第二通道中相应的Hilbert滤波器。


7.convol_gabor(ImageFFT, GaborFilter : ImageResultGabor, ImageResultHilbert : : )
convol_gabor将傅里叶变换后的图像与GaborFilter(参见gen_gabor)及其在频域中的希尔伯特变换进行卷积。
结果图像类型为“complex”。


8.energy_gabor(ImageGabor, ImageHilbert : Energy : : )
energy_gabor计算两个输入图像的局部对比度(能量)。得到的图像能量定义为
(, 下载次数: 7)