黒い箇所を除いた輝度​値の平均、または合計​を求めたいです

24 ビュー (過去 30 日間)
touka kakihara
touka kakihara 2021 年 6 月 20 日
編集済み: touka kakihara 2021 年 6 月 21 日
おそらく初歩的な質問だと思うのですが申し訳ありません.
以下の画像のように端を黒く塗りつぶした画像があったとき,この黒い箇所を除いた輝度値の平均を求めたいと考えています.
または
a = imread("sample.jpg");
a' = rgb2gray(a);
area = numel(a') ;
black = sum(sum(a'<1)) ;%%黒い箇所の面積
notbl = area - black ;%%黒い箇所を除いた面積
で黒い箇所を除いたPixel数を求めることができると思うのですが、これで輝度値の合計を割り平均を求めたいです.
利用できる関数などがありましたらご教授いただけますと幸いです.
よろしくお願いいたします.

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 6 月 21 日
画像データは0~255の整数値で、各画素の輝度値を表します。
(a'<1)は、a'の値が0の画素に対しTRUEを返します。それを合計すれば黒い箇所の面積(画素数)になります。
a'(a'<1)は、黒い箇所の輝度​値のみを選択します。
a'(a'>=1)は、黒い箇所を除いた輝度​値のみを選択します。これを合計し画素数で割れば平均輝度値が求まります。
MATLABではa'は行列の転置を意味するので変数の名前として用いる事は出来ません。これをa_dsに変更しました。
a = imread("sample.jpg");
imshow(a)
a_ds = rgb2gray(a);
area = numel(a_ds) % 画像全体の面積(画素数)
area = 251228
black = sum(sum(a_ds<1)) % 黒い箇所の面積(画素数)
black = 61077
notbl = area - black % 黒い箇所を除いた面積(画素数)
notbl = 190151
sumbr = sum(sum(a_ds(a_ds>=1))) % 黒い箇所を除いた輝度​値の合計
sumbr = 15368873
avebr = sumbr / notbl % 黒い箇所を除いた輝度​値の合計/面積(画素数)
avebr = 80.8246
avebr2 = mean2(a_ds(a_ds>=1)) % 黒い箇所を除いた輝度​値の平均
avebr2 = 80.8246
  2 件のコメント
Atsushi Ueno
Atsushi Ueno 2021 年 6 月 21 日
mean2関数は画像データの入力を前提としている為、2次元配列全体の平均値を求めます。
mean関数の出力は1次元減る形になるので、sum関数と同様にmean(mean())とするか、mean(入力,'all')とすれば2次元配列全体の平均値が得られます。
touka kakihara
touka kakihara 2021 年 6 月 21 日
編集済み: touka kakihara 2021 年 6 月 21 日
 
 ご回答ありがとうございます.コードの訂正や細かい仕様まで丁寧に説明していただき大変助かります.
 また
でのご回答も参考にさせていただいておりました.誠にありがとうございます.

サインインしてコメントする。

その他の回答 (0 件)

製品

Community Treasure Hunt

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

Start Hunting!