你可以嘗試一下距離變換。你的圖像是一個二進制圖像(只有兩種類型的值,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
唯一的缺點我看到的是,我沒有得到一個平滑的圖像,因爲你有。我也試過高斯濾波器,但沒有得到一個光滑的圖。
我的結果:
感謝Parag!我不知道bwdist()。我認爲這將是非常有用的,如果matlab有這樣的功能。現在我想我也可以得到光滑圖,通過直接從高斯方程計算值,而不是通過應用濾波器。我會嘗試。無論如何,再次感謝。 –
是的。有用。我得到了最終答案! –