質問: l*a*b*色空間にて1成分を取り出し,黒い箇所を除いた合計と平均を取得したい 以下のような画像があるとき,l*a*b*色空間に変換したのち,各l*,a*b*1成分づつ取り出し,各成分の合計値と合計値を黒い箇所を除く面積で割った平均を所得したいと考えております. l*a*b*色空間に変換するにあたり,rgb2lab を活用しようとしたのですが,各成分を利用する方法と黒い箇所を除く条件式をどのように表現すれば良いかわかりません. ご教授のほど、よろしくお願いいたします.
回答: 黒い部分の値はおそらくl=0,a=0,b=0になっていると思いますので(確認してみてください)、labの各成分がその値に一致しているところを抜き出してきて、論理積を取れば黒い部分のマスクができます。 maskl = labimg(:,:,1) == 0; maska = labimg(:,:,2) == 0; maskb = labimg(:,:,3) == 0; mask = maskl & maska & maskb; 画像の中にも該当する画素があれば抽出されてしまうので場合によってはモルフォロジー処理などで、欲しい領域(おそらく画像の左右の領域ですよね?)だけにするような処理が必要かもしれません。詳しくはこちら。 マスクができれば、それ以外の画素の値を抽出できるので、その値から平均値を求めれば完了です。 [l,a,b] = imsplit(labimg); % チャンネルごとに分離 meanl = mean(l(~mask)); % 黒領域以外の画素値を抜き出してきて平均値を計算 meana = mean(a(~mask)); meanb = mean(b(~mask));