白飛びを除いたL*a*b*値を求めたいです
8 views (last 30 days)
Show older comments
touka kakihara
on 13 Jan 2022
Commented: touka kakihara
on 14 Jan 2022
以下のような白飛びしている写真があったとき、白飛びしている部分を黒く塗りつぶし,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*値を図るにはどのようによりすれば良いでしょうか.ご教授いただけますと幸いです.よろしくお願い致します.
0 Comments
Accepted Answer
Atsushi Ueno
on 13 Jan 2022
画素マスクは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)) % 黒領域以外の画素値を抜き出してきて平均値を計算
meanA = mean(a(~white_mask))
meanB = mean(b(~white_mask))
More Answers (0)
See Also
Categories
Find more on Image Processing Toolbox 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!