2016-07-27 118 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

相关问题