【问题标题】:Draw multiple regions on an image- imfreehand在图像上绘制多个区域 - imfreehand
【发布时间】:2014-05-05 01:21:57
【问题描述】:

我想在图像上手动绘制多个区域以创建绘制区域的二进制掩码(基本事实)。

我附加了使用 imfreehand 为一个区域完成工作的代码,但是一旦释放鼠标按钮,就会显示该单个区域的二进制掩码。有没有办法绘制多个区域然后显示二进制掩码? (多次调用 imfreehand 可能不起作用,因为每个图像的区域数量不同)。

h= imfreehand();

h = imfreehand(gca);
setColor(h,'red');

position = wait(h); 
BW = createMask(h);
figure,imshow(BW);
axis on;

谢谢。

【问题讨论】:

    标签: matlab roi


    【解决方案1】:

    您可以循环直到获得一个空的蒙版 - 这将表明用户已完成所有蒙版的绘制。
    sz 为输出掩码的所需大小,然后

    totMask = false( sz ); % accumulate all single object masks to this one
    h = imfreehand( gca ); setColor(h,'red');
    position = wait( h );
    BW = createMask( h );
    while sum(BW(:)) > 10 % less than 10 pixels is considered empty mask
          totMask = totMask | BW; % add mask to global mask
          % you might want to consider removing the old imfreehand object:
          delete( h ); % try the effect of this line if it helps you or not.
    
          % ask user for another mask
          h = imfreehand( gca ); setColor(h,'red');
          position = wait( h );
          BW = createMask( h );
    end
    % show the resulting mask
    figure; imshow( totMask ); title('multi-object mask');
    

    【讨论】:

    • 谢,谢谢!这行得通。我删除了您代码中的 delete(h) 语句,因为这将确保用户看到他绘制的所有区域。我还想给用户一个机会来纠正他画的东西。就像一旦他画了一些东西并意识到该区域不正确并且他想要重画一样,我希望能够删除他指定的特定蒙版(可能是通过右键单击?)并让他再次绘制。这个可以吗?
    • 谢谢你。这对我目前正在开发的东西很有用。 +1。
    【解决方案2】:

    作为对@Shai 给出的答案的补充,您还可以使用 Matlab 中的input() 函数来提示用户所需的掩码总数,或者在 while 循环中简单地作为是/否问题提示用户。 也就是说,要么:

    imshow(img,[]) %display image to determine number of masks needed
    n = input('How many masks are needed? ')  %Ask user for number of masks needed
    for i=1:n
        create multiple masks...
    end
    

    n=1;
    while(n==1)
         create mask ...
         n = input('Need more masks? [0=No, 1=Yes] ')
    end
    

    【讨论】:

    • 感谢 Ghaul。即使在查看图像之后,用户实际上也不知道存在多少区域。所以我只是添加了一条消息 - message1 = sprintf('完成后单击左键'); %since while 循环仅在像素数大于 10 时运行 uiwait(msgbox(message1));你也可以看看我在@Shai给出的答案上发表的评论。
    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    • 2013-06-18
    相关资源
    最近更新 更多