Halcon表面缺陷檢測 不均勻光照的表面缺陷

2021-09-25 05:35:01 字數 2661 閱讀 5285

對應示例程式:

find_scratches_bandpass_fft.hdev

目標:實現不均勻光照的表面缺陷。

思路為:

先建立乙個合適的帶通濾波器,然後把影象(例程做了影象反轉)傅利葉變換在頻域濾波,加強高頻部分,然後變回時域做形態學處理,最後通過line_gauss檢測出缺陷。

影象:

**:

dev_update_off ()

dev_close_window ()

read_image (image, 'su***ce_scratch')

invert_image (image, imageinverted) //反轉影象

get_image_size (image, width, height)

dev_open_window (0, 0, width, height, 'black', windowhandle)

set_display_font (windowhandle, 16, 'mono', 'true', 'false')

dev_display (image)

* * optimize the speed of the fast fourier transform

* message := 'optimize the speed of the fast fourier transform.'

* message[1] := 'please wait...'

* disp_message (windowhandle, message, 'window', 12, 12, 'black', 'true')

* optimize_rft_speed (width, height, 'standard')

* disp_continue_message (windowhandle, 'black', 'true')

* stop ()

* * enhance the scratches by filtering in the frequency domain

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) //頻率域到空間域

* * segment the scratches by using morphology

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)

* * display the results 顯示結果

dev_set_draw ('margin')

dev_set_line_width (3)

dev_set_colored (12)

dev_display (image)

dev_display (regionscratches)

用到的幾個運算元:

gen_sin_bandpass—生成帶通濾波器

rft_generic–傅利葉變換

convol_fft–卷積

rft_generic–傅利葉變換

lines_gauss–檢測線

union_collinear_contours_xld–聯合近似共線輪廓

參考資料:

[1]:

去光照不均勻

matlab clc,close all tic im imread test.png figure imshow im title 原圖 h,s,v rgb2hsv im 轉到hsv空間,對亮度h處理 高斯濾波 hsize min size im,1 size im,2 高斯卷積核尺寸 q sqr...

redis集群redisKey分步不均勻問題

專案中使用了redis集群,但是生產上發現rediskey 80 都被分配到了同乙個節點,導致該節點磁碟容量報警,其餘節點閒置的情況 專案中為了保持資料的準確性,當系統傳送異常時 單例項上的mset是乙個原子性 atomic 操作,所有給定 key 都會在同一時間內被設定,某些給定 key 被更新而...

Echarts繪製不均勻資料軸(y)

現有一組資料 最小的數是50000 5萬 最大的數是3000000000 30億 如果按照echarts正常的畫法,我們只需提取出來這些資料然後交給echarts顯示即可。在圖中,y 軸的數值均勻分布,最高的柱子在x軸 第五值為30億,但是x軸 第一值為5萬的柱子,根本看不見,因為差距太大了,包括x...