發表文章

目前顯示的是 10月, 2013的文章

DIP - Search Area

圖片
在數位影像處理裡,當我們要選取某個範圍時,首先要定義怎麼樣的情況下這些點算是同一個範圍,接下來才能做範圍的搜尋。所以我們看到上圖的最左邊,這邊定義了九宮格內的那八個鄰居,如果跟中間我們正在參考的點數值一樣的話,那麼那一個鄰居就是跟中間的點屬於同一個範圍。 於是基於這個定義,看到上圖中間,我們將綠色的點分布分成了三個獨立的群,三個物件。 搜尋的動作是一種擴散的行為,當我們碰到一個點是我們要的,接著從這個點,基於定義,往他週遭的點搜尋,一點接一點擴散出去。所以我在搜尋的實作上,第一想到的是遞迴,因為遞迴是一種相同方式持續延伸的概念,但我利用此方式時遇到了一個問題 ,遞迴大概在延伸到28xx層的時候就會overflow,而28xx層是很容易達到的,只在一個 800 x 600 的影像裡隨便一個佔了4列 Pixel 的東西就達成了。所以遞迴的方式勢必是不能採用,那麼該怎麼延伸呢? 遞迴是一個接連的概念,只要找到下一個就會往下一層鑽,最後在一層一層回來,然而想到"擴散",比較像是水波漣漪般的散播出去,如下圖: 於是我就想到,如果要做到擴散的行為,我就是要把當下搜尋的結果記起來,接著再依序去看那些結果,因此Queue的概念由此產生。 把搜尋的結果放到Queue,接著從Queue拿點出來再搜尋,再將新找的點加進Queue裡排隊等著被搜尋(擴散),直到Queue裡的點都被拿光為止,就表示這個區域已經擴散完了。 以下是此方法的範例程式,開始搜尋後會表現出搜尋過程!  :) 寬(X): 高(Y): ... 點擊下列方塊產生區域分布 ... Reset 開始搜尋 Current Target: Area Search Queue: