2013-07-17 26 views
5

我目前正在試圖找到一種在二進制圖像中存儲單獨「分支」的整潔方式。這個小動畫解釋它:OpenCV:沿着單像素分支搜索像素

searching for branches

我沿着我需要收集的像素指標,構成了一個單像素寬的分支的分支去。當我遇到交匯點時,它應該拆分並存儲新的分支。

解決這個問題的一種方法是創建一個3x3子區域,找出其內是否有白色像素,並相應地移動它,如果有兩個以上的區域,則創建一個交點。始終保存以前的子區域,以便可以使用它來確保我們不會移動到我們已掃描的區域。 然而,要弄清楚我將如何去解決這件事有點棘手。

我基本上需要根據「線/曲線」層次結構重新排序像素。然後,應用程序的另一部分將重新繪製數字,這些數字通過在點之間創建線條進行內部工作,因此需要讓它們「排序」。

+0

這看起來像一個[圖遍歷問題](http://en.wikipedia.org/wiki/Graph_traversal),其中連接點是節點和單像素寬的分支的圖的邊。從任意初始點開始,您可以通過應用圖形遍歷算法(如[廣度優先搜索](http://en.wikipedia.org/wiki/Breadth-first_search)或[深度優先搜索])來發現所有分支和交叉點](http://en.wikipedia.org/wiki/Depth-first_search) – Alexey

+0

此外,您可以查看[Connected Components Labeling](http://en.wikipedia.org/wiki/Connected-component_labeling) – Alexey

+0

@pray你需要在這裏搜索嗎?從分支開始並沿着分支移動是否是一個限制?如果您可以「看到」整個圖像,則可以更輕鬆地對分支進行分組和標記。如果你不能,那麼你需要先進行深度搜索,然後返回交叉點搜索另一個;每次存儲數據 - 正如阿列克謝現在所建議的那樣。 – baci

回答

1

我不知道你是否可以將它應用於你的案例,但你應該看看cv :: findContour。 你會得到一個點的向量。

http://docs.opencv.org/doc/tutorials/imgproc/shapedescriptors/find_contours/find_contours.html

+0

啊,試過了。 findContours不能很好地與單像素線一起玩。這也不是真的適合我以後想用數據做什麼。 – prayforbacon

+0

也許你可以玩ROI,但爲了點你的分數,我不能做得更好...... – Poko

+0

我是個白癡。此方法確實有效,特別適用於事先應用的薄化。 – prayforbacon