2012-01-14 60 views
4

我想實現一個算法,它將找到輪廓的邊界矩形(已由另一個算法確定)。我唯一擁有的是二值化圖像(如下所示)。基本想法是:如何確定多個元素的邊界矩形?

  • 採取這樣的事情 - 一個預處理二值圖像 enter image description here

  • ,併產生這樣的 enter image description here

+0

看看我們的姊妹網站[DSP.SE]。 – 2012-01-15 03:17:22

回答

1

我可以提出一個幼稚的做法作爲開始:

在圖像中,做一個二進制二進制搜索對於圖像中的中點(x,y)。 從這一點開始,執行洪水填充。

  • 如果填充圖形的邊界不是圖像的邊界,那麼你找到了一個封閉的圖形,因此它的邊界框。

  • 如果它填滿了整個圖像,那麼你什麼也沒做,所以把圖像分成四個分支,並且遞歸地做同樣的事情。 (您不需要檢查先前找到的邊界框圖內的點,從而在此過程中縮小搜索空間)。

+0

通過二進制二進制你是否意味着kd樹? – Bytemain 2012-01-14 07:49:02

+0

我的意思是劃分4個cuadrants的空間,如四叉樹。 – 2012-01-14 13:40:02

+0

我認爲kd-tree也可以。但是四叉樹很好。 – Bytemain 2012-01-14 19:40:18

0

對於每一個元素:

They highest y - 1 is the top of the rectangle. 
The leftmost x - 1 is the left of the rectangle. 
The lowest y + 1 is the bottom of the rectangle. 
The rightmost x + 1 is the right of the rectangle. 

說明最高我的意思是最接近屏幕不是最大的價值的頂部。

+0

你誤會了我一點:有圖片(0和1的矩陣),我想找到這些矩形 - 它們的座標。 – Patryk 2012-01-14 04:42:53

0

它看起來像OpenCV有一些算法找到已經實現的輪廓的邊界框。因此,研究他們的功能如何起作用可能是一個很好的開始。 http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/bounding_rects_circles/bounding_rects_circles.html

+0

好的,這是一個好主意,但我想從零開始。我不能使用OpenCV的實現。 – Patryk 2012-01-14 04:59:32

+0

是否有可能在實現輪廓創建功能時將每個輪廓分組爲一組點?如果你能做到這一點,那麼找到邊界框幾乎是微不足道的,因爲你只需要找到每個集合中最高,最低,最左邊和最右邊的點。 – aoi222 2012-01-14 05:10:55

+0

我只有一個二進制圖像 - 就這些。我必須以某種方式整理邊界矩形。 – Patryk 2012-01-14 06:21:33

-1

您可以計算最小生成樹並刪除最長的邊。然後你可以計算出k-means。刪除另一個長邊並計算k-means。沖洗並重復,直到你有N = 10。我相信這種算法被命名爲單鏈路k均值,並且該簇類似於voronoi圖:

「單鏈路k聚類算法...正好是Kruskal算法...相當於尋找MST和刪除k-1最昂貴的邊緣。「

例如,見這裏:由最高我的意思是最接近屏幕不是最大的價值的頂部

They highest y - 1 is the top of the rectangle. 
The leftmost x - 1 is the left of the rectangle. 
The lowest y + 1 is the bottom of the rectangle. 
The rightmost x + 1 is the right of the rectangle. 

注:https://stats.stackexchange.com/questions/1475/visualization-software-for-clustering

然後爲每個羣集應用此規則。