6

軸座標 (たとえば、 によって取り込まれたもの、または および で出力されたもの) から画像のピクセル座標に変換する好ましい方法は何plotですか?point1point2houghlines

Mathworks のドキュメントに関数axes2pixがありますが、どのように機能するかは不明です。具体的には、3番目の引数は何ですか? 例では を渡すだけ30ですが、この値がどこから来るのかは不明です。説明は、私が知らない他のいくつかの機能の知識に依存しています。

関連する質問:軸座標からピクセル座標へ? を使用することをpoly2maskお勧めします。これはポリゴンで機能しますが、単一のポイントまたはポイントのリストに対して同じことを行うにはどうすればよいですか?

その質問はScripts to Convert Image to and from Graph Coordinatesにもリンクしていますが、そのコードは例外をスローしました:

Error using  / 
Matrix dimensions must agree.
4

2 に答える 2

2

次のコードを検討してください。軸座標から画像ピクセル座標に変換する方法を示します。

1:widthこれは、既定のおよび以外のカスタム XData/YData 位置を使用してイメージをプロットする場合に特に便利です1:height。以下の例では、x/y 方向に 100 および 200 ピクセルずつシフトしています。

function imageExample()
    %# RGB image
    img = imread('peppers.png');
    sz = size(img);

    %# show image
    hFig = figure();
    hAx = axes();
    image([1 sz(2)]+100, [1 sz(1)]+200, img)    %# shifted XData/YData

    %# hook-up mouse button-down event
    set(hFig, 'WindowButtonDownFcn',@mouseDown)

    function mouseDown(o,e)
        %# get current point
        p = get(hAx,'CurrentPoint');
        p = p(1,1:2);

        %# convert axes coordinates to image pixel coordinates
        %# I am also rounding to integers
        x = round( axes2pix(sz(2), [1 sz(2)], p(1)) );
        y = round( axes2pix(sz(1), [1 sz(1)], p(2)) );

        %# show (x,y) pixel in title
        title( sprintf('image pixel = (%d,%d)',x,y) )
    end
end

スクリーンショット

(軸の制限が で始まらないことに注意してください(1,1)。したがって、 が必要ですaxes2pix)

于 2012-06-29T16:41:35.890 に答える
0

聞いたことのない組み込みの方法があるかもしれませんが、これを最初から行うのは難しいことではありません...

set(axes_handle,'units','pixels');
pos = get(axes_handle,'position');
xlim = get(axes_handle,'xlim');
ylim = get(axes_handle,'ylim');

これらの値を使用すると、軸座標からピクセルに簡単に変換できます。

x_in_pixels = pos(1) + pos(3) * (x_in_axes-xlim(1))/(xlim(2)-xlim(1));
%# etc...

上記はpos(1)、図内の軸のxオフセットとして使用されます。これを気にしない場合は、使用しないでください。同様に、画面座標で必要な場合は、によって取得された位置のxオフセットを追加します。get(figure_handle,'position')

于 2012-06-28T02:51:52.933 に答える