2011-10-25 26 views
3

目前我已經檢測到圖像中的邊緣,並計劃使用霍夫變換從邊緣提取線段。一旦我有了細分市場,我正在計劃尋找兩段交叉的角落。有沒有一種算法可以從角落檢測矩形?說我有四個角被檢測到,是否有可能得到矩形兩邊的相對長度,四角形成矩形後知道一個矩形有4個直角?試圖找到一種算法來檢測圖像中的矩形

我想這樣做的原因是,我可以提取由矩形限定的紋理,並將其繪製爲屏幕上的平面矩形。

編輯: 感謝迄今爲止的答案,我想我應該更清楚地解釋我的問題,因爲我認爲我被輕微誤解了。實際上我正試圖將一個扭曲的矩形變成一個扁平的矩形。我閱讀了一些aforge文章,看到了這個功能:link。我想知道是否有可能確定矩形邊上四個角的比例?

+0

我想你不僅可以從圖片中確定的比例。您需要更多信息。例如,如果在同一張照片中有正方形,或者如果您知道透視參數,等等...... – Francisco

回答

0

她的一些代碼,您可以使用使用AForge.NET框架來識別圖像中的四角形:

// get angles between 2 pairs of opposite sides 
float angleBetween1stPair = Tools.GetAngleBetweenLines(corners[0], corners[1], corners[2], corners[3]); 
float angleBetween2ndPair = Tools.GetAngleBetweenLines(corners[1], corners[2], corners[3], corners[0]); 

// check 1st pair for parallelism 
if (angleBetween1stPair <= angleError) 
{ 
    subType = PolygonSubType.Trapezoid; 

    // check 2nd pair for parallelism 
    if (angleBetween2ndPair <= angleError) 
    { 
     subType = PolygonSubType.Parallelogram; 

     // check angle between adjacent sides 
     if (Math.Abs(Tools.GetAngleBetweenVectors(corners[1], corners[0], corners[2]) - 90) <= angleError) 
      subType = PolygonSubType.Rectangle; 

     //get length of 2 adjacent sides 
     float side1Length = (float)corners[0].DistanceTo(corners[1]); 
     float side2Length = (float)corners[0].DistanceTo(corners[3]); 

     if (Math.Abs(side1Length - side2Length) <= maxLengthDiff) 
      subType = (subType == PolygonSubType.Parallelogram) ? PolygonSubType.Rhombus : PolygonSubType.Square; 
    } 
} 
else 
{ 
    // check 2nd pair for parallelism - last chence to detect trapezoid 
    if (angleBetween2ndPair <= angleError) 
    { 
     subType = PolygonSubType.Trapezoid; 
    } 
} 

請參見本文的如何檢測各種形狀的例子:
http://www.aforgenet.com/articles/shape_checker/

這裏下載AForge.NET框架的鏈接:
http://www.aforgenet.com/framework/downloads.html

+0

感謝迄今爲止的答案,我想我應該更清楚地解釋我的問題,因爲我認爲我被輕微誤解了。實際上我正試圖將一個扭曲的矩形變成一個扁平的矩形。我閱讀了一些aforge文章,並看到了這個功能:[鏈接](http://www.aforgenet.com/framework/docs/html/7039a71d-a87d-47ef-7907-ad873118e374.html)。我想知道是否有可能確定矩形邊上四個角的比例? – jzz

3

您已經在使用你網元,該工具編輯 - Hough transform

通過將圖像的(x,y)空間轉換爲(theta,d)解決方案空間的可能線條,Hough變換的標準公式用於識別圖像中的線條。

通過將圖像的(x,y)空間轉換爲可能的矩形的解決方案空間(theta,d,width,height,rotation),可以執行同樣的操作來識別候選矩形。

採用這種方法保留了Hough變換的優勢,可以從圖像中處理部分可見的特徵 - 使用Hough變換識別邊緣並將這些邊緣合併到直形中的兩步方法將無法識別矩形如果一個邊緣或角落被充分遮蔽。