1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| dev_update_off () dev_close_window () read_image (Image, 'plastics/plastics_01') get_image_size (Image, Width, Height) dev_open_window (0, 0, Width, Height, 'black', WindowHandle) set_display_font (WindowHandle, 14, 'mono', 'true', 'false') dev_set_draw ('margin') dev_set_line_width (3) dev_set_color ('red')
* 优化FFT速度 optimize_rft_speed (Width, Height, 'standard')
* 构建滤波器 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)
* 处理图像 NumImages := 11 for Index := 1 to NumImages by 1 read_image (Image, 'plastics/plastics_' + Index$'02') rgb1_to_gray (Image, Image)
* 频域卷积 rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width) convol_fft (ImageFFT, Filter, ImageConvol) rft_generic (ImageConvol, ImageFiltered, 'from_freq', 'n', 'real', Width)
* 图像处理 gray_range_rect (ImageFiltered, ImageResult, 10, 10) min_max_gray (ImageResult, ImageResult, 0, Min, Max, Range) threshold (ImageResult, RegionDynThresh, max([5.55,Max * 0.8]), 255) connection (RegionDynThresh, ConnectedRegions) select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 4, 99999) union1 (SelectedRegions, RegionUnion) closing_circle (RegionUnion, RegionClosing, 10) connection (RegionClosing, ConnectedRegions1) select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 10, 99999) area_center (SelectedRegions1, Area, Row, Column)
dev_display (Image) Number := |Area| if (Number > 0) gen_circle_contour_xld (ContCircle, Row, Column, gen_tuple_const(Number, 30), gen_tuple_const(Number, 0), gen_tuple_const(Number, rad(360)), 'positive', 1) ResultMessage := [Number + ' defect(s) found'] Color := 'red' dev_display (ContCircle) else ResultMessage := 'OK' Color := 'forest green' endif disp_message (WindowHandle, ResultMessage, 'window', 12, 12, Color, 'true') if (Index != NumImages) disp_continue_message (WindowHandle, 'black', 'true') stop () endif endfor
|