指定した領域で輝度値の平均と最大値を求める.
84 views (last 30 days)
Show older comments
イメージにおいて,領域を指定してそこでの輝度値の平均・最大値を求めるにはどうすればよいでしょうか.
この領域とは,以下のプログラムを実行して得られた円形領域です.
data = ['42deg_cam1_ (12).jpg']; % ここでファイル名を変える
pic = imread(data);
gray = rgb2gray(pic);
bw = imbinarize(gray);
bw2 = bwareaopen(bw,30); % ノイズ除去,例として30ピクセル以下
[B,L] = bwboundaries(bw2,'noholes');
figure; % imshowはfigureの全画素を更新,hold onの効果なし,新しくfigureを立ち上げる
C = label2rgb(L,@jet,[.5 .5 .5]);
imshow(C);
hold on
for k = 1:length(B) % 境界線と色分け
boundary = B{k};
plot(boundary(:,2),boundary(:,1),'w','LineWidth',2)
end
stats = regionprops(L,'Area','Centroid'); % ここから円形オブジェクトの検出コマンド
threshold = 0.80; % 閾値(円で1,他は1未満)
for k = 1:length(B)
boundary = B{k};
delta_sq = diff(boundary).^2;
perimeter = sum(sqrt(sum(delta_sq,2)));
area = stats(k).Area;
metric = 4*pi*area/perimeter^2;
metric_string = sprintf('%2.2f',metric);
if metric > threshold
centroid = stats(k).Centroid;
plot(centroid(1),centroid(2),'ko');
end
text(boundary(1,2)-35,boundary(1,1)+13,metric_string,'Color','y',...
'FontSize',14,'FontWeight','bold')
end
Accepted Answer
Y Nakanishi
on 1 Oct 2021
Edited: Y Nakanishi
on 1 Oct 2021
イメージの領域を指定する方法として,関心領域(ROI)で切り抜くことができます.以下のコードでは,インタラクティブな画面でのROI取得と表示を行い,グレースケール化した領域の輝度値の平均と最大値を求めるコードを示しています.
3行目のdrawrectangle関数で行っている処理を適宜変更することで他の図形や,すでに決定している領域の選択が可能です.
そのため,グレースケール化した画像の持つ画素値を平均することによって輝度値の平均(meanLuminance),最大値を求めることによって輝度値の最大値(maxLuminance)を求めることが可能です.
I = imread('pears.png'); % イメージのロード
imshow(I) % オリジナル画像の表示
roi = drawrectangle('StripeColor','y'); % 四角形領域でのROI
cropimg = imcrop(I,roi.Position); % 指定領域での切り抜き
imshow(cropimg) % 指定領域で切り抜いた画像の表示
grayimg = rgb2gray(cropimg); % クロップ画像のグレースケール化
meanLuminance = mean(grayimg,'all') % 平均輝度値
maxLuminance = max(grayimg,[],'all') % 最大輝度値
More Answers (0)
See Also
Categories
Find more on イメージのセグメンテーションと解析 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!