フィルターのクリア

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

2 ビュー (過去 30 日間)
touka kakihara
touka kakihara 2022 年 1 月 13 日
コメント済み: touka kakihara 2022 年 1 月 14 日
 以下のような白飛びしている写真があったとき、白飛びしている部分を黒く塗りつぶし,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 Center および File ExchangeImage Processing Toolbox についてさらに検索

製品


リリース

R2020b

Community Treasure Hunt

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

Start Hunting!