2017-04-11 32 views
0

我必須檢測c#中黑色背景上的白色多邊形的所有點。這是幾個例子的圖像。我不認爲這太困難,但我無法正確檢測出所有變化。我的代碼太多了,不能在這裏發佈,但基本上我經歷了每一方面,並​​尋找它從黑色和白色變化的時間。我應該使用Open CV嗎?我希望能在C#中實現一個簡單的算法。有什麼建議麼?謝謝。c#檢測黑白圖像中的多邊形點

enter image description here

+0

目前還不清楚你想要什麼......多邊形的所有點是投資回報率面具,你已經得到了,所以我假設你編輯頂點(邊緣點)...在這種情況下,您首先會找到輪廓(所有白色像素旁邊的任何黑色像素),然後應用連接的組件分析或hough變換來檢測線....之後,頂點是隻是所有線路的交叉點...或極端與傾斜角度不斷變化...... – Spektre

+0

一個簡單的算法將是洪水氾濫。您可以輕鬆地自行實施。例如像[此鏈接](https://www.google.de/amp/s/simpledevcode.wordpress.com/2015/12/29/flood-fill-algorithm-using-c-net/amp/)。在獲得所有連接點後,搜索左上角,右上角......角點。 – PSchn

+0

感謝您的回覆,是的,我需要獲得積分。我將檢查hough轉換或連接組件分析。我不認爲簡單的算法來檢測角點將工作,例如中間右側的圖像將有7點。 – dan

回答

1

在你的情況我這樣做:

  1. 前處理圖像

    所以在顏色去除噪聲如果存在的話(如JPG失真等)和二值化圖片。

  2. 選擇圓周像素

    簡單地通過所有像素循環,並設置具有至少一個黑色鄰居不同顏色將代表你的圓周ROI掩模或像素位置添加到一些每個白色像素相反的列表。

  3. 應用連接成分分析

    ,所以你需要找出點(怎麼連接在一起)的順序。執行此操作的最簡單方法是使用來自第一個找到的像素的ROI的洪水歸檔,直到填充所有ROI並記住填充點的順序(類似於A *)。在某一點應該有兩條截然不同的路徑,並且最終都應該加入。因此,確定這兩點並構建周長點順序(通過顛倒一半並處理共享部分(如果存在))。

    connected components

  4. 找到頂點

    如果計算所有的後續像素之間的角度變化,則在直線的角度變化應該是接近零個,接近頂點大得多。所以,你得到了你的頂點。爲了使這個強大的你需要計算從更遠的像素,然後最近的像素的傾斜角度。此外,根據滑動平均值確定此角度變化的閾值通常會提供更穩定的結果。

    edge detect

    因此,找出像素應該是多遠計算角度,你有沒有太大的噪音和頂點仍然具有很大的峯值,也找出閾值是上述任何噪音安全。

    這也可以做到通過Hough變換和或找到輪廓功能存在於許多CV庫。另一種選擇是直接回歸/擬合點列表中的線並計算可提供亞像素精度的交點。

欲瞭解更多信息請參閱相關的問題答案: