2

我有一個二進制圖像,其中包含一個對象,如下圖所示。該對象的centerlinered中描述。對於屬於該對象的每個像素,我想用顏色重新標記它。例如,與中心線的正交距離爲從中心線到對象邊界的距離的一半的像素應標記爲blue,否則應標記爲​​。下面給出一個例子。有任何想法嗎? 另外,我怎麼能適合一個1D gaussian居中在對象centerlineorthogonal它?基於對象中心線和邊界之間的距離重新映射像素

在全分辨率圖像下可以找到:http://imgur.com/AUK9Hs9

+0

首先,是爲你定義你的中心線,你如何創建中心線?你有一些垂直的區域,這看起來很奇怪。您還顯示了兩條不同的線從中心線移開。它們與水平線的角度不同,所以我的下一個問題是,當你想着色時,你是否在垂直於中心線尋找,而不管它接觸到斑點邊緣的角度? – trumpetlicks

+0

我認爲,垂直線僅僅是爲了演示顏色如何分佈。 – Jonas

+0

@trumpetlicks,從'centerline'移動的兩條不同的線只是爲了說明目的;-)它們顯示了@Jonas提到的線條上的像素,它們應該如何在'relabeling'之後着色。關於垂直距離,我認爲,它可能會更好地從blob的邊緣到'centerline',但如果你可以用相反的方式來說明(「你提到的方式」),那將是非常有幫助的: - ) – Tin

回答

2

這裏是想到什麼(提供您有圖像處理工具箱):

創建兩個二進制圖像,一個BWin,在你的紅線位置有1(真)像素,一個BWout與你的白色區域相反(1 outisde該區域和0(假)內)。

像這樣:

BWinBWin

BWoutBWout

然後應用歐幾里德變換,都使用bwdist

Din = bwdist(BWin); 
Dout = bwdist(BWout); 

你現在有兩個圖像像素int代表與最接近的非0像素的歐幾里德距離。

現在扣除兩者的差的值將是積極的等距離的一面和消極的另一面:

blueMask=Din-Dout>0; 
greenMask=~BWout & blueMask; 

您可以使用口罩,然後填充RGB層

Result=zeros(size(II)); 
Result(:,:,1)=BWin; 
Result(:,:,2)=greenMask; 
Result(:,:,3)=~blueMask & ~BWin; 
imshow(Result); 

Result

+0

謝謝。但爲了清楚起見,原始圖像中的2條「彩色」線條僅用於說明目的(它們實際上不屬於該對象)。他們只是用來顯示這些線上的像素應該如何「重新標記」。 – Tin

+0

感謝代碼@Jigg!我想知道,我們能否讓解決方案更一般化?例如,如果我們需要再次基於它們的距離將像素分成「3」個區域而不是2個區域,例如,像素之間的距離的前三分之一,然後是第二三分之一的顏色,最後三分之一的顏色。 – Tin

相關問題