我试图在同一个图形窗口中以 100% 的放大率显示一组图像。同时,我想在每个图像上应用一个注释对象。
假设我的输入图像不超过屏幕尺寸,这就是我所做的:
imagedata = imread('cameraman.tif');
hFig = figure;
hAnnot = [];
for n = 1 : 10 % repeat ten times
% show and annotate image
imshow(imagedata, 'InitialMagnification', 100, 'border', 'tight');
if(isempty(hAnnot) || ~ishandle(hAnnot))
hAnnot = annotation('arrow', 'color', 'b');
end
set(gca, 'units', 'pixels');
gcapos = get(gca, 'Position');
% add label to display no of loop
text(10, 10, [' Loop : ', num2str(n)], 'Color', 'c')
pause(1); % pause one second to view
if(ishandle(hAnnot))
% remove hAnnot to prevent reappearance in next loop
delete(hAnnot);
% check if annotation object is successfully removed
if(~ishandle(hAnnot))
hAnnot = [];
else
sprintf('hAnnot is not cleared in loop #%d', n);
end
end
end
结果表明,只有imshow()
第一版图像以 100% 的放大率显示。gca 的位置返回 [1 1 256 256],这就是我想要的。
随后的图像(从循环 2 到 10)被缩小,位置现在返回 [34.2800 29.1600 198.4000 208.6400]。
任何人都可以帮助解释为什么它会以这种方式表现吗?
我还在每个循环中查看了 hFig 的属性,以了解是否有任何变化。我观察到的唯一区别是“NextPlot”的值 - 其中第一个循环是“replacechildren”,而在后续循环中是“add”。