2016-07-27 120 views
0

我正在嘗試使用imfreehand創建一個用戶控制的二進制掩碼。我試圖讓用戶選擇多個區域而不是單個區域。一旦在圖像tophatImage上繪製區域,所選區域的二進制版本將出現在圖像totalBinary上。到現在爲止還挺好。如何使用imfreehand繪製多個二進制區域

問題是,當需要繪製下一個區域時,先前繪製的區域tophatImage消失。這可能是一個問題,因爲用戶看不到他/她繪製的區域,並且不能刪除繪製的區域。先前繪製的區域在totalBinary中的二進制版本保持不變,所以這不是問題。

我認爲這個問題起源於for-loop內部的subplot(1,2,1); imshow(tophatImage)行。每當需要繪製新區域時,圖像tophatImage正在重置。正如您在下面的第一張圖片中看到的,第三張圖像中沒有繪製圖像。

原始誤差編碼

subplot(1,2,1); imshow(tophatImage) 

hFH = imfreehand(); 
binaryImage = createMask(hFH); 
totalBinary = false(size(histogramEq)); 

for k = 1:5 
    totalBinary = totalBinary | binaryImage; 
    subplot(1,2,2); imshow(totalBinary); drawnow 

    subplot(1,2,1); imshow(tophatImage) 
    hFH = imfreehand(); 
    binaryImage = createMask(hFH); 
end 

更正後的代碼

與該修正的代碼,我怎麼可以讓這樣,當一個區域從tophatImage刪除,它是更新到totalBinary

for k = 1:5 
    totalBinary = totalBinary | binaryImage; 
    subplot(1,2,2); imshow(totalBinary); drawnow 

    subplot(1,2,1); %imshow(tophatImage) % <-- Remove this 
    hFH = imfreehand(); 
    binaryImage = createMask(hFH); 
end 

Image

回答

1

非常簡單的錯誤。在您的循環中,撥打subplot(1,2,1);後,請取消撥打imshow(tophatImage);。這是刪除你的數字內容,只顯示圖像本身。如果您想要保留imfreehand所畫的輪廓,請不要撥打imshow。使用imfreehand時,輪廓應保持不變,直到您關閉該數字或更改此subplot內的內容。

要絕對確保你知道我說的是:

for k = 1:5 
    totalBinary = totalBinary | binaryImage; 
    subplot(1,2,2); imshow(totalBinary); drawnow 

    subplot(1,2,1); %imshow(tophatImage) % <-- Remove this 
    hFH = imfreehand(); 
    binaryImage = createMask(hFH); 
end 
+0

現在是工作,但是當我刪除一個區域,它似乎並沒有被更新到'totalBinary'出於某種原因並給出錯誤。 – Senyokbalgul

+0

我在我的最後嘗試了它,它工作。輪廓和麪具都會更新。 – rayryeng

+0

您的代碼不會刪除區域。它只附加。請使用此代碼更新您的帖子以刪除區域,我會看看我能做些什麼。 – rayryeng

相關問題