白飛びを除いたL*a*b*値を求めたいです

14 次查看(过去 30 天)
touka kakihara
touka kakihara 2022-1-13
 以下のような白飛びしている写真があったとき、白飛びしている部分を黒く塗りつぶし,L*,a*,b*値の各成分の平均を測定したいと考えております.
白飛びしているという判断として
Im = imread('例-白飛び画像.jpeg')
sirotobi = rgb2gray(Im);
sirotobi(sirotobi>250) = 0 ; %輝度値250以上の画素を黒に
で輝度値250よりを白飛びとみなし上の画素を黒く塗り潰したいと考えております.
また
lab = rgb2lab(imread('例-白飛び画像.jpeg')); %RGB イメージを L*a*b* 色空間に変換
maskL = lab(:,:,1) == 0;
maskA = lab(:,:,2) == 0;
maskB = lab(:,:,3) == 0;
mask = maskL & maskA & maskB;
[l,a,b] = imsplit(lab);
meanL = mean(l(~mask)); % 黒領域以外の画素値を抜き出してきて平均値を計算
meanA = mean(a(~mask));
meanB = mean(b(~mask));
で各L*,a*,b*の黒部分を除き平均を出せるかと思うのですが,元画像に黒く塗りつぶした画素を反映させL*,a*,b*値を図るにはどのようによりすれば良いでしょうか.ご教授いただけますと幸いです.よろしくお願い致します.

采纳的回答

Atsushi Ueno
Atsushi Ueno 2022-1-13
画素マスクは2次元データ(幅*高さ)です。
カラー画像は3次元データ(幅*高さ*RGB)なので、上記のマスクをRGB3枚分重ねて適用する必要があります。
L*,a*,b*に分割した画像データは2次元データ(幅*高さ)なので、マスクをそのまま適用できます。
Im = imread('例-白飛び画像.jpeg'); % カラー画像:3次元データ(幅*高さ*RGB)
white_mask = rgb2gray(Im) > 250; % 画素マスク:2次元データ(幅*高さ)
Im(repmat(white_mask,[1 1 3])) = 0; % 輝度値250以上の画素を黒に
imshow(Im);
lab = rgb2lab(Im); % 元画像の白飛びしている部分を黒く塗りつぶした画像の RGB を L*a*b* に変換
[l,a,b] = imsplit(lab); % L*,a*,b*値に分割する
meanL = mean(l(~white_mask)) % 黒領域以外の画素値を抜き出してきて平均値を計算
meanL = 77.1390
meanA = mean(a(~white_mask))
meanA = -4.3118
meanB = mean(b(~white_mask))
meanB = 6.5067
  1 个评论
touka kakihara
touka kakihara 2022-1-14
ご回答誠にありがとうございます.また3次元データと2次元データの等のマスクの仕様など理解できていなかたので大変助かりました.誠にありがとうございます.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Image Processing Toolbox 的更多信息

产品


版本

R2020b

Community Treasure Hunt

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

Start Hunting!