【數字圖像處理】圖像的面積與周長計算


 

二值化圖像區域標記

在二值化圖像中,相互聯結的黑像素集合成為一個(黑)區域,通過對圖像內每個區域進行標記操作,求得區域的數目。
處理前的f是二值的,像素要么為0(黑),要么為255(白)
處理后每個像素的值即為其所處理區域的標號(1,2,3,。。。)

標記規則
1.初始化標記為0,從左到右,從上到下逐個像素掃描
2.若該點為物體顏色,則繼續判斷該點的左上、正上,右上及左前點是否都不為物體,則標號加1,若該點為背景色,則跳過。
3.優先級依次為右上點,正上點,左上點及左前點。右上點的優先級最高,左前點的優先級最低。
4.繼續遍歷圖像,若右上點為物體,則該點標記上與右上點相同的值。
5.若右上不為物體,則判斷正上點,左上點及左前點
特殊情況:當前點的右上點及左前點為不同標記,正上點和左上點不為物體,則當前點標記同右上點置相同的值,把所有標記與左前點相同的像素值都標記成與右上點同樣的值。

如圖下面的黑點,如果出現上面的特殊情況,可以這樣處理:

 

 

 

int sign_count = 0;
int sum[5] = {0};
int sign_temp;
for(int y = 1; y<120 - 1;y++)
    for(int x = 1; x<180 - 1;x++)
    {   
        //只有當像素點為物體,才進行下面的判斷。
        if(img[y][x] == 0)
        {
         //解決特殊情況
          if(img[y-1][x+1] != img [y][x-1] && img[y-1][x-1] == img[y-1][x])
            {
            img[y][x] = img[y - 1][x + 1];
            sign_temp = img [y][x-1];
            for(int i = 0; i<y; i ++)
                for(int j = 0; j<x;j++)
                {
                    if(img[i][j] == sign_temp)
                    img[i][j] = img[y][x]
                }
            
            }
            
           //如果該點周圍四個點皆為背景,則說明該點新的物體,將標記累加,並將該點賦值為標記。
           if((img[y][x - 1] + img[y - 1][x - 1] +img[y - 1][x] +img[y - 1][x + 1])/4 !=0)
            {
                   sign_count+=1;
                img[y][x] =sign_count;
            }
              //如果該點周圍有存在物體,則按優先級,將標號賦值給該點。
           else{
            if(img[y - 1][x + 1]!= 0)
                img[y][x] = img[y - 1][x + 1];

            else if(img[y - 1][x] != 0)
                img[y][x] = img[y - 1][x];

            else if(img[y - 1][x - 1] != 0)
                img[y][x] = img[y - 1][x - 1];

            else
                img[y][x] = img[y][x - 1];
            }

        }
    }    
//圖像面積統計
for(int y = 1; y<120 - 1;y++)
    for(int x = 1; x<180 - 1;x++)
    {      
        switch(img[y][x])
        {
        case 0:{sum[0]++;break;}
        case 1:{sum[1]++;break;}
        case 2:{sum[2]++;break;}
        case 3:{sum[3]++;break;}
        case 4:{sum[4]++;break;}
        }
    }
}

 

  • 二值化圖像區域的面積測量

在二值化圖像中,通過對圖像內的每個像素進行標記操作,將物體的像素值改為標號,求各種標號的總和,即求得不同區域的面積數目。

 

  • 二值化圖像的周長測量

在二值化區域標記的基礎上,物體的像素值改為標號,再采用邊界跟蹤法,跟蹤各封閉區域邊界線(輪廓線)的每個黑像素的標號,記錄二值圖像物體邊界。

 

  • 二值化化圖像的小區域消除

再二值化圖像的區域標記基礎上,通過對圖像內每個標記區域進行計算,求得總區域得數目,並求得每個區域面積(像素數)在閾值以下時,則消去該區域,全部置為255(白),由此得到新圖形。

 


免責聲明!

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



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