【问题标题】:How to draw multiple binary regions using imfreehand如何使用 imfreehand 绘制多个二进制区域
【发布时间】:2016-07-27 23:51:33
【问题描述】:

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

问题是,当需要绘制下一个区域时,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

【问题讨论】:

    标签: matlab image-processing binary drawing


    【解决方案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
    

    【讨论】:

    • 它现在可以工作了,但是当我删除一个区域时,由于某种原因它似乎没有更新到totalBinary 并给出了错误。
    • 我试过了,效果很好。轮廓和蒙版都会更新。
    • 您的代码不会删除区域。它只是附加。请使用此代码更新您的帖子以删除区域,我会看看我能做什么。
    • 我认为删除区域不需要代码,因为当您右键单击tophatImage 中的绘制区域时,它会显示删除绘制区域的选项。
    • @Senyokbalgul 如果是这种情况,通过 UI 移除轮廓需要您为此编写事件处理程序,这更复杂。简单地通过 UI 删除轮廓不会更新遮罩。不幸的是,我不知道该怎么做,老实说,这是一个单独的问题。我相信我已经解决了您最初的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多