6

図の 1 つの軸にプロットした画像の領域の輪郭を描く四角形を描画したいと考えています。この図には複数の軸があるため、rectangle() 関数を使用しています。私が望むのは、長方形のすぐ内側と外側に白い長方形を細い黒い境界線で描くことです。長方形の内側の画像の部分が見えるようにする必要があるため、すべての「facecolor」は「none」にする必要があります。線幅が細い黒い長方形が2つ、線幅が太い白い長方形が1つ、3つの長方形を描いてみましたが、問題は、「位置」が軸単位で定義され、「線幅」がポイント単位で定義されているため、スケーリングが機能しないことです特に図のサイズが変更された場合。

参考までに、アウトラインは、明るい背景に対して白い長方形がより見えるようにするためのものです。プロットされた画像は大きく異なるため、私のデータでは単一の色が普遍的に見えるわけではありません。

これを行う方法について何か提案はありますか?

4

3 に答える 3

7

黒と白の長方形に異なる線幅を使用するだけではどうですか?

imshow('cameraman.tif')
rectangle('position',[80 30 100 100],'edgecolor','k','LineWidth',4)
rectangle('position',[80 30 100 100],'edgecolor','w','LineWidth',1)

長方形のカメラマン (名前を付けて保存)

うーん、角は PNG ファイルよりも MATLAB Figure の方がはるかによく見えます。

より良いgetframe

長方形のカメラマン (getframe)

于 2012-02-13T20:34:18.887 に答える
3

@Yuks ソリューションが好きです。しかし、考えられる別の可能性があります。

長方形内のピクセルの平均値を計算し、ボックスの色を逆に設定することもできます。このようにして、常に良好なコントラストが得られます。

ここに画像の説明を入力

コードは次のとおりです。

function PlotRect(im,x,y,w,h)
    m = double(im( round(y): round(y+h) , round(x): round(x+w),:));
    if (mean(m(:))  < 255/2)
        col = [1 1 1];
    else
        col = [0 0 0];
    end
    rectangle('Position',[x y w h],'EdgeColor', col);
end

そしてテスト:

function Inverse()

    im = imresize( uint8(0:5:255), [250, 400]) ;
    figure;imshow(im);  hold on; 

    PlotRect(im,5,8,50,75);
    PlotRect(im,100,30,25,42);
    PlotRect(im,200,10,40,40);
    PlotRect(im,300,10,40,40);
end
于 2012-02-13T21:18:18.860 に答える