我正在尝试使用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
现在是工作,但是当我删除一个区域,它似乎并没有被更新到'totalBinary'出于某种原因并给出错误。 – Senyokbalgul
我在我的最后尝试了它,它工作。轮廓和面具都会更新。 – rayryeng
您的代码不会删除区域。它只附加。请使用此代码更新您的帖子以删除区域,我会看看我能做些什么。 – rayryeng