MATLAB Answers

1枚の画像でROIを繰り返す方法

13 views (last 30 days)
Natsumi Nakatani
Natsumi Nakatani on 23 Jan 2020
Commented: Natsumi Nakatani on 24 Jan 2020 at 4:14
1枚の画像でROIを用いて、複数の任意領域の平均輝度値検出をやろうと思っています。1箇所のみの検出はできたのですが、それを繰り返す方法がわかりません。検出したい画像は様々な処理を行っていて時間がかかるので、処理後の画像に対して、数回ROIを繰り返せればと思っています。良い方法を教えていただけると幸いです。
I=imread('**.JPG');
Igray=rgb2gray(I);
imshow(Igray)
hFH=drawfreehand();
binaryiImage=hFH.createMask();
Luminance=mean(Igray(binaryiImage))

  2 Comments

Kenta
Kenta on 23 Jan 2020 at 8:44
こんにちは、任意領域は各画像で同じでしょうか?それとも各画像で、ROIを指定しますか?
できている範囲でよいので、いま止まっているところまでコードを共有してもらえると助かります(画像もあるとありがたいです)。
Natsumi Nakatani
Natsumi Nakatani on 23 Jan 2020 at 9:19
質問がわかりにくくてすみません。
やりたいことは下記の図のように1枚の画像で青、緑、赤といった範囲を指定して、それぞれの領域の平均輝度値を算出したいと思っています。
cameraman2.tif
現在は下記のコードを作成し、1箇所のみの検出はできます。
I=imread('cameraman.tif');
imshow(I)
hFH=drawfreehand();
binaryiImage=hFH.createMask();
Luminance=mean(I(binaryiImage))

Sign in to comment.

Accepted Answer

Kenta
Kenta on 23 Jan 2020 at 9:50
Natsumi Nakataniさま、説明いただき、ありがとうございます。こちらこそ意味がくみ取れておらず申し訳ございません。
「1枚の画像で青、緑、赤といった範囲を指定して、それぞれの領域の平均輝度値を算出したい」とのことですが、
以下のどちらの意味でしょうか?
1)1枚の青、緑、赤チャンネルの範囲をそれぞれ指定して、それぞれの(赤、青、緑)の領域の平均をだしたい
2)1つのチャンネル内で、3つくらいの領域を自分で指定し、それら3つの領域の平均をだしたい
どちらにも取れる気がしたので、それぞれの例を以下に示します。
上が、1)のパターンで、それぞれのチャンネルを取り出してやっていて、下が2)のパターンでやっています。両方とも意図したものではなかったらすいません。
result2.PNG
close all;clear;clc
I=imread('onion.png');
for i=1:3
I2=I(:,:,i);
subplot(1,3,i)
imshow(I2)
hFH=drawfreehand();
binaryiImage=hFH.createMask();
Luminance(i)=mean(I(binaryiImage));
end
Luminance
result3.PNG
close all;clear;clc
I=imread('cameraman.tif');
for i=1:3
subplot(1,3,i)
imshow(I)
hFH=drawfreehand();
binaryiImage=hFH.createMask();
Luminance(i)=mean(I(binaryiImage));
end
mean(Luminance)

  1 Comment

Natsumi Nakatani
Natsumi Nakatani on 24 Jan 2020 at 4:14
いつもご回答ありがとうございます。
1)のパターンを想定した質問でしたが、2)のパターンもいずれ使いそうなので、大変助かりました。
ありがとうございました。

Sign in to comment.

More Answers (0)

Sign in to answer this question.