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

17 次查看(过去 30 天)
Natsumi Nakatani
Natsumi Nakatani 2020-1-23
1枚の画像でROIを用いて、複数の任意領域の平均輝度値検出をやろうと思っています。1箇所のみの検出はできたのですが、それを繰り返す方法がわかりません。検出したい画像は様々な処理を行っていて時間がかかるので、処理後の画像に対して、数回ROIを繰り返せればと思っています。良い方法を教えていただけると幸いです。
I=imread('**.JPG');
Igray=rgb2gray(I);
imshow(Igray)
hFH=drawfreehand();
binaryiImage=hFH.createMask();
Luminance=mean(Igray(binaryiImage))
  2 个评论
Kenta
Kenta 2020-1-23
こんにちは、任意領域は各画像で同じでしょうか?それとも各画像で、ROIを指定しますか?
できている範囲でよいので、いま止まっているところまでコードを共有してもらえると助かります(画像もあるとありがたいです)。
Natsumi Nakatani
Natsumi Nakatani 2020-1-23
質問がわかりにくくてすみません。
やりたいことは下記の図のように1枚の画像で青、緑、赤といった範囲を指定して、それぞれの領域の平均輝度値を算出したいと思っています。
cameraman2.tif
現在は下記のコードを作成し、1箇所のみの検出はできます。
I=imread('cameraman.tif');
imshow(I)
hFH=drawfreehand();
binaryiImage=hFH.createMask();
Luminance=mean(I(binaryiImage))

请先登录,再进行评论。

采纳的回答

Kenta
Kenta 2020-1-23
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 个评论
Natsumi Nakatani
Natsumi Nakatani 2020-1-24
いつもご回答ありがとうございます。
1)のパターンを想定した質問でしたが、2)のパターンもいずれ使いそうなので、大変助かりました。
ありがとうございました。

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

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

Start Hunting!