2011-09-22 96 views

回答

3

我回答您的帖子上EMGU但估計你還沒有籤回,但就在於此。形狀檢測基於不可能匹配的閾值原理工作,這可以防止大量錯誤的分類。許多圖像處理算法都是如此。基本上有沒有完美的設置和設計師必須選擇最合適的設置,以產生最理想的結果。 I.E.匹配最多的對象,沒有說比實際存在的更多。

您需要逐個調整每個變量以查看您獲得的結果類型。開始邊緣檢測。

Image<Gray, Byte> cannyEdges = gray.Canny(cannyThreshold, cannyThresholdLinking); 

看一看你的小圖像看到有什麼區別檢測出的矩形和一個不是之間。你可能會缺少邊緣或角落,這就是爲什麼它沒有被分類。如果你正在調整cannyThreshold,並觀察結果,如果好,那麼保持它:)如果不好:(回到原始值。一旦滿意調整cannyThresholdLinking並觀察。

你會繼續重複這個,直到你得到一個首選的圖像這裏的好處是你有3個項目進行比較,你會繼續下去,直到沒有被識別的項目匹配其他兩個。

如果他們是相似的,可能是因爲它是一個黑白圖像,你需要進入霍夫線檢測。

 LineSegment2D[] lines = cannyEdges.HoughLinesBinary(
      1, //Distance resolution in pixel-related units 
      Math.PI/45.0, //Angle resolution measured in radians. 
      20, //threshold 
      30, //min Line width 
      10 //gap between lines 
      )[0]; //Get the lines from the first channel 

使用相同的方法來調整一個值在一段時間,觀察輸出,你會希望找到你需要的設置。千萬不要雙腳跳進去,改變所有的數值,因爲你永遠不知道你的精度是否提高。最後,如果一切都失敗了看那個檢查霍夫結果矩形

     if (angle < 80 || angle > 100) 
         { 
          isRectangle = false; 
          break; 
         } 

少變量改變爲霍夫應該做的所有的工作,你的部分。但仍然可以在這裏完成。

對不起,沒有直截了當的答案,但我希望你保持並解決問題。否則你總是可以隨時調整圖像的大小。

乾杯

克里斯

+0

謝謝...至少這代表我可以遵循的路徑。我同意大多數圖像檢測算法需要某種調整;但是我從來沒有遇到過取決於圖像大小而不是縱橫比的圖像。無論如何,邊緣檢測似乎不會影響結果(至少對於這個圖像)。一旦我檢查了其他參數,將會更新。 – Nav

+0

在這種情況下,您實際上增加了您要查找的對象的大小。很少算法實際上取決於圖像大小或比例,但實際上取決於內部對象的大小。舉個例子,未檢測到的四邊形是一個粗略的矩形(165,97,240,114),面積爲27360像素。現在在你的第二張圖片中,相同的四邊形是矩形(214,129,310,146),增加了45'260像素的面積。現在增加了1.65倍,我相信你可以看到爲什麼檢測到較大的那個。改變霍夫線代碼應該解決你的問題,如果不是,我會看看,祝你好運 – Chris

+0

顯然,在示例應用程序中,霍夫線不用於形狀檢測...輪廓是。如果點的數量是4 =>矩形等。另外,這是我的問題,角度限制了檢測到的矩形的數量。任何超過10度的傾斜(即使所有線條都處於相同角度),形狀也會被丟棄。我現在可以擺弄這個:)。還有一件陰險的事情正在進行,雖然......形狀被檢測到兩次:/ – Nav