1

同じ 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」です。

4

1 に答える 1