采用遞歸實現二值化圖像連通區域的區域生長算法


對圖像二值化處理后,常常需要提取感興趣連通區域,其中提取二值化圖像的某一連通區域的算法中,區域生長是經常考慮的算法之一。本文通過函數遞歸對二值化圖像的連通區域實現了區域生長的算法,具體算法實現示例代碼以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平台來實現遞歸。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM