我使用Emgu形狀檢測示例應用程序來檢測給定圖像上的矩形。即使縱橫比保持不變,調整大小的圖像的尺寸也會影響檢測到的形狀數量。這裏就是我的意思是:受圖像大小影響的EmguCV形狀檢測
Using (400,400), actual img size == 342,400
Using (520,520), actual img size == 445,520
爲什麼會這樣呢?那麼如何確定最佳值?
感謝
我使用Emgu形狀檢測示例應用程序來檢測給定圖像上的矩形。即使縱橫比保持不變,調整大小的圖像的尺寸也會影響檢測到的形狀數量。這裏就是我的意思是:受圖像大小影響的EmguCV形狀檢測
Using (400,400), actual img size == 342,400
Using (520,520), actual img size == 445,520
爲什麼會這樣呢?那麼如何確定最佳值?
感謝
我回答您的帖子上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;
}
少變量改變爲霍夫應該做的所有的工作,你的部分。但仍然可以在這裏完成。
對不起,沒有直截了當的答案,但我希望你保持並解決問題。否則你總是可以隨時調整圖像的大小。
乾杯
克里斯
謝謝...至少這代表我可以遵循的路徑。我同意大多數圖像檢測算法需要某種調整;但是我從來沒有遇到過取決於圖像大小而不是縱橫比的圖像。無論如何,邊緣檢測似乎不會影響結果(至少對於這個圖像)。一旦我檢查了其他參數,將會更新。 – Nav
在這種情況下,您實際上增加了您要查找的對象的大小。很少算法實際上取決於圖像大小或比例,但實際上取決於內部對象的大小。舉個例子,未檢測到的四邊形是一個粗略的矩形(165,97,240,114),面積爲27360像素。現在在你的第二張圖片中,相同的四邊形是矩形(214,129,310,146),增加了45'260像素的面積。現在增加了1.65倍,我相信你可以看到爲什麼檢測到較大的那個。改變霍夫線代碼應該解決你的問題,如果不是,我會看看,祝你好運 – Chris
顯然,在示例應用程序中,霍夫線不用於形狀檢測...輪廓是。如果點的數量是4 =>矩形等。另外,這是我的問題,角度限制了檢測到的矩形的數量。任何超過10度的傾斜(即使所有線條都處於相同角度),形狀也會被丟棄。我現在可以擺弄這個:)。還有一件陰險的事情正在進行,雖然......形狀被檢測到兩次:/ – Nav