2011-05-11 63 views
0

我想找到相似的斑點(幾乎尺寸相同,並在同一行)。 Here是一個示例圖像。最好的算法來尋找愛科斑點系列

我使用C#和OpenCV。

+0

所有的斑點都是矩形的嗎?如果只是遍歷圖像,找到所有的矩形,然後使用任何你想要的「相似」標準。 – soandos 2011-05-11 20:22:58

回答

5

我建議做一個Blob detection並確定重心和斑點的面積。我假設圖像中的旋鈕會被黑色填充?如果沒有,那麼這一步必須在提取blob之前進行。有了這個座標,你就可以計算點和線之間的差異。通過移動圖像中的線條,您會得到不同的「錯誤」。見here如何計算這個誤差(只是一個例子)

minimizing這個錯誤,那麼你有你的線。

要計算你也可以考慮先以濾除斑點的大小斑點座標(只有差不多大小)

+0

這是一個不錯的方法。我會建議一個變體:將候選斑點投影到與測試線垂直的線上。然後,這些預測需要足夠重疊,以便將這些斑點視爲「在一條線上」。 (如果統計技術適合於這個問題,這甚至可以作爲對blob來自單一分佈的假設的測試來完成)。這會做一些與你最後一次按blob大小過濾的建議有所不同,儘管它也是一種處理不同Blob大小的方法。 – 2011-05-12 01:58:34

+0

Ted:這是投影到線上的一種「Blob密度函數」,或者?我喜歡。 – schoetbi 2011-05-12 05:43:56

+0

我在想,這將是一個密度投影到正交線上的子空間。 – 2011-05-12 05:58:04

1

至於你提到的錯誤,如果只有相同大小和趴在同一行(大約)是標準,那麼這是另一種解決方法。

  1. 使用OpenCV函數cvFindContours(),查找連接的組件(猜測你可以鬆散地調用blob檢測,不確定)。 This鏈接提供了工作代碼來做到這一點。

  2. 計算每個輪廓的Bounding Rectangle,當您逐步瀏覽圖片中存在的所有輪廓列表時。

  3. Bounding Rectangle本質上是一個CvRect結構,它包含包圍選定輪廓/特徵的最小矩形的x位置,y位置,寬度和高度。 typedef struct CvRect { int x; int y; int width; int height; } CvRect;

  4. 當然,對於你的照片,我會比較輪廓的y位置是選擇那些接近的。

  5. 此外,在結構的寬度和高度字段將告訴你在大小相似。

注:同一地區可能並不總是表示相同的尺寸。例如。 a * b = ab,也是(a/4)*(4b)= ab,但幾乎沒有相同的大小。代碼示例是用C語言編寫的,但我認爲用C#編寫它不會太難。希望這對你有用!