【缺陷檢測】基于區(qū)域生長算法實(shí)現(xiàn)對焊接孔隙檢測matlab源碼
原理
區(qū)域生長算法的基本思想是將有相似性質(zhì)的像素點(diǎn)合并到一起。對每一個區(qū)域要先指定一個種子點(diǎn)作為生長的起點(diǎn),然后將種子點(diǎn)周圍領(lǐng)域的像素點(diǎn)和種子點(diǎn)進(jìn)行對比,將具有相似性質(zhì)的點(diǎn)合并起來繼續(xù)向外生長,直到?jīng)]有滿足條件的像素被包括進(jìn)來為止。這樣一個區(qū)域的生長就完成了。這個過程中有幾個關(guān)鍵的問題:
a> 給定種子點(diǎn)(種子點(diǎn)如何選?。?
??????種子點(diǎn)的選取很多時候都采用人工交互的方法實(shí)現(xiàn),也有用其他方式的,比如尋找物體并提取物體內(nèi)部點(diǎn)作為種子點(diǎn)。
b> 確定在生長過程中能將相鄰像素包括進(jìn)來的準(zhǔn)則
?????灰度圖像的差值;彩色圖像的顏色等等。都是關(guān)于像素與像素間的關(guān)系描述。
c> 生長的停止條件
算法步驟 :
a> ?創(chuàng)建一個空白的圖像(全黑);
b> 將種子點(diǎn)存入vector中,vector中存儲待生長的種子點(diǎn);
c> 依次彈出種子點(diǎn)并判斷種子點(diǎn)如周圍8鄰域的關(guān)系(生長規(guī)則),相似的點(diǎn)則作為下次生長的種子點(diǎn);
d> vector中不存在種子點(diǎn)后就停止生長。

?
clear all, close all, clc
f = imread('defective_weld.tif');
imshow(f), title('原始圖象')
figure, [counts,x] = imhist(f); bar(x,counts), title('原始圖象的直方圖')
S = 255;
T = 65;
[g, NR, SI, TI] = regiongrow(f, S, T);
figure, imshow(SI), title('種子點(diǎn)圖象')
figure, imshow(TI), title('閾值測試后的圖象')
figure, imshow(g), title('8連通性分析后的圖象')
bw = edge(g, 'canny');
figure, imshow(bw), title('邊緣圖象')
ff = f;
ff(bw) = 0;
figure, imshow(ff), title('疊加圖象')




??

?