画像の切り出しとその方法
    13 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Takanori Aihara
 il 10 Dic 2020
  
    
    
    
    
    Commentato: NAOAKI MIYAMOTO
 il 12 Mag 2022
            画像の四角形トリミング範囲n×mを任意で決め,
且つ原画像の任意の範囲を画像を確認しながら決められる方法は何かありますか?
イメージとしては,原画像上にトリミング範囲の四角形が表示され,lそれをドラッグで動かす感じです.
よろしくお願いします.
0 Commenti
Risposta accettata
  Shunichi Kusano
    
 il 10 Dic 2020
        こんにちは。drawrectangle関数で、画像に四角形を描画できますが、その際に初期値を決めておけばそのサイズの四角形を描画させることができ、かつ描画したオブジェクトはマウスで動かすことができます。動かした後、オブジェクトのハンドルを見ると、動かした先のPositionを得ることができます。下記がサンプルコードとなります。
img = imread('peppers.png'); % 画像の読み込み
imshow(img) % 表示
h = drawrectangle('Position',[1 1 100 50]); % (1,1)を左上座標とした幅100,高さ50の領域生成
% この状態で、四角をマウスでぐりぐり動かして、切り抜きたい範囲にあわせてください
roi = h.Position;
imgCrop = imcrop(img,roi); % 切り抜き
注意点として、上の例ですと切り抜かれた画像サイズは51x101(x3)になっています。気持ち悪いですね。詳細はimcrop関数のdocumentをご覧いただきたいのですが、こういう仕様になっています。ですので、切り抜き後のサイズをかっちり決めたいのであれば、その値-1をdrawrectangleで指定してあげてください(上記の例なら[1 1 99 49])。
8 Commenti
  Shunichi Kusano
    
 il 12 Mag 2022
				次のコマンドを適当なスクリプトファイルに保存して実行してみてください。枠の面積がリアルタイムには変わらないのですが、枠の右端をドラッグして幅を変えるとドロップ後に高さが、下端で高さを変えると幅が変わるはずです。枠の右下角をドラッグアンドドロップした場合は普通に面積が変わります。
仕組みとしてはイベントリスナーを使っています。ROIが変更された際にmyCallbk関数が実行されます。myCallbkの中では、イベント前後の変化から幅が変わったのか高さが変わったのかを検知して、変わってない方は面積一定になるように調整される仕組みです。
img = imread('pout.tif');
imshow(img)
h = drawrectangle('Position',[1 1 100 100]);
l = addlistener(h,'ROIMoved',@myCallbk);
function myCallbk(s,evtData)
    h = evtData.Source;
    pp = evtData.PreviousPosition;
    area = pp(3) * pp(4);
    cp = evtData.CurrentPosition;
    if abs(pp(4) - cp(4))<1e-1 % 幅の変更
        disp('width change')
        width = cp(3);
        height = area / width;
    elseif abs(pp(3) - cp(3))<1e-1 % 高さの変更
        disp('height change')
        height = cp(4);
        width = area / height;
    else % 両方
        disp('area change')
        width = cp(3);
        height = cp(4);
    end        
    h.Position = [cp(1:2) width height];
end
Più risposte (0)
Vedere anche
Categorie
				Scopri di più su ROI ベース処理 in Help Center e File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!