- drawpolygon 関数は新たに多角形ROIを作成完了するまで(※)ブロック
- waitメソッドは既存のROIを変更完了するまで(※)ブロック
- (※いずれもマウス ボタンのダブルクリックにより作業完了と判断される)
画像に一つ目の関心領域を設定後に位置や大きさを微調整し,次に別の関心領域設定に移りたい場合について
2 views (last 30 days)
Show older comments
画像に複数の関心領域を設定するとき,一つ目の関心領域の位置や大きさの微調整が終了したのち,次の関心領域の設定に移りたい場合には
wait関数が使用できると考えましたが,以下のようなコードではROI_2に移ることなく次に進むことができません.
I = imread('pout.tif');
imshow(I)
ROI_1 = drawpolygon(); % drawcircle(),drawfreehand()
wait(ROI_1)
bw_1 = ROI_1.createMask();
ROI_2 = drawpolygon(); % drawcircle(),drawfreehand()
wait(ROI_2)
bw_2 = ROI_2.createMask();
wait関数やROI_2に移る方法についてご教示頂けないでしょうか.
(追記,編集分)
また,データ型がuint16である画像をマスク画像とオーバーレイする場合,
Overlay_1 = labeloverlay(uint8(I),bw_1); ...(1)
imshow(Overlay_1)
にてうまくいくのですが,
以下に添付しましたコントラストをもつ画像を前述と同様に処理しても,真っ白な画像にマスク画像がオーバーレイされて出力されます.
ご教示頂いた方法で,
Overlay_2 = labeloverlay(uint16(I)*20,bw_2); ...(2)
imshow(Overlay_2)
といくらかの係数をかけるとうまく表示されました.
labeloverlayにて出力される融合画像はuint8と記載あるため,あらかじめ画像データをuint8にキャストしたのが(1)のコードです.当然ながら,(1)をuint16とすると画像は真っ黒に表示されます.逆に,以下の添付した画像ではuint8にすると,真っ白な画像(すべての画素がなぜか255)となり,uint16にすると真っ黒な画像が表示されます.
同じ画像表示にも関わらず非常に煩雑なのですが,キャスト変換や画像表示の考え方が間違っているのでしょうか.ご教示頂けないでしょうか.
0 Comments
Accepted Answer
Atsushi Ueno
on 1 May 2023
使った事が無く明確なイメージを持っていませんが:
なので、一つの多角形ROIを作成完了(ダブルクリック)後、そのROIをもう一度ダブルクリックすれば、新たにもう一つの多角形ROIを作成出来るのではないでしょうか?
5 Comments
Atsushi Ueno
on 2 May 2023
> キャスト変換や画像表示の考え方が間違っているのでしょうか
いいえ。間違っていないと思います。
- 添付画像のデータ型はuint16(0-65535)の様です
- 従って値を256で割ってuint8(0-255)に変換すれば表示色が維持されます
- labeloverlay 関数は入力の型が下記のいずれでもuint8を出力する仕様です (int8は入力不可)
- 表示色を維持したままイメージのデータ型を変換する関数を探したらありました
- (なぜか int8 への変換が無い。labeloverlay 関数も int8 は入力不可だった)
A = imread('kobi.png'); % 画像データAはuint8型
[L,N] = superpixels(A,20);
B = labeloverlay(im2double(A),L); % 表示色を維持する様に値を自動スケーリングしてくれる
C = labeloverlay(im2int16(A),L); % 同様
D = labeloverlay(im2single(A),L); % 同様
E = labeloverlay(im2uint16(A),L); % 同様
F = labeloverlay(im2uint8(A),L); % 同様
montage({B,C,D,E,F}); % 上記いずれの型を入力してもlabeloverlay関数の出力はuint8
> 真っ白な画像にマスク画像がオーバーレイされて出力されます
⇒ 先日のコメントは下記の様に間違ってたかな(※)と思っていましたが、上手くいきましたか。2000前後の20=40000前後で表示されたという事はやはり値域 0~65535 の uint16 画像を入力していたのだと思いますが、labeloverlay 関数の出力は真っ白ではなくほぼ真っ黒になるはずなのです。まぁいいや
(※)【誤】画像データ型はuint16かint16で、値域0~65535に対し2000前後だからほぼ黒になる
(※)【正】画像データ型はsingleかdoubleで、値域0.0~1.0に対し2000前後だから真っ白になる
More Answers (0)
See Also
Categories
Find more on ROI ベース処理 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!