女人夜夜春高潮爽A∨片传媒_国产精品VIDEOS麻豆_在线精品亚洲一区二区三区_亚洲熟妇无码av

圖像處理
新聞詳情

【數字圖像處理】圖像細化處理

發(fa)布時間(jian):2020-12-25 10:46:54 瀏覽次(ci)數:3024

圖像(xiang)細化

細化技術:把一個平面區域簡化成圖的結構形狀表示法
骨架:一種細化結構,它是目標的重要拓撲描述,具有非常廣泛的應用。在圖像識別或數據壓縮時,經常用細化結構。
例如:在識別字符之前,往往要先對字符作細化處理,求出字符的細化結構。
細化(hua)的(de)作用:目的(de)將圖(tu)像(xiang)的(de)骨架(jia)提(ti)取(qu)出(chu)來的(de)同時,保持圖(tu)像(xiang)細小部分的(de)連(lian)通性(xing),對被處(chu)理的(de)圖(tu)像(xiang)進行(xing)細化(hua)有助(zhu)于突出(chu)形狀特點和減少冗余(yu)信息量(liang)。

 

細化算(suan)法

細化算法:采取逐次去除邊界的方法進行的,不能破化圖像的連通性。
通常選擇一組結構元素對,不斷在這些結構對中循環,如果所得結果不再變化,則終止迭代過程,隨著迭代的進行,集合也不斷細化。
結構對的選擇:僅受結構元素不相交的限制(不同的結構對),事實上,我們可以使用同一個結構對,即在不斷重復的迭代細化過程使用同一個結構對。
細化滿足的條件:
1.在細化的過程中,圖像應該有規律地縮小;
2.在圖像逐步縮(suo)小(xiao)的(de)過程中(zhong),應當使圖像的(de)連通(tong)性質保持不變(bian)。

 

細(xi)化算法(fa)過程(cheng)詳解

      我們(men)對一副(fu)二(er)值圖(tu)像(xiang)進行(xing)骨架(jia)提取,就是(shi)(shi)刪除(chu)不需要的(de)輪廓點(dian)(dian),只(zhi)保留其(qi)骨架(jia)點(dian)(dian)。假(jia)(jia)設一個像(xiang)素點(dian)(dian),我們(men)定義(yi)該(gai)點(dian)(dian)為(wei)p1,則它的(de)八鄰(lin)域點(dian)(dian)p2->p9位(wei)置(zhi)如下圖(tu)所示,該(gai)算(suan)法(fa)考慮p1點(dian)(dian)鄰(lin)域的(de)實際情況(kuang),以便決定是(shi)(shi)否刪除(chu)p1點(dian)(dian)。假(jia)(jia)設我們(men)處理(li)的(de)為(wei)二(er)值圖(tu)像(xiang),背景(jing)為(wei)黑色,值為(wei)0,要細化的(de)前景(jing)物體(ti)像(xiang)素值為(wei)1。


算法的描述如下。

首先(xian)復制源(yuan)圖(tu)像(xiang)(xiang)到目地圖(tu)像(xiang)(xiang),然后建(jian)立一個(ge)臨(lin)時圖(tu)像(xiang)(xiang),接著執行(xing)下面(mian)操作:

1. 把目(mu)(mu)地圖像(xiang)復制給臨時圖像(xiang),對臨時圖像(xiang)進(jin)行一(yi)次掃描,對于不為(wei)0的(de)點(dian),如果滿(man)足以下四(si)個條件,則(ze)在(zai)目(mu)(mu)地圖像(xiang)中(zhong)刪除該點(dian)(就是設(she)置該像(xiang)素為(wei)0),這里p2,…,p9是對應位置的(de)像(xiang)素灰度值(其為(wei)1或(huo)者0)。

&nbsp;  a. 2<= p2+p3+p4+p5+p6+p7+p8+p9<=6

    大于(yu)等于(yu)2會(hui)保證p1點(dian)不(bu)是端(duan)點(dian)或(huo)孤(gu)立(li)點(dian),因為(wei)刪除端(duan)點(dian)和孤(gu)立(li)點(dian)是不(bu)合理的,小于(yu)等于(yu)6保證p1點(dian)是一個(ge)邊界點(dian),而不(bu)是一個(ge)內(nei)部點(dian)。等于(yu)0時候(hou),周圍(wei)沒(mei)有等于(yu)1的像素(su),所以(yi)p1為(wei)孤(gu)立(li)點(dian),等于(yu)1的時候(hou),周圍(wei)只(zhi)有1個(ge)灰度等于(yu)1的像素(su),所以(yi)是端(duan)點(dian)(注(zhu):端(duan)點(dian)是周圍(wei)有且只(zhi)能(neng)有1個(ge)值(zhi)為(wei)1的像素(su))。


   b. p2->p9的排列順(shun)序中,01模(mo)式(shi)的數量為1,比如(ru)下面的圖中,有(you)p2p3 => 01, p6p7=>01,所以該像素01模(mo)式(shi)的數量為2。


     之所以要01模式數(shu)量為1,是(shi)要保證刪除當(dang)前像素點后的連通性(xing)。比(bi)如下面(mian)的圖(tu)中,01模式數(shu)量大(da)于1,如果刪除當(dang)前點p1,則連通性(xing)不能(neng)保證。


    c. P2*p4*p6 = 0

    d. p4*p6*p8 = 0


      在第一(yi)次子迭代中,只是移去東南的邊界點,而不考慮西北的邊界點,注意p4,p6出現了2次,就是說(shuo)它們有一(yi)個為(wei)0,則c,d就滿足。

2. 接下(xia)來,把目地圖(tu)像(xiang)再次復制(zhi)到臨(lin)(lin)時圖(tu)像(xiang),接著對臨(lin)(lin)時圖(tu)像(xiang)進行(xing)一(yi)次掃描(miao),如果不為0的點(dian)它的八鄰域滿足(zu)以下(xia)4個條件,則在目地圖(tu)像(xiang)中刪除該點(dian)(就是設(she)置該像(xiang)素為0)

    a. 2&lt;= p2+p3+p4+p5+p6+p7+p8+p9<=6

&nbsp;   b. p2->p9的排列順序中,01模式(shi)的數量(這(zhe)里假設(she)二值圖(tu)非零值為1)為1。

    c. p2*p4*p8 = 0

    d. p2*p6*p8 = 0


第二次(ci)迭代則(ze)(ze)相反,會移(yi)去西北(bei)的(de)邊界點,注(zhu)意p2,p8出(chu)現了2次(ci),就是說它(ta)們(men)有一個為0,則(ze)(ze)c,d就滿足(zu)。

執行(xing)完(wan)上(shang)(shang)面兩個步驟后,就(jiu)完(wan)成了一次(ci)細化算(suan)法,我們可以多次(ci)迭代執行(xing)上(shang)(shang)述過程(cheng),得到最終的骨(gu)架圖。

 

細化實例編程

1.首先對圖像進行二值化,白色為255,黑色為0。
2.設置一個3*3的領域S模板。
3.S模板中各個位置上的取值取決于模板所對應圖像中不同位置的像素,如果S模板某一個位置上所對應的像素值為白,模板上該位置賦為0,否則賦為1。
4.循環所有的前(qian)景像素點,對符合如下條件(jian)的像素點標(biao)記為(wei)刪(shan)除(chu):

  • 2 ≤ N(p1) ≤ 6——N(p1)表示跟P1相鄰的8個像素點中,為前景像素點的個數
  • S(P1) = 1——S(P1)表示將p2-p9-p2之間按序前后分別成對值為0、1的個數
  • P2 * P4 * P6 = 0
  • P4 * P6 * P8 = 0

5.循環所有的(de)前景(jing)像素點,對符合如下(xia)條件的(de)像素點標記(ji)為刪除:

  •  2 ≤ N(p1) ≤ 6——N(p1)表示跟P1相鄰的8個像素點中,為前景像素點的個數
  •  S(P1) = 1——S(P1)表示將p2-p9-p2之間按序前后分別成對值為0、1的個數
  •  P2 * P4 * P8 = 0
  • P2 * P6 * P8 = 0

 6.如果沒有滿足(zu)的(de)點,則結束細化過程。

下面:

Image_Use為目標圖像:高120,長180,處理時不考慮邊界(四邊)
                   
//背景(jing)為(wei)黑色,值為(wei)0,要(yao)細(xi)化的前(qian)景(jing)物體像素值為(wei)1。
int temp[3][3];
int count = 0,flinsh_flag = 0;
while(1){
  flinsh_flag = 0;
  for(int i = 1;i<120-1;i++)
  {
          for(int j = 1;j<180-1;j++)    
          {
                  if(Image_Use[i][j] == 255) continue;
                  //第一步初始化模板
                  memset(temp, 0, sizeof(temp));
                  count = 0;
                  //第二步根據(ju)模板所對應(ying)的像素點,對模板進行賦值
                  //如果(guo)S模(mo)(mo)板某一個(ge)位置上所對應(ying)的像素值為白,模(mo)(mo)板上該位置賦(fu)為0,否則賦(fu)為1
                  if(Image_Use[i][j-1] == 0) temp[1][0] = 1;
                  if(Image_Use[i][j+1] == 0) temp[1][2] = 1;
                  if(Image_Use[i-1][j-1] == 0) temp[0][0] = 1;
                  if(Image_Use[i-1][j+1] == 0) temp[0][2] = 1;
                  if(Image_Use[i-1][j] == 0) temp[0][1] = 1;
                  if(Image_Use[i+1][j-1] == 0) temp[2][0] = 1;
                  if(Image_Use[i+1][j+1] == 0) temp[2][2] = 1;
                  if(Image_Use[i+1][j] == 0) temp[2][1] = 1;    
                  //
                  for(int x = 0;x<3;x++)
                          for(int y = 0;y<3;y++)
                          {      
                                  if(x == 1 && y == 1) continue;
                                  if(temp[x][y] == 1)
                                  count ++;
                          }
                  
                  if(count>=2&&count<=6)
                  { 
                    int ap = 0;
                    if (temp[0][1] == 0 && temp[0][2] == 1) ++ap;
                    if (temp[0][2] == 0 && temp[1][2] == 1) ++ap;
                    if (temp[1][2] == 0 && temp[2][2] == 1) ++ap;
                    if (temp[2][2] == 0 && temp[2][1] == 1) ++ap;
                    if (temp[2][1] == 0 && temp[2][0] == 1) ++ap;
                    if (temp[2][0] == 0 && temp[1][0] == 1) ++ap;
                    if (temp[1][0] == 0 && temp[0][0] == 1) ++ap;
                    if (temp[0][0] == 0 && temp[0][1] == 1) ++ap;
                    if(ap == 1&&((temp[0][1]*temp[1][2]*temp[2][1])== 0)&&((temp[1][2]*temp[2][1]*temp[1][0])== 0))
                    {
                      Image_Use[i][j] = 255;
                      flinsh_flag ++;
                    }
                  }
                  

          }
}
  if(flinsh_flag == 0) 
  {
    break;
  }
  
  flinsh_flag = 0;
  for(int i = 1;i<120-1;i++)
  {
          for(int j = 1;j<180-1;j++)    
          {
                  if(Image_Use[i][j] == 255) continue;
                  //第(di)一步初始化模(mo)板
                   memset(temp, 0, sizeof(temp));
                  count = 0;
                  //第二(er)步(bu)根據模(mo)板所(suo)對應的像(xiang)素點,對模(mo)板進行(xing)賦值
                  //如(ru)果(guo)S模板某一個位(wei)置上所對(dui)應的像素值為白(bai),模板上該位(wei)置賦為0,否則賦為1
                  if(Image_Use[i][j-1] == 0) temp[1][0] = 1;
                  if(Image_Use[i][j+1] == 0) temp[1][2] = 1;
                  if(Image_Use[i-1][j-1] == 0) temp[0][0] = 1;
                  if(Image_Use[i-1][j+1] == 0) temp[0][2] = 1;
                  if(Image_Use[i-1][j] == 0) temp[0][1] = 1;
                  if(Image_Use[i+1][j-1] == 0) temp[2][0] = 1;
                  if(Image_Use[i+1][j+1] == 0) temp[2][2] = 1;
                  if(Image_Use[i+1][j] == 0) temp[2][1] = 1;    
                  //
                  for(int x = 0;x<3;x++)
                          for(int y = 0;y<3;y++)
                          {       
                                  if(x == 1 && y == 1) continue;
                                  if(temp[x][y] == 1)
                                  count ++;

                          }
                   if(count>=2&&count<=6)
                  {    
                    int ap = 0;
                    if (temp[0][1] == 0 && temp[0][2] == 1) ++ap;
                    if (temp[0][2] == 0 && temp[1][2] == 1) ++ap;
                    if (temp[1][2] == 0 && temp[2][2] == 1) ++ap;
                    if (temp[2][2] == 0 && temp[2][1] == 1) ++ap;
                    if (temp[2][1] == 0 && temp[2][0] == 1) ++ap;
                    if (temp[2][0] == 0 && temp[1][0] == 1) ++ap;
                    if (temp[1][0] == 0 && temp[0][0] == 1) ++ap;
                    if (temp[0][0] == 0 && temp[0][1] == 1) ++ap;
                    if(ap == 1&&((temp[0][1]*temp[1][2]*temp[1][0])== 0)&&((temp[0][1]*temp[2][1]*temp[1][0]) == 0))
                    {
                      Image_Use[i][j] = 255;
                      flinsh_flag++;
                    }
                  }
          }
  }
  if(flinsh_flag == 0)
  { 
    break;
  }
}

 測試結果:

 

 

 二(er)值化(hua)圖像粗化(hua)處理

粗化(hua)處理(li)可(ke)以(yi)對圖像的(de)二值化(hua)補(bu)集進(jin)行細化(hua)后得到。

在線(xian)客服
客(ke)服(fu)電話
  • 0755-23712116
  • 13310869691