我必須檢測c#中黑色背景上的白色多邊形的所有點。這是幾個例子的圖像。我不認爲這太困難,但我無法正確檢測出所有變化。我的代碼太多了,不能在這裏發佈,但基本上我經歷了每一方面,並尋找它從黑色和白色變化的時間。我應該使用Open CV嗎?我希望能在C#中實現一個簡單的算法。有什麼建議麼?謝謝。c#檢測黑白圖像中的多邊形點
0
A
回答
1
在你的情況我這樣做:
前處理圖像
所以在顏色去除噪聲如果存在的話(如JPG失真等)和二值化圖片。
選擇圓周像素
簡單地通過所有像素循環,並設置具有至少一個黑色鄰居不同顏色將代表你的圓周ROI掩模或像素位置添加到一些每個白色像素相反的列表。
應用連接成分分析
,所以你需要找出點(怎麼連接在一起)的順序。執行此操作的最簡單方法是使用來自第一個找到的像素的ROI的洪水歸檔,直到填充所有ROI並記住填充點的順序(類似於A *)。在某一點應該有兩條截然不同的路徑,並且最終都應該加入。因此,確定這兩點並構建周長點順序(通過顛倒一半並處理共享部分(如果存在))。
找到頂點
如果計算所有的後續像素之間的角度變化,則在直線的角度變化應該是接近零個,接近頂點大得多。所以,你得到了你的頂點。爲了使這個強大的你需要計算從更遠的像素,然後最近的像素的傾斜角度。此外,根據滑動平均值確定此角度變化的閾值通常會提供更穩定的結果。
因此,找出像素應該是多遠計算角度,你有沒有太大的噪音和頂點仍然具有很大的峯值,也找出閾值是上述任何噪音安全。
這也可以做到通過Hough變換和或找到輪廓功能存在於許多CV庫。另一種選擇是直接回歸/擬合點列表中的線並計算可提供亞像素精度的交點。
欲瞭解更多信息請參閱相關的問題答案:
相關問題
- 1. 如何檢測黑白圖像中的白色斑點(矩形)?
- 2. OpenCV圖像黑白圖形
- 3. 檢測圖像中的U形邊緣
- 4. C++中的圖像邊緣檢測
- 5. 二維邊緣檢測黑色矩形與白色背景
- 6. 如何檢測二進制圖像中的多邊形
- 7. GMap - 無法檢測點擊多邊形
- 8. 點在多邊形錯誤檢測
- 9. 在高對比度圖像中檢測四邊形點
- 10. c#檢測圖像中的矩形
- 11. 在C#中檢測空白圖像(預期的圖像是一個條形碼)#
- 12. C++ 2D多邊形碰撞檢測
- 13. OpenCV:從黑白圖像中檢測簡單的電子元件
- 14. 如何檢測多邊形的邊角?
- 15. 檢測n邊多邊形的自交?
- 16. 檢測觸摸多邊形
- 17. 在C中製作黑白圖像#
- 18. Android中的點內多邊形測試
- 19. 的Java 2D多邊形 - 多邊形碰撞檢測
- 20. 檢測點擊矩形圖像android
- 21. 如何檢測postgis中其他(多個)多邊形中的多邊形
- 22. Heroku黑白圖像
- 23. 檢測鼠標點擊多邊形的節點
- 24. 檢測多邊形在矩形libgdx
- 25. c#GDI邊緣空白檢測算法
- 26. 在白色背景上的圖像的邊緣檢測
- 27. 檢查點是否在多邊形中
- 28. 檢測彩色圖像中的水平圓形邊緣
- 29. 檢測圖像中的圓形圖案
- 30. 多邊形到多邊形碰撞檢測問題
目前還不清楚你想要什麼......多邊形的所有點是投資回報率面具,你已經得到了,所以我假設你編輯頂點(邊緣點)...在這種情況下,您首先會找到輪廓(所有白色像素旁邊的任何黑色像素),然後應用連接的組件分析或hough變換來檢測線....之後,頂點是隻是所有線路的交叉點...或極端與傾斜角度不斷變化...... – Spektre
一個簡單的算法將是洪水氾濫。您可以輕鬆地自行實施。例如像[此鏈接](https://www.google.de/amp/s/simpledevcode.wordpress.com/2015/12/29/flood-fill-algorithm-using-c-net/amp/)。在獲得所有連接點後,搜索左上角,右上角......角點。 – PSchn
感謝您的回覆,是的,我需要獲得積分。我將檢查hough轉換或連接組件分析。我不認爲簡單的算法來檢測角點將工作,例如中間右側的圖像將有7點。 – dan