任务要求:
图为HALCON中的例图“tooth_rim”,请用高斯高通滤波器提取图像的轮廓。
任务分析:
图像的边缘对应频谱的高频部分,可以通过构造一个高频滤波器,过滤掉图像的低频部分,从而得到图像的边缘。HALCON中没有直接生成高斯高通滤波器的算子,需要先生成一个实数型的图像,图像上每个像素值为1;再生成一个高斯低通滤波器,两者相减,从而构造一个高通滤波器。
应用代码:
read_image (Image, 'tooth_rim.png')
rgb1_to_gray (Image, GrayImage)
get_image_size (GrayImage, Width, Height)
*构造一个高斯低通滤波器
gen_gauss_filter (ImageGauss, 0.1, 0.1, 0, 'none', 'dc_center', Width, Height)
*构造一个值为0的实数型图像
gen_image_const (Image1, 'real', Width, Height)
paint_region (Image1, Image1, ImageResult, 1, 'fill')
*两者相减,构造高斯高通滤波器
sub_image (ImageResult, ImageGauss, ImageSub, 1, 0)
*傅立叶变换,得到图像的频域图像
fft_generic(GrayImage,ImageFFT2,'to_freq',-1,'none','dc_center','complex')
*用高通滤波器实现滤波
convol_fft(ImageFFT2,ImageSub,ImageConvol2)
*从频域反变换回时域
fft_generic(ImageConvol2,ImageResult2,'from_freq',1,'sqrt','dc_center','byte')