《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > 一種規(guī)則幾何圖形的計算機識別方法
一種規(guī)則幾何圖形的計算機識別方法
來源:微型機與應用2011年第9期
孫來軍,李江游,候 影,葉光忠
(黑龍江大學 黑龍江省電子工程高校重點實驗室,黑龍江 哈爾濱 150080)
摘要: 許多領域在進行圖片處理時都需要識別出圖片中的幾何圖形,傳統(tǒng)的霍夫變換、不變矩等識別方法都存在著耗費大量系統(tǒng)內存、計算速度慢等缺點。基于此,提出一種新的幾何圖形的識別方法。介紹了該方法的實現(xiàn)原理和實現(xiàn)過程。最后利用C++Builder編寫軟件對這種方法進行了測試,證明了該方法的正確性和可靠性。
Abstract:
Key words :

摘  要: 許多領域在進行圖片處理時都需要識別出圖片中的幾何圖形,傳統(tǒng)的霍夫變換、不變矩等識別方法都存在著耗費大量系統(tǒng)內存、計算速度慢等缺點?;诖耍岢鲆环N新的幾何圖形的識別方法。介紹了該方法的實現(xiàn)原理和實現(xiàn)過程。最后利用C++Builder編寫軟件對這種方法進行了測試,證明了該方法的正確性和可靠性。
關鍵詞: 幾何圖形;識別;像素

 在計算機視覺領域中,如何從當前的圖像中提取出所需要的特征信息是圖像識別的關鍵所在。在許多應用場合中需要快速準確地識別出圖像中的幾何圖形(如圓、矩形、三角形等),從而進行更深一步的操作。例如:在基于圖像處理的自動報靶系統(tǒng)中,對靶環(huán)的識別就屬于這一類應用[1]。在這些應用領域,許多學者提出了多種方法,如霍夫變換、不變矩、骨架構造識別等。這些傳統(tǒng)的識別方法雖然檢測的準確性很高而且算法成熟,但在進行幾何圖形識別時都存在需要耗費大量系統(tǒng)內存、計算速度較慢等缺點,并不適合要求對幾何圖形進行快速檢測的領域[2-3]。因此,本文提出了一種全新的基于幾何圖形(周長、面積以及頂點個數(shù))的圖形識別方法。經(jīng)過測試,該方法可以快速有效地檢測出一幅圖片中的幾何圖形并給出該圖形的周長、面積等參數(shù)。
1 圖形識別的基本原理
 一般情況下,從客觀景物得到的圖像是二維的,可以用一個二維數(shù)組f(x,y)來表示。x、y表示二維空間中一個坐標點的位置,而f(x,y)則是代表圖像在點(x,y)的某種性質的數(shù)值。為了能用計算機對圖像進行加工,需要把連續(xù)的圖像在坐標空間(x,y)和性質空間F都離散化,這種離散化的圖像是數(shù)字圖像,可以用I(x,c)來表示。I(x,c)代表離散后的f(x,y)。為了方便,本方法仍用f(x,y)代表數(shù)字圖像,圖像中每個基本單元稱為圖像元素(簡稱像素)。一幅圖像必須在空間和灰度上都離散化才能被計算機處理??臻g坐標的離散化稱為空間采樣。假設用一個m×n維的數(shù)組中等距地采樣來近似表示一幅連續(xù)圖像f(x,y),即[4]:

 式中,每個元素都是一個離散變量,其右邊的矩陣代表數(shù)字圖像,數(shù)組的每個元素即對應像素。由此可見,對圖片的處理實際上是對組成圖片的像素進行操作。在實際的檢測中,一般是根據(jù)幾何圖形所在區(qū)域的像素點的灰度級別與圖片背景的像素點的灰度級別存在的差異,將屬于幾何圖形的像素點檢測出來。對于規(guī)則幾何圖形的識別,本文所提出的算法是根據(jù)幾何圖形的周長、面積以及頂點個數(shù)來判斷。下面介紹圓形、矩形(其他普通四邊形也適用)、三角形的識別原理。

 由灰度比值可知,該比值只有一個確定的下限,而無確定的上限,因此,不能利用周長的平方與面積的比對矩形進行識別。但矩形也有其特殊的地方,即它有4個頂點,而且只有4個頂點。只要對所檢測的圖形的邊界點進行判斷并計算頂點的個數(shù),如果個數(shù)等于4,則為矩形(或其他四邊形);否則就為其他幾何圖形。與圓形的識別相類似,在對矩形的實際檢測過程中也可能會出現(xiàn)頂點個數(shù)不為4的現(xiàn)象,這是由于圖形繪制不規(guī)范所造成的。但只要對已經(jīng)檢測出來的頂點再進行一次“同鄰域”判斷,看其中是否有些頂點屬于同一個鄰域范圍(一般為8鄰域),如果有,只留下一個而將其他的去除,這樣就可以對結果進行很好的修正,從而可避免錯誤檢測的出現(xiàn)。利用這種方法就可以很好地識別出所檢測的圖形為矩形。
    (3)三角形:三角形的識別與矩形的識別方法相類似,也是利用頂點的個數(shù)來判斷圖形所屬的幾何形狀,這里不再贅述。
2 圖形識別的實現(xiàn)過程
 利用計算機進行圖形識別的過程如圖1所示。

 

 

2.1 預處理
 從圖1可以看出,對一幅圖片進行操作之前需進行必要的預處理,這是因為圖片在繪制過程中或輸入到計算機的過程中可能引入噪聲。通常的預處理過程包括灰度化處理、二值化處理、平滑、濾波等。其步驟如下:
 (1)灰度化:圖片實際上是一個像素的二維數(shù)組,其中每個像素的顏色由構成這種顏色的紅(R)、綠(G)、藍(B)三種基本色的分量來表示。以真彩圖片為例,典型情況下,顏色的每個組分都用一個字節(jié)來表示,因此為每種顏色組分提供了256個級別。這種方法為每個像素使用3 B,允許達到256×256×256=16 777 216或1 600萬種RGB值(顏色)。由于彩色信息的區(qū)分度不高,如果直接對彩色圖片的像素進行操作,所得到的檢測結果精度也不高。而將圖片進行灰度處理后,圖片以亮度信息為主要信息,彩色信息為次要信息,則可以在很大程度上提高檢測精度,因此需將圖片進行灰度處理,把彩色圖片轉換成為灰度圖?;叶葓D形處理采用的方法有:最大值轉換法、平均值轉換法、黃金權重轉換法等,本文在進行灰度處理時采用的是最大值(亮度)轉換法。經(jīng)過這種方法處理后的圖片每一個像素的RGB值都是相同的,即RGB值的范圍從(0,0,0)、(1,1,1)一直到(255,255,255)。其中,(0,0,0)是全黑色,(255,255,255)是全白色,中間的是灰色[5]。實現(xiàn)這個過程的部分源代碼為:
//利用GetxValue取出每一個點的像素的RGB值
     r=GetRValue(color1);
     g=GetGValue(color1);
     b=GetBValue(color1);
//找出RGB值中最大的值
     np=r>g?r:g;
     np=np>b?np:b;
//將圖片變?yōu)榱炼茸罡叩幕叶葓D
Image1->Picture->Bitmap->Canvas->Pixels[i][j]=
TColor(RGB(np,np,np));
 (2)二值化:雖然經(jīng)過灰度處理后圖片的主要信息僅為亮度信息,但有效檢測區(qū)域的像素點的灰度級別并不統(tǒng)一。因此,灰度處理后往往還需要對圖片再進行二值化處理,以使所要檢測的幾何圖形的區(qū)域變?yōu)檩^深的顏色,背景的部分變?yōu)檩^淺的顏色。這樣可以更進一步加強區(qū)分度,提高檢測的精度[6]。本文所使用的二值化方法為大律法,大律法又稱最大類間方差法,其處理原理為:取某個灰度值,以它為分界點將圖像分為灰度值大小的兩類,分別計算這兩類中的像素點數(shù)及灰度平均值;然后,計算它們的類間方差;最后取所有灰度的類間方差中的最大值對應的灰度為閾值。類間方差的計算公式如下:
 w(i)=n1(i)n2(i)(v1(i)-v2(i))2
 其中,n1(i)、n2(i)分別為灰度小于i的像素以及大于等于i的像素的個數(shù),v1(i)、v2(i)分別為灰度的平均值。
實現(xiàn)這個過程的部分源代碼為:
        //二值化處理
  for(i=0;i<w;i++)
  {  for(j=0;j<h;j++)
        {
color=Image1->Picture->Bitmap->Canvas->
                           Pixels[i][j];
ave=Dalu(gray);
if(GetRValue(color)>ave)
         //將背景點變?yōu)榘咨?br />     Image1->Picture->Bitmap->Canvas->Pixels[i][j]=
TColor(RGB(255,255,255));
Else
        //將幾何圖形區(qū)域變?yōu)楹谏?br />    Image1->Picture->Bitmap->Canvas->Pixels[i][j]=
TColor(RGB(0,0,0));
        }
  }
 (3)平滑和濾波。在進行完步驟(1)、(2)的預處理后,如果幾何圖形還是不十分明顯,可以用高斯平滑濾波器和拉普拉斯銳化濾波器結合計算即可得到幾何圖形突出的圖片[7]。
2.2 特征提取
 完成圖片的預處理后,即可進行圖片的特征提取。由于是規(guī)則的幾何圖形,因此所要提取的特征信息即為幾何圖形的周長、面積和頂點的個數(shù)。計算圖形周長和頂點個數(shù)時用的是Laplace邊緣檢測算法。Laplace算法有兩類:正相Laplace算法和反相Laplace算法,兩者都反映了一類邊緣,但其所用模板和參數(shù)不同[8]。假設一個3×3鄰域內的像素分布如圖2所示,設LP、LN分別為正相Laplace算法和反相Laplace算法的處理結果,其計算公式如下:
 LP=[f(A0)+f(A1)+…+f(A7)]-8f(C)
 LN=8f(C)-[f(A0)+f(A1)+…+f(A7)]
 這兩個公式也可用卷積模板來表示,如圖3(b)、(c)所示。由圖可知,邊緣檢測模板中各因子之和為0,其物理意義是:在圖像的均勻區(qū)域處理輸出為0,在像素數(shù)據(jù)有突變的地方則輸出較大的值。以此來檢測圖像中的邊緣。

 用Laplace邊緣檢測算法對幾何圖形進行檢測完成后,累加邊界點的個數(shù)即為幾何圖形的周長。然后再對這些邊界點進行進一步區(qū)分,找出頂點。檢測幾何圖形的面積則要簡單得多,只要統(tǒng)計出有效檢測區(qū)域內所有符合條件的點即為幾何圖形的面積。實現(xiàn)這個過程的部分源代碼為:
//計算周長、面積和頂點
  int x,y,sum=0;
  for(i=0;i<w;i++)
  {  for(j=0;j<h;j++)
       {
color=Image1->Picture->Bitmap->Canvas->
                         Pixels[i][j];
 if(GetRValue(color)==0)
  { mianji++; //計算面積
    if(Laplace(GetRValue(color)))
      zhouchang++; //計算周長
    if(Dingdian(GetRValue(color)))
      dingdian++; //計算頂點
   }
       }
  }
2.3 分析判斷
 在完成圖像的預處理和特征提取之后,便可以開始根據(jù)特征信息對幾何圖形的形狀進行判斷。在這個過程中首先判斷幾何圖形是否為圓形,即判斷這個圖形周長的平方與面積的比是否在規(guī)定的范圍內。如果在,則為圓形;否則,再判斷頂點的個數(shù),等于3即為三角形,等于4即為矩形。在識別幾何圖形形狀的同時還可輸出這個圖形的周長和面積。因為規(guī)則幾何圖形的周長、面積和頂點坐標已知,故可計算出邊長、形心等參數(shù)。實現(xiàn)這個過程的部分源代碼為:
//根據(jù)周長的平方與面積的比以及頂點的個數(shù)確定圖形的形狀
   float  ratio;
ratio=(zhouchang*1.0*zhouchang*1.0)/mianji*1.0;
//判斷是否為圓形
if(ratio>=9&&ratio<=15)
   Edit1->Text="圓形或橢圓";
else
   {
//判斷是否為三角形
         if(dingdian==3)
     Edit1->Text="三角形";
//判斷是否為矩形
     if(dingdian==4)
     Edit1->Text="矩形";
   }
//輸出面積和周長
   Edit2->Text=mianji;
   Edit3->Text=zhouchang;
    基于上述的基本原理和實現(xiàn)過程,利用C++ Builder6.0編寫軟件,幾何圖形識別結果如圖4所示[9]。從識別結果可知,本文所述的方法可以快速而準確地識別出圖像中的規(guī)則幾何圖形,從而證明了該法的可行性和正確性。

 與傳統(tǒng)的檢測方法相比,本文提出的基于幾何圖形周長、面積和頂點個數(shù)的檢測方法可以很好地識別出幾何圖形的形狀,并能給出邊長、形心等其他參數(shù),且識別速度快、準確率高。但這種識別方法也存在一些不足,它的識別對象只是幾種簡單的規(guī)則幾何圖形,無法識別復雜的不規(guī)則幾何圖形。這些不足還有待于在日后的研究中不斷克服,以使這種檢測方法能夠更加穩(wěn)定實用。
參考文獻
[1] 顧筠.基于霍夫變換和幾何特性的圖像識別方法[J].自動化博覽,2002,8(1):86-88.
[2] 邱桑敏.一種快速霍夫變換算法[J].計算機工程,2004,1(2):148-150.
[3] 李海軍,寧玉富.規(guī)則幾何圖形的識別分析與算法實現(xiàn)[J].常熟理工學院學報,2007,4(4):111-115.
[4] 董莉,王玲,江沸波.一種基于醫(yī)學圖像中感興趣區(qū)域的數(shù)字水印算法[J].電子技術應用,2007,33(1):136-139.
[5] 高士忠,盧易楓,蔡振偉,等.基于灰度共生矩陣的簾子布疵點檢測研究[J].電子技術應用,2008,34(1):117-119.
[6] 劉玉紅,熊興良.圖像的帶參二值化理論和技術及其應用[J].計算機應用研究,2008,25(1):277-280.
[7] 魯志波,王鑫,胡國恩.結合結構張量和Wiener濾波的圖像去噪算法[J].計算機科學,2007,34(7):229-231.
[8] 劉佳,肖曉明,彭駿馳.基于改進的Laplacian算子的圖像邊緣檢測[J].電子技術應用,2006,32(11):31-32.
[9] 蒙祖強,龔濤.C++ Builder程序員成長攻略[M].北京:中國水利水電出版社,2007.

此內容為AET網(wǎng)站原創(chuàng),未經(jīng)授權禁止轉載。