1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        【深度學(xué)習(xí)】基于區(qū)域生長的圖像分割算法!

        共 2845字,需瀏覽 6分鐘

         ·

        2022-04-11 19:00

        圖像分割的目的是將圖像劃分為多個不同的區(qū)域,所以我們可以直接從尋找圖像中的區(qū)域來設(shè)計分割算法。區(qū)域生長正是一種基于區(qū)域?qū)ふ业膫鹘y(tǒng)圖像分割算法。

        區(qū)域生長基本原理

        區(qū)域生長(Region Growth)算法是一種基于區(qū)域的傳統(tǒng)圖像分割算法。區(qū)域生長可以根據(jù)預(yù)先定義的生長規(guī)則將像素或者小區(qū)域不斷組合為更大區(qū)域的過程。具體地,區(qū)域生長是從一組初始種子點出發(fā),通過預(yù)先定義的區(qū)域生長規(guī)則,將與種子點性質(zhì)相似的領(lǐng)域像素不斷添加到每個種子點上,并且滿足區(qū)域生長的終止條件時形成最終生長區(qū)域的過程。假設(shè)為待分割的輸入圖像陣列,為一組種子點陣列,其中種子點處位置為1,其他位置為0,并且假設(shè)具有相同的尺寸。表示在每個像素點的相關(guān)屬性。基于8連接的區(qū)域生長算法的流程描述如下:

        • 在種子陣列中找到所有的連通分量,將每個連通分量腐蝕為一個像素,并將腐蝕成功的像素標記為1,其他像素標記為0.
        • 在坐標形成圖像,如果輸入圖像在該點坐標處滿足給定的屬性,則令,否則令。
        • 中為8連通種子點的所有為1的點添加到s中的每個種子點中直至滿足生長結(jié)束條件。
        • 最后在不同區(qū)域標記出每個連通分量形成最終的分割圖像。

        下面我們通過一個簡單的計算例子來更加直觀地理解區(qū)域生長算法。

        假設(shè)有如圖所示的5×5圖像陣列,選定陣列中最大值9作為初始種子點(圖中橙色像素塊),區(qū)域生長的像素閾值為2,現(xiàn)按照區(qū)域生長算法對該圖像陣列進行分割。

        按照區(qū)域生長閾值2,取值范圍為[7,11],生長后的區(qū)域像素均值為7.8。第一次生長效果如圖2所示,藍色區(qū)域即第一次生長后的區(qū)域。

        第一次生長后的區(qū)域均值為7.8,按照生長閾值為2,第二次生長的像素取值范圍應(yīng)為[5.8,9.8],如圖3所示,綠色部分為第二次生長的區(qū)域結(jié)果。

        第二次生長后的區(qū)域均值為7.1,按照生長閾值為2,第三次生長的像素取值范圍應(yīng)為[5.1,9.1],如圖4所示,黃色部分為第三次生長的區(qū)域結(jié)果。

        第三次生長后的區(qū)域均值為6.9,按照生長閾值為2,第三次生長的像素取值范圍應(yīng)為[4.9,8.9],周邊已沒有滿足繼續(xù)生長的像素點,到此我們停止生長。將生長后的區(qū)域標記為1,其他區(qū)域標記為0,最終的分割區(qū)域如圖5所示。

        區(qū)域生長分割示例

        給定一張NBA球星科比的圖像(如圖6所示),我們嘗試實現(xiàn)一個區(qū)域生長圖像分割算法來對該圖像進行前景與背景的分割。

        現(xiàn)嘗試基于C++代碼來實現(xiàn)一個區(qū)域生長分割算法。按照前述基于8連接的區(qū)域生長算法的流程描述,實現(xiàn)過程如下代碼所示。

        #include #include 
        using namespace std;using namespace cv;// 定義區(qū)域生長分割算法bool RegionGrowing(Mat img, Mat& result, Point2i seed, int threshold) { // 將圖像全部設(shè)置為黑 result = Mat::zeros(img.size(), CV_8UC1); // 設(shè)置種子點范圍條件 if (seed.x < 0 || seed.y < 0 || seed.y > img.rows - 1 || seed.x > img.cols - 1) { return false; } // 種子點集 vector seeds; // 壓入初始種子點 seeds.push_back(seed); // 種子點設(shè)置為白 result.ptr(seed.y)[seed.x] = 255; // 8連接生長方向 int growDirections[8][2] = { {-1,-1}, {0,-1}, {1,-1}, {-1,0}, {1,0}, {-1,1}, {0,1}, {1,1} };
        // 開始生長 while (!seeds.empty()) { // 取出一個種子點作為現(xiàn)在循環(huán)的初始種子點 Point2i seed_current = seeds.back(); seeds.pop_back();
        // 遍歷各生長方向的鄰點 for (int i = 0; i < 8; i++) { Point2i neighborPoint = { seed_current.x + growDirections[i][0], seed_current.y + growDirections[i][1] }; // 鄰點 if (neighborPoint.x < 0 || neighborPoint.y < 0 || neighborPoint.x > img.cols - 1 || neighborPoint.y > img.rows - 1) { // 鄰點超出范圍 continue; } if ((result.ptr(neighborPoint.y)[neighborPoint.x] == 0) && abs(img.ptr(neighborPoint.y)[neighborPoint.x] - img.ptr(seed.y)[seed.x]) < threshold) { // 設(shè)置為種子點 result.ptr(neighborPoint.y)[neighborPoint.x] = 255; // 設(shè)置為白色 seeds.push_back(neighborPoint); // 壓入種子集 } } }
        return true;}

        基于上述代碼分割后的圖像如圖7所示??梢钥吹?,區(qū)域生長算法基本上能分割出目標區(qū)域,但因為圖像本身復(fù)雜性,在分割效果上仍有待提升的地方。


        參考資料:

        岡薩雷斯 數(shù)字圖像處理

        https://gy23333.github.io/2020/01/18/%E5%9F%BA%E4%BA%8E%E5%8C%BA%E5%9F%9F%E7%9A%84%E5%9B%BE%E5%83%8F%E5%88%86%E5%89%B2%E2%80%94%E2%80%94%E5%8C%BA%E5%9F%9F%E7%94%9F%E9%95%BF/

        往期精彩回顧





        瀏覽 71
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            夜夜爽AV福利精品导航 | 大香蕉综合在线观看 | 伊人大香蕉视频在线 | 我和漂亮老师做爰9 | 自拍偷拍在线视频 | 一级全黄少妇性色生活片免费 | 艹逼电影 | 精品秘 无码一区二区久久 | 激情肏屄网 | 日本大学生黄色片 |