任務要求:
圖為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')
?