我试图在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');
答案 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之间,从而正确显示您的投资回报率。