如何使用imfreehand绘制多个二进制区域

时间:2016-07-27 15:03:00

标签: matlab image-processing binary drawing

我正在尝试使用imfreehand创建用户控制的二进制掩码。我试图允许用户选择多个区域而不是单个区域。在图像tophatImage上绘制区域后,所选区域的二进制版本将显示在图像totalBinary上。到目前为止一切都很好。

问题在于,当需要绘制下一个区域时,tophatImage中先前绘制的区域消失。这可能是一个问题,因为用户无法看到他/她绘制的区域并且无法删除绘制的区域。 <{1}}中先前绘制的区域的二进制版本保持不变,因此这不是问题。

我认为问题源于totalBinary内的行subplot(1,2,1); imshow(tophatImage)。每次需要绘制新区域时,图像for-loop都会重置。正如您在下面的第一张图片中看到的那样,没有像第三张图像中那样保留绘制的图像。

原始错误代码

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

Image

1 个答案:

答案 0 :(得分:1)

非常简单的错误。在您的循环中,在您致电f.input后,请移除对subplot(1,2,1);的呼叫。这样可以删除图形内容并仅显示图像本身。如果您希望保留imshow(tophatImage);时由您绘制的轮廓,请不要拨打imfreehand。使用imshow时,轮廓应保留,直到您关闭图形或更改此imfreehand中的内容。

绝对确定你知道我在说什么:

subplot