画像の白飛びを消して​画像のパラメータなど​を計算したい

43 views (last 30 days)
早汰 前川
早汰 前川 on 4 Jun 2021
Commented: 早汰 前川 on 21 Jun 2021
画像の平均輝度値や面積などのパラメータを求めたいです.
特に白飛びした画像(撮影による光反射する現象)から計算する場合,
白飛びした部分以外の平均輝度値や面積を求めることはできるのでしょうか?
利用できる関数などがありましたら教えていただきたいです.
お願いいたします.
  2 Comments
Hiroyuki Hishida
Hiroyuki Hishida on 4 Jun 2021
前川さま、
おそらくそれにそのまま使える関数はないので、処理を自作ください。
手順としては、白飛びしているピクセルとそうではないピクセルを認識し、白飛びしていないピクセルについてのみ、輝度値の平均など計算すると良いと思います。
また、白飛びの定義(例えばrgbの値がどうであれば白飛びとするかや、白飛びと白色模様の違いをどうするか、など)はご自身で設定される必要があると思います。
菱田
早汰 前川
早汰 前川 on 6 Jun 2021
菱田様
ご回答いただきありがとうございます.
関数がないことを把握しました.
例えば,各ピクセルのrgb値を検出して,ある範囲のみ(150<x<220など)を計算することは可能でしょうか?

Sign in to comment.

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 6 Jun 2021
Edited: Atsushi Ueno on 21 Jun 2021
実際に動かしてみます。繰り返しを避ける為グレースケール画像を処理しています。添付画像はリンク先のwikipediaより拝借しました。白飛び・黒つぶれ - Wikipedia
mygy = rgb2gray(imread('Blown-out_highlights.jpg')); % 画像読込とグレースケール変換
imshow(mygy); % 画像表示
avrg = mean2(mygy) % 画像の平均輝度値(黒:0~白:255)
avrg = 127.3627
area = numel(mygy) % 画像の面積(全画素数)
area = 307200
white = sum(sum(mygy>250)) % 所定輝度以上の面積(画素数)(ここでは輝度251~255を"白飛び"とした)
white = 40473
notwh = area - white % 白飛びした部分以外の面積(画素数)
notwh = 266727
mygy(mygy>250) = 0; % 白飛びした部分を黒(0)にする
%avrg2 = mean2(mygy) % 白飛びした部分以外の平均輝度値(白飛びした部分は0なので平均輝度値に含まれない)
avrg2 = 93.9673
avrg2 = mean2(mygy(mygy>0)) % 白飛びした部分以外の平均輝度値(上の行は誤記で、こちらが正しい)
avrg3 = 108.2258
imshow(mygy); % 画像表示
  3 Comments
Atsushi Ueno
Atsushi Ueno on 21 Jun 2021
申し訳ございません。白飛びした部分以外の平均輝度値の求め方に誤記がありました。
当初黒色の輝度値は0なので平均値に含まれないと説明しましたが、これは間違いで、母数(黒色以外の画素数)も画像全体ではなく黒以外の画素数に絞らないと正しい平均値になりません。
早汰 前川
早汰 前川 on 21 Jun 2021
ご丁寧にありがとうございます.
頂いたプログラムを改良し,母数に「白飛びした輝度値」を含めず,平均輝度値を計算するプログラムを作成することができました.

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!