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

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

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

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

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

 

 

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

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

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

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