對圖像二值化處理后,常常需要提取感興趣連通區域,其中提取二值化圖像的某一連通區域的算法中,區域生長是經常考慮的算法之一。本文通過函數遞歸對二值化圖像的連通區域實現了區域生長的算法,具體算法實現示例代碼以MATLAB形式給出如下:
function count = regiongrow(x0,y0) %2016-4-27區域生長算法函數體; 連通區域按照8鄰域標記 %輸出參數是一個固定變量值初始化為0(在本函數體中毫無意義)
%輸入參數是指定連通區域的種子點橫縱坐標
global g R counter row col % 定義全局變量:g:二值化圖像,R:存放初始化為0的指定連通區域(g 和 R具有相同維數),row:圖像矩陣的行數,col:圖像矩陣的列數 count = 0; for i = -1 : 1 for j = -1 : 1 if R(x0,y0) == 255 && x0 > 0 && x0 <= row && y0 > 0 && y0 <= col if x0+i > 0 && x0+i <= row && y0+j > 0 && y0+j <= col && g(x0,y0) == g(x0+i,y0+j) && R(x0,y0) ~= R(x0+i,y0+j) R(x0+i,y0+j) = R(x0,y0); counter = counter + 1; %連通區域的像素個數 regiongrow(x0+i,y0+j); end end end end end
函數使用說明:
1. 在調用該函數前先在二值化圖像上選定感興趣連通區域的種子點(x0,y0);
2. 初始化賦值R(x0,y0)= 255;
3. 然后調用該函數
4. 如果基於MATLAB平台實現圖像連通區域提取,在調用本文函數時會碰到提醒出錯,出錯原因是因為遞歸次數(即棧深度)超出了MATLAB默認規定的上限(500次),可以通過set函數重新設置(設置過大可能會導致MATLAB軟件閃退)。本文只是通過MATLAB程序給出一種利用遞歸思想實現連通區域提取的思路,如果連通區域太大,可以嘗試在vc平台來實現遞歸。