3、木板划痕检测
*http://www.ihalcon.com/read-13031-1.html *缺陷检测,将木板的划痕提取出来 dev_update_off () dev_close_window () read_image (Image, '缺陷检测木板划痕提取.jpg') *彩色转灰度图 count_channels (Image, Channels) if (Channels == 3 or Channels == 4) rgb1_to_gray (Image, Image) endif get_image_size (Image, Width, Height) dev_open_window_fit_size (0, 0, Width, Height, -1, -1, WindowHandle) dev_display (Image) *傅里叶变换去背景 fft_generic (Image, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex') gen_rectangle2 (Rectangle1, 308.5, 176.56, rad(-0), 179.4, 7.725) gen_rectangle2 (Rectangle2, 306.955, 175, rad(-90), 180.765, 4.68) union2 (Rectangle1, Rectangle2, UnionRectangle) paint_region (UnionRectangle, ImageFFT, ImageResult, 0, 'fill') fft_generic (ImageResult, ImageFFT1, 'from_freq', 1, 'sqrt', 'dc_center', 'byte') *提取划痕 threshold (ImageFFT1, Regions, 5, 240) connection (Regions, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 20, 99999) union1 (SelectedRegions, RegionUnion) dilation_rectangle1 (RegionUnion, RegionDilation, 5, 5) connection (RegionDilation, ConnectedRegions1) select_shape (ConnectedRegions1, SelectedRegions1, ['width','height'], 'and', [30,15], [150,100]) dilation_rectangle1 (SelectedRegions1, RegionDilation1, 11, 11) union1 (RegionDilation1, RegionUnion1) skeleton (RegionUnion1, Skeleton) *显示 dev_set_color ('red') dev_display (Image) dev_display (Skeleton)
halcon官方自带的例子
detect_indent_fft.hdev
detect_mura_defects_texture.hdev
官方例子detect_indent_fft,使用了差分两个高斯滤波器
detect_indent_fft.hdev * Optimize the fft speed for the specific image size optimize_rft_speed (Width, Height, 'standard') * * Construct a suitable filter by combining two gaussian * filters Sigma1 := 10.0 Sigma2 := 3.0 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, Filter, 1, 0) * * Process the images iteratively NumImages := 11 for Index := 1 to NumImages by 1 * * Read an image and convert it to gray values read_image (Image, 'plastics/plastics_' + Index$'02') rgb1_to_gray (Image, Image) * Perform the convolution in the frequency domain rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width) convol_fft (ImageFFT, Filter, ImageConvol) rft_generic (ImageConvol, ImageFiltered, 'from_freq', 'n', 'real', Width)
姊妹篇
halcon视觉缺陷检测常用的6种方法
参考文献
微信公众号:机器视觉那些事儿
《Halcon机器视觉算法原理与编程实战》杨青