白飛びを除いたL*a*b*値を求めたいです
5 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
touka kakihara
am 13 Jan. 2022
Kommentiert: touka kakihara
am 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 Kommentare
Akzeptierte Antwort
Atsushi Ueno
am 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))
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Image Processing Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!