0

GUI に関する質問があり、数時間前から気になっていましたが、修正できません。機能: 画像を読み込み、サブセット化し、サーフ プロットとしてプロットします。その後、長方形の左上と右下の座標を選択できる GUI を起動します。長方形がサーフプロットに描画されます。

2 つの問題があります。マウス クリックを小さな赤いパッチで示し、四角形を赤い線で示したいのです。

1) 小さな赤いパッチは正常に機能しますが、最初のパッチは非常に大きく、プロット ウィンドウのほぼ全体を占めています。最初の座標の 2 番目のポイントを選択するとすぐに、すべてが正常に戻り、パッチが希望する小さな方法でプロットされます。座標に何か問題があるかどうかを確認するためにコードをデバッグしましたが、問題ないようです。

2) 線の描画が不正確です! 特に最初の数行は、マウスクリックから最大 100 ピクセル、通常は左側にオフセットされます。次の行を追加するときに移動することさえあります。そのようにいくつかの長方形を配置した後、それらは通常より良くなり、所定の位置に配置されます。これはなぜですか?コードは次のとおりです。

function resampdem
clc;clear;clear all

%% read DEMs and header
img1 = imread('srtm_55_06.tif');

% subset
img1 = img1(1:500,1:500);
[x y] = meshgrid(1:500,1:500);



%%
f = figure;
imageHandle = surfl(x,y,img1);
colormap jet
shading interp
view(0,90);
set(imageHandle,'ButtonDownFcn',@ImageClickCallback)
hold on

a = axes;
set(a, 'Visible', 'off');


%# Create controls.
uicontrol('Parent', f, 'Style', 'edit', 'String', 'Input...');

m = 1;
bin = [];



%%%  Funktion zur Auswertung des Mouseklicks
helpdlg('Corner: Upper Left');
    function ImageClickCallback ( objectHandle , eventData )

%         if mod(m,2) == 0
%             string = 'Upper Left';
%         else
%             string = 'Lower Right';
%             
%         end
%         message = sprintf('Corner: %s',string);
%         helpdlg(message);

        axesHandle  = get(objectHandle,'Parent');
        coordinates = get(axesHandle,'CurrentPoint');
        coordinates = coordinates(1,1:2);


        bin(m,1) = coordinates(1)

        bin(m,2) = coordinates(2)




        patch([bin(m,1)-3 bin(m,1)+3 bin(m,1)+3 bin(m,1)-3], [bin(m,2)+3 bin(m,2)+3 bin(m,2)-3 bin(m,2)-3],'r','Parent',a);


        if mod(size(bin,1),2) == 0
            resamp_area(bin,m);
        end
        m = m+1
    end

%%%  Funktion zum Zeichnen der Rechtecke
    function resamp_area(coords,m)

        x1 = coords(m-1,1);
        x2 = coords(m,1);
        y1 = coords(m-1,2);
        y2 = coords(m,2);

        patch([x1 x1+20 x1+20 x1], [y1 y1 y1-20 y1-20],'w','Parent',a);
        %horizontal lines
        line([x1, x2], [y1, y1], 'Parent', a, 'Color',[1 0 0], 'LineWidth',2.0);
        line([x1, x2], [y2, y2], 'Parent', a, 'Color',[1 0 0], 'LineWidth',2.0);
        %vertical lines
        line([x1, x1], [y1, y2], 'Parent', a, 'Color',[1 0 0], 'LineWidth',2.0);
        line([x2, x2], [y1, y2], 'Parent', a, 'Color',[1 0 0], 'LineWidth',2.0);
        %get(t)

    end    

end
4

0 に答える 0