QQ登录

只需一步,快速开始

工业视觉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计算两个输入图像的局部对比度(能量)。得到的图像能量定义为

工业视觉halcon FFT相关滤波器介绍5

工业视觉halcon FFT相关滤波器介绍5

通常在计算能量之前,先用Gabor滤波器对图像进行卷积,
再对Gabor滤波器进行希尔伯特变换(见convol_gabor)。
在这情况下,传递给energy_gabor的图像的第一个通道是经过哈伯尔滤波的图像,转换回空间域(见fft_image_inv),
第二个通道是与Hilbert变换卷积的结果,也转换回空间域。
局部能量是对图像中结构(如边缘和线)的局部对比度的度量。


6,7,8三函数的例程:
read_image (Image, 'printer_chip/printer_chip_01')
zoom_image_size (Image, Image, 512, 512, 'constant')
gen_gabor(Filter,1.4,0.4,1.0,1.5,'n','dc_edge',512,512)
fft_generic(Image,ImageFFT,'to_freq',-1,'none','dc_edge','complex')
convol_gabor(ImageFFT,Filter,Gabor,Hilbert)
fft_generic(Gabor,GaborInv,'from_freq',1,'none','dc_edge','byte')
fft_generic(Hilbert,HilbertInv,'from_freq',1,'none','dc_edge','byte')
energy_gabor(GaborInv,HilbertInv,Energy)

9.gen_bandfilter( : ImageFilter : MinFrequency, MaxFrequency, Norm, Mode, Width, Height : )
gen_bandfilter在频域内产生一个理想的带滤波器。
参数MinFrequency, MaxFrequency决定滤波器的截止频率作为最大(水平和垂直)频率的一部分,
可以表示为一个图像的尺寸Width* Height,即。,最小频率和最大频率应介于0和1之间。
为了使滤波操作的整体效率达到最大,可以使用参数Norm来指定滤波器的归一化因子。
如果使用fft_generic和Norm = 'n',则可以避免FFT中的规范化。
Mode可以用来确定滤波器的DC项在哪里,或者在实值FFT中是否应该使用滤波器。
如果使用fft_generic,则可以使用'dc_edge'获得效率。
如果使用fft_image和fft_image_inv进行过滤,则必须使用Norm = 'none'和Mode = 'dc_center'。
如果使用rft_generic,则必须使用Mode = 'rft'。
得到的图像包含一个值为0的环,以及一个由该环外归一化确定的值。


例程:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
gen_bandpass(Bandfilter,0.2,0.4,'n','dc_edge',Width,Height)
fft_generic(Image,ImageFFT,'to_freq',-1,'none','dc_edge','complex')
convol_fft(ImageFFT,Bandfilter,ImageConvol)


10.gen_bandpass( : ImageBandpass : MinFrequency, MaxFrequency, Norm, Mode, Width, Height : )
gen_bandpass在频域内产生一个理想的带通滤波器。
MinFrequency, MaxFrequency的参数决定滤波器的截止频率作为最大(水平和垂直)频率的一部分,
可以表示为一个图像的尺寸 Width* Height ,即。,最小频率和最大频率应介于0和1之间。
为了使滤波操作的整体效率达到最大,可以使用参数Norm来指定滤波器的归一化因子。
如果使用fft_generic和Norm = 'n',则可以避免FFT中的规范化。
Mode可以用来确定滤波器的直流项在哪里,或者在实值FFT中是否应该使用滤波器。
如果使用fft_generic,则可以使用'dc_edge'获得效率。
如果使用fft_image和fft_image_inv进行过滤,则必须使用Norm = 'none'和Mode = 'dc_center'。
如果使用rft_generic,则必须使用Mode = 'rft'。
生成的图像包含一个值为255的环空,该环外的值为0。


例程:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
gen_bandpass(Bandpass,0.2,0.4,'n','dc_edge',Width,Height)
fft_generic(Image,ImageFFT,'to_freq',-1,'none','dc_edge','complex')
convol_fft(ImageFFT,Bandpass,ImageConvol)

11.gen_highpass( : ImageHighpass : Frequency, Norm, Mode, Width, Height : )
gen_highpass在频域内产生一个理想的高通滤波器。
参数Frequency决定了滤波器的截止频率作为最大(水平和垂直)频率的一部分,该频率可以用大小为Width* Height的图像表示,
即,频率应介于0至1之间。为了使滤波操作的整体效率达到最大,可以使用参数Norm来指定滤波器的归一化因子。
如果使用fft_generic和Norm = 'n',则可以避免FFT中的规范化。
Mode可以用来确定滤波器的DC项在哪里,或者在实值FFT中是否应该使用滤波器。
如果使用fft_generic,则可以使用'dc_edge'获得效率。
如果使用fft_image和fft_image_inv进行过滤,则必须使用Norm = 'none'和Mode = 'dc_center'。
如果使用rft_generic,则必须使用Mode = 'rft'。
得到的图像有一个值为0的内部部分和一个值由归一化因子决定的外部部分。


例程:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
gen_highpass(Highpass,0.2,'n','dc_edge',Width,Height)
fft_generic(Image,ImageFFT,'to_freq',-1,'none','dc_edge','complex')
convol_fft(ImageFFT,Highpass,ImageConvol)
fft_generic(ImageConvol,ImageResult,'from_freq',1,'none','dc_edge','byte')



12.gen_lowpass( : ImageLowpass : Frequency, Norm, Mode, Width, Height : )
gen_lowpass在频域中生成一个理想的低通滤波器。
参数Frequency决定了滤波器的截止频率作为最大(水平和垂直)频率的一部分,
该频率可以用大小为Width*Height的图像表示,即,频率应介于0至1之间。
为了使滤波操作的整体效率达到最大,可以使用参数Norm来指定滤波器的归一化因子。
如果使用fft_generic和Norm = 'n',则可以避免FFT中的规范化。
Mode可以用来确定滤波器的直流项在哪里,或者在实值FFT中是否应该使用滤波器。
如果使用fft_generic,则可以使用'dc_edge'获得效率。
如果使用fft_image和fft_image_inv进行过滤,则必须使用Norm = 'none'和Mode = 'dc_center'。
如果使用rft_generic,则必须使用Mode = 'rft'。
结果图像的内部部分的值设置为归一化因子,外部部分的值为0。
例程:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
gen_lowpass(Lowpass,0.2,'n','dc_edge',Width,Height)
fft_generic(Image,ImageFFT,'to_freq',-1,'none','dc_edge','complex')
convol_fft(ImageFFT,Lowpass,ImageConvol)
fft_generic(ImageConvol,ImageResult,'from_freq',1,'none','dc_edge','byte')

13.gen_mean_filter( : ImageMean : MaskShape, Diameter1, Diameter2, Phi, Norm, Mode, Width, Height : )
gen_mean_filter在频域中生成一个均值滤波器。均值滤波器的形状由MaskShape决定。
对于MaskShape = 'rectangle',将生成一个矩形均值过滤器。
对于MaskShape = 'ellipse',生成一个椭圆平均滤波器。
直径(即。,均值滤波器在空间域中的平滑量)由Diameter1, Diameter2决定。
Diameter1是由Phi决定的滤波器在空间域中主方向的直径。

为了使滤波操作的整体效率达到最大,可以使用参数Norm来指定滤波器的归一化因子。
如果使用fft_generic和Norm = 'n',则可以避免FFT中的规范化。
Mode可以用来确定滤波器的DC项在哪里,或者在实值FFT中是否应该使用滤波器。
如果使用fft_generic,则可以使用'dc_edge'获得效率。
如果使用fft_image和fft_image_inv进行过滤,则必须使用Norm = 'none'和Mode = 'dc_center'。
如果使用rft_generic,则必须使用Mode = 'rft'。
例程:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
gen_mean_filter (FilterMean, 'ellipse', 15, 15, 0, 'n', 'dc_edge',Width, Height)
fft_generic (Image, ImageFFT, 'to_freq', -1, 'none', 'dc_edge', 'complex')
convol_fft (ImageFFT, FilterMean, Filtered)

14.gen_sin_bandpass( : ImageFilter : Frequency, Norm, Mode, Width, Height : )
gen_sin_bandpass生成一个旋转不变的带通滤波器,其响应在频域内为正弦函数。
正弦函数的最大值是由Frequency决定的,Frequency是最大(水平和垂直)频率的一部分,
可以用大小为Width*Height 的图像表示,即,频率应介于0至1之间。
为了使滤波操作的整体效率达到最大,可以使用参数Norm来指定滤波器的归一化因子。
如果使用fft_generic和Norm = 'n',则可以避免FFT中的规范化。
Mode可以用来确定滤波器的直流项在哪里,或者在实值FFT中是否应该使用滤波器。
如果使用fft_generic,则可以使用'dc_edge'获得效率。
如果使用fft_image和fft_image_inv进行过滤,则必须使用Norm = 'none'和Mode = 'dc_center'。
如果使用rft_generic,则必须使用Mode = 'rft'。
对于DC项,滤波器始终为零,随着正弦函数的增大而增大,随着频率的增大而减小。
所使用的正弦函数的范围是从0到pai。所有其它点都设为零。
例程:
read_image (Image, 'surface_scratch')
invert_image (Image, ImageInverted)
get_image_size (Image, Width, Height)
gen_sin_bandpass (ImageBandpass, 0.4, 'none', 'rft', Width, Height)
rft_generic (ImageInverted, ImageFFT, 'to_freq', 'none', 'complex', Width)
convol_fft (ImageFFT, ImageBandpass, ImageConvol)
rft_generic (ImageConvol, Lines, 'from_freq', 'n', 'byte', Width)
*
*使用形态学分割缺陷
threshold (Lines, Region, 5, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 5, 5000)
dilation_circle (SelectedRegions, RegionDilation, 5.5)
union1 (RegionDilation, RegionUnion)
reduce_domain (Image, RegionUnion, ImageReduced)
lines_gauss (ImageReduced, LinesXLD, 0.8, 3, 5, 'dark', 'false', 'bar-shaped', 'false')
union_collinear_contours_xld (LinesXLD, UnionContours, 40, 3, 3, 0.2, 'attr_keep')
select_shape_xld (UnionContours, SelectedXLD, 'contlength', 'and', 15, 1000)
gen_region_contour_xld (SelectedXLD, RegionXLD, 'filled')
union1 (RegionXLD, RegionUnion)
dilation_circle (RegionUnion, RegionScratches, 10.5)
* 显示结果
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_colored (12)
dev_display (Image)
dev_display (RegionScratches)


15.gen_std_bandpass( : ImageFilter : Frequency, Sigma, Type, Norm, Mode, Width, Height : )
gen_std_bandpass生成一个旋转不变的带通滤波器,其响应由参数frequency和sigma确定:
frequency确定相对于dc项的最大响应的位置,sigma确定通过滤波器的频带宽度。
Frequency和sigma被指定为最大(水平和垂直)频率的一个分数,可以在一个尺寸为 Width*Height的图像中表示。
频率应介于0和1之间。
对于Type='gauss',将生成一个高斯响应,其中sigma是标准偏差。
对于Type='sin',生成一个正弦函数,其最大值为Frequency和范围sigma。
为了最大限度地提高滤波操作的整体效率,可以使用参数Norm来指定滤波器的归一化因子。
如果使用fft_generic和norm='n',则可以避免fft中的规范化。
Mode可用于确定滤波器的直流项在何处,或在实值FFT中是否应使用滤波器。
如果使用fft_generic,可以使用“dc_edge”来提高效率。
如果使用fft_image和fft_image_inv进行过滤,则必须使用norm='none'和mode='dc_center'。
如果使用rft_generic,则必须使用mode='rft'。
例程:
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
gen_std_bandpass (ImageFilter, 0.1, 0.01, 'sin', 'none', 'dc_center', Width, Height)
fft_generic(Image,ImageFFT,'to_freq',-1,'none','dc_edge','complex')
convol_fft(ImageFFT,ImageFilter,ImageConvol)
fft_generic(ImageConvol,ImageResult,'from_freq',1,'none','dc_edge','byte')

16.phase_deg(ImageComplex : ImagePhase : : )
phase_deg以度数计算complex图像的相位。使用的公式如下:

工业视觉halcon FFT相关滤波器介绍4

工业视觉halcon FFT相关滤波器介绍4

因此,ImagePhase包含了相位角的一半。对于负相位角,加180。


17.phase_rad(ImageComplex : ImagePhase : : )
phase_rad以弧度计算complex图像的相位。使用的公式如下:
phase = atan2(imaginary part,real part) .
例程:
read_image(Image,'monkey')
fft_image(Image,FFT)
phase_deg(FFT,Phase)
phase_rad (FFT, ImagePhase)
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (Phase)
dev_display (ImagePhase)

18.power_byte(Image : PowerByte : : )
power_byte从傅里叶变换后的图像(参见fft_image)的实部和虚部计算功率谱,即,频率模量。结果图像的类型为“byte”。
使用的公式如下:

工业视觉halcon FFT相关滤波器介绍3

工业视觉halcon FFT相关滤波器介绍3

请注意,由于生成的图像类型“byte”,超过255的结果灰度值将被剪切为255。


19.power_real(Image : ImageResult : : )
power_real从傅里叶变换后的图像的实部和虚部计算功率谱(参见fft_image),即,频率模量。结果图像类型为“real”。
使用的公式如下:

工业视觉halcon FFT相关滤波器介绍2

工业视觉halcon FFT相关滤波器介绍2



20.power_ln(Image : ImageResult : : )
power_ln从傅里叶变换后的图像的实部和虚部计算功率谱(参见fft_image),即,频率模量。
此外,对结果应用自然对数。结果图像类型为“real”。
使用的公式如下:

工业视觉halcon FFT相关滤波器介绍1

工业视觉halcon FFT相关滤波器介绍1



  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)









回复

使用道具 举报

大神点评(2)

快速回复 返回列表 客服中心 搜索