Matlab使用imfreehand绘制多次ROI并使用ESC按下退出

时间:2017-07-17 22:41:35

标签: matlab

我试图在Matlab中使用imfreehand函数来创建多重ROI。用户选择足够的ROI后,可以通过按ESC键将其停止。这是我的代码,但它有一个错误。

Error: Expected one output from a curly brace or dot indexing expression, but there were 0 results.

有人可以帮助我并指出问题吗?代码从这里修改

Draw multiple regions on an image- imfreehand

由于

I = imread('pout.tif');

totMask = zeros(size(I)); % accumulate all single object masks to this one
f = figure('CurrentCharacter','a');
imshow(I)

h = imfreehand( gca ); setColor(h,'green');
position = wait( h );
BW = createMask( h );
while double(get(f,'CurrentCharacter'))~=27 
      totMask = totMask | BW; % add mask to global mask  
      % ask user for another mask
      h = imfreehand( gca ); setColor(h,'green');
      position = wait( h );
      BW = createMask( h );
      pause(.1)
end
% show the resulting mask
figure; imshow( totMask ); title('multi-object mask');

1 个答案:

答案 0 :(得分:1)

问题是当你点击Esc时,imfreehand工具退出并返回一个空的h。因此,setColor(h,'green');失败了。 此外,您应该在循环中定义BW之后添加totMask = totMask | BW;,否则您将失去最后的投资回报率。

试试这个:

totMask = zeros(size(I)); % accumulate all single object masks to this one
f = figure('CurrentCharacter','a');
imshow(I)

h = imfreehand( gca ); setColor(h,'green');
position = wait( h );
BW = createMask( h );
totMask = totMask | BW; % add mask to global mask  
while double(get(f,'CurrentCharacter'))~=27 
    % ask user for another mask
    h = imfreehand( gca ); 
    if isempty(h)
      % User pressed ESC, or something else went wrong
      continue
    end
    setColor(h,'green');
    position = wait( h );
    BW = createMask( h );
    totMask = totMask | BW; % add mask to global mask  
    pause(.1)
end
% show the resulting mask
figure; imshow( totMask ); title('multi-object mask');

另请注意,最后我使用的是imagesc而不是imshow:这会将输出图像颜色缩放到0到1之间,从而正确显示您的投资回报率。