フィルターのクリア

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

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

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

採用された回答

Atsushi Ueno
Atsushi Ueno 2021 年 6 月 6 日
編集済み: Atsushi Ueno 2021 年 6 月 21 日
実際に動かしてみます。繰り返しを避ける為グレースケール画像を処理しています。添付画像はリンク先の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 件のコメント
Atsushi Ueno
Atsushi Ueno 2021 年 6 月 21 日
申し訳ございません。白飛びした部分以外の平均輝度値の求め方に誤記がありました。
当初黒色の輝度値は0なので平均値に含まれないと説明しましたが、これは間違いで、母数(黒色以外の画素数)も画像全体ではなく黒以外の画素数に絞らないと正しい平均値になりません。
早汰 前川
早汰 前川 2021 年 6 月 21 日
ご丁寧にありがとうございます.
頂いたプログラムを改良し,母数に「白飛びした輝度値」を含めず,平均輝度値を計算するプログラムを作成することができました.

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

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeコンピューター ビジョンと Simulink についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!