2014-03-03 30 views
2

我的目標是從給定的線上創建一個山脊狀的形狀。爲此,我將高斯濾波器應用於給定的行。在下面的例子中,一條線是垂直線,另一條線有一定的斜率。 (在此,背景值是0,線上的像素值是1)如何從給定的二維線上做出「好」的山脊形狀? (高斯,matlab)

鑑於行:

http://me.berkeley.edu/~young/lines.png

嶺形狀:

http://me.berkeley.edu/~young/ridges.png

當我施加高斯濾波器,所述高峯不一樣。我想這是光柵化問題的結果。圖像矩陣本身是離散的整數空間。高斯濾波器實際上不是完全圓形的(s由s矩陣表示)。兩條線也遭受光柵化。

我怎樣才能得到兩個相同峯高的漂亮的山脊(山)? 是否有更適當的方法來應用過濾器? 我應該製作一個更大的畫布(圖像矩陣),然後通過插值縮小畫布嗎?這是一個好方法嗎?

此外,我感謝您是否可以提出一種方法來製作具有某個峯高的脊。當使用高斯濾波器時,我們可以做的是決定濾波器的大小和西格瑪。根據這些參數,峯高變化。

有關信息,圖像矩陣大小是250x250。

回答

2

你可以嘗試一下距離變換。你的圖像是一個二進制圖像(只有兩種類型的值,0和1)。因此,您可以使用distance transform生成類似的效果。

%Create an image similar to yours 
img=false(250,250); 
img(sub2ind(size(img),180:220,linspace(20,100,41)))=1; 
img(1:200,150)=1; 

%Distance transform 
distImg=bwdist(img); 
distImg(distImg>5)=0; %5 is set manually to achieve similar results to yours 
distImg=5-distImg; %Get high values for the pixels inside the tube as shown 
        %in your figure 
distImg(distImg==5)=0; %Making background pixels zero 

%Plotting 
surf(1:size(img,2),1:size(img,1),double(distImg)); 

要獲得具有特定峯高的圖像,可以將閾值5更改爲不同的值。如果將其設置爲10,則可以獲取高度等於距離轉換矩陣中出現的下一個最大值的峯值。在5和10的情況下,我發現它在3.5和8左右。

再次,如果您想要精確5和10,那麼您可以將距離轉換矩陣與歸一化因子相乘,如下所示。

normalizationFactor=(newValue-minValue)/(maxValue-minValue) %self-explanatory 

唯一的缺點我看到的是,我沒有得到一個平滑的圖像,因爲你有。我也試過高斯濾波器,但沒有得到一個光滑的圖。

我的結果: enter image description here

+0

感謝Parag!我不知道bwdist()。我認爲這將是非常有用的,如果matlab有這樣的功能。現在我想我也可以得到光滑圖,通過直接從高斯方程計算值,而不是通過應用濾波器。我會嘗試。無論如何,再次感謝。 –

+0

是的。有用。我得到了最終答案! –