同じ Figure ウィンドウに一連の画像を 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」です。