回答
我建議做一個Blob detection並確定重心和斑點的面積。我假設圖像中的旋鈕會被黑色填充?如果沒有,那麼這一步必須在提取blob之前進行。有了這個座標,你就可以計算點和線之間的差異。通過移動圖像中的線條,您會得到不同的「錯誤」。見here如何計算這個誤差(只是一個例子)
當minimizing這個錯誤,那麼你有你的線。
要計算你也可以考慮先以濾除斑點的大小斑點座標(只有差不多大小)
這是一個不錯的方法。我會建議一個變體:將候選斑點投影到與測試線垂直的線上。然後,這些預測需要足夠重疊,以便將這些斑點視爲「在一條線上」。 (如果統計技術適合於這個問題,這甚至可以作爲對blob來自單一分佈的假設的測試來完成)。這會做一些與你最後一次按blob大小過濾的建議有所不同,儘管它也是一種處理不同Blob大小的方法。 – 2011-05-12 01:58:34
Ted:這是投影到線上的一種「Blob密度函數」,或者?我喜歡。 – schoetbi 2011-05-12 05:43:56
我在想,這將是一個密度投影到正交線上的子空間。 – 2011-05-12 05:58:04
至於你提到的錯誤,如果只有相同大小和趴在同一行(大約)是標準,那麼這是另一種解決方法。
使用OpenCV函數cvFindContours(),查找連接的組件(猜測你可以鬆散地調用blob檢測,不確定)。 This鏈接提供了工作代碼來做到這一點。
計算每個輪廓的Bounding Rectangle,當您逐步瀏覽圖片中存在的所有輪廓列表時。
Bounding Rectangle本質上是一個CvRect結構,它包含包圍選定輪廓/特徵的最小矩形的x位置,y位置,寬度和高度。
typedef struct CvRect { int x; int y; int width; int height; } CvRect;
當然,對於你的照片,我會比較輪廓的y位置是選擇那些接近的。
- 此外,在結構的寬度和高度字段將告訴你在大小相似。
注:同一地區可能並不總是表示相同的尺寸。例如。 a * b = ab,也是(a/4)*(4b)= ab,但幾乎沒有相同的大小。代碼示例是用C語言編寫的,但我認爲用C#編寫它不會太難。希望這對你有用!
- 1. MO的算法來尋找兩陣列
- 2. 算法來尋找從2D點
- 3. 最好的算法來找到dictonary
- 4. 算法來尋找最接近100明星原點
- 5. 算法來尋找重疊
- 6. 尋找動態算法來確定最優序列
- 7. 是A *最好的尋路算法嗎?
- 8. 科學文獻引用OpenCV中的斑點檢測算法
- 9. 算法或公式來尋找良好的搜索調整值
- 10. 尋找一個好的算法來平均分配
- 11. 尋找一個更好的方法來計算矩陣
- 12. 爲封閉多邊形尋找Douglas-Peucker算法的好起點
- 13. 尋找最好的子
- 14. 尋找最好的做法來過濾模塊輸出DotNetNuke的
- 15. 尋找系列的當地最小值
- 16. 尋找最粗線的算法?
- 17. 尋找最短路徑數的算法
- 18. 尋找一種算法來聚集3d點,大約2d點
- 19. 尋找Dijkstra算法的起始頂點?
- 20. 正在尋找算法來尋找顏色區域的邊界
- 21. 尋找高效算法在整數列表中尋找最接近的整數
- 22. 遞歸算法來尋找數組中的最小元素
- 23. 在六角形圖中尋找最佳節點對的算法
- 24. 使用Kruskal算法尋找圖中的最小切點?
- 25. 尋找算法來評估圖的節點
- 26. 尋找最近點的有效方法?
- 27. 算法來尋找最大子陣列(矩形)的區域完全由1的
- 28. 查找圖像中的最大斑點
- 29. 尋找相關的愛好項目入門C#
- 30. Dijkstra算法尋找最短路徑
所有的斑點都是矩形的嗎?如果只是遍歷圖像,找到所有的矩形,然後使用任何你想要的「相似」標準。 – soandos 2011-05-11 20:22:58