2015-02-24 152 views
2

我使用matlab中的輪廓函數來繪製範圍從-2到2的圖像的邊界。它由波紋管代碼完成。我想在原始圖像的當前輪廓中繪製一個新的輪廓重疊。通過matlab在圖像中繪製兩個輪廓

該顏色輪廓是黃色。黃色輪廓根據掩碼中的位置創建。請注意,蒙版是從原始圖像中提取的,但只能選擇某個位置作爲波紋圖。我的預期結果是如輸出圖像。你能幫我解決我的問題嗎?

這是我的代碼畫出輪廓原始圖片

%% Draw contour in Orignal 
%%Create image I 
I= ones(10)*2; 
I(3:8,3:8) = -1; 
I(5:6,5:6) = -2; 
I(3:8,3)=1; 
I(3:8,8)=1; 
I(8,3:8)=1; 
I(3,3:8)=1; 
%% Mask 
mask=zeros(10); 
mask(3,5:6) = 1; 
mask(5:6,3) = 1; 
mask(4,5:6) = -1; 
mask(5:6,4) = -1; 
imagesc(uint8(I),[-2 2]),colormap(gray),axis off;axis equal, 
hold on 
[c,h] = contour(I,[0 0],'r','Linewidth',3); 

enter image description here Update問題:基於丹尼爾,他對上面的輸入代碼做工精良的sugeestion。但是,我檢查新的輸入,它不起作用。讓看到新的輸入

I=[ 2  2  2  2  2  2  2  2  2 
     2  2  2  1  1  2  2  2  2 
     2  1  1 -1 -1  1  2  2  2 
     2 -1 -1  0 -1  1  2  2  2 
     1 -1  0 -1  1  2  2  2  2 
     1 -1 -1  1  2  2  2  2  2 
     1 -1  1  2  2  2  2  2  2 
     1  1  2  2  2  2  2  2  2 
     2  2  2  2  2  2  2  2  2]; 
mask=[ NaN NaN NaN NaN NaN NaN NaN NaN NaN 
     NaN NaN NaN NaN NaN NaN NaN NaN NaN 
     NaN NaN NaN NaN NaN NaN NaN NaN NaN 
     NaN NaN NaN NaN -1  1 NaN NaN NaN 
     NaN NaN NaN -1  1 NaN NaN NaN NaN 
     NaN NaN -1  1 NaN NaN NaN NaN NaN 
     NaN -1  1 NaN NaN NaN NaN NaN NaN 
     NaN  1 NaN NaN NaN NaN NaN NaN NaN 
     NaN NaN NaN NaN NaN NaN NaN NaN NaN]; 

%%Daniel code 
imagesc(uint8(I),[-2 2]),colormap(gray),axis off;axis equal, 
hold on 
[c,h] = contour(I,[0 0],'r','Linewidth',3); 
[c,h] = contour(mask,[0 0],'g','Linewidth',3); 

這是輸出。上面的代碼會發生什麼?你能解決它幫助我嗎? enter image description here

+2

如果您添加了生成該數據的代碼,那也不錯。讓人們很容易... – kkuilla 2015-02-24 16:01:55

回答

1

您用0初始化了面具,創建了比您想要的輪廓更多的輪廓。與南

%% Draw contour in Orignal 
%%Create image I 
I= ones(10)*2; 
I(3:8,3:8) = -1; 
I(5:6,5:6) = -2; 
I(3:8,3)=1; 
I(3:8,8)=1; 
I(8,3:8)=1; 
I(3,3:8)=1; 
%% Mask 
mask=nan(10); 
mask(3,5:6) = 1; 
mask(5:6,3) = 1; 
mask(4,5:6) = -1; 
mask(5:6,4) = -1; 
imagesc(uint8(I),[-2 2]),colormap(gray),axis off;axis equal, 
hold on 
[c,h] = contour(I,[0 0],'r','Linewidth',3); 
[c,h] = contour(mask,[0 0],'g','Linewidth',3); 

關於你提到的更新Initalize:

你的面具沒有定義的輪廓,它缺乏許多周圍的元素。嘗試更大的蒙版:

mask=nan(size(I)); 
mask(4:8,2:6)=I(4:8,2:6); 
+0

非常感謝Daniel,但是,mask是來自其他函數的輸入,它處理我的代碼。根據你的代碼,我必須將我的面具轉換爲NaN。如何將其轉換爲與我的面具相同的面具 – user8264 2015-02-24 16:59:29

+2

使用'mask(mask == 0)= nan'來轉換。 – Daniel 2015-02-24 17:00:20

+0

讓我看看我的更新問題(新的輸入),你的代碼不能很好地工作。你能幫我嗎? – user8264 2015-02-25 03:33:38