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

17 views (last 30 days)
Natsumi Nakatani
Natsumi Nakatani on 23 Jan 2020
Commented: Natsumi Nakatani on 24 Jan 2020
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
こんにちは、任意領域は各画像で同じでしょうか?それとも各画像で、ROIを指定しますか?
できている範囲でよいので、いま止まっているところまでコードを共有してもらえると助かります(画像もあるとありがたいです)。
Natsumi Nakatani
Natsumi Nakatani on 23 Jan 2020
質問がわかりにくくてすみません。
やりたいことは下記の図のように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
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
いつもご回答ありがとうございます。
1)のパターンを想定した質問でしたが、2)のパターンもいずれ使いそうなので、大変助かりました。
ありがとうございました。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!