トップ «前の日記(2016-04-29) 最新 次の日記(2016-12-31)» 編集

かにの泡ぶく


2016-05-07 デジタルカメラの画像処理。

_ 思えば遠くに来たもんだ。

2002年から10年間ほど、私はデジタルカメラの設計開発並びに画質調整の支援業務をしておりました。

デジカメ本体の設計開発から始まり、メーカー製コンパクトデジタルカメラの画質調整や、携帯電話向けデジタルカメラのLSI(DSP)の画像処理アルゴリズムの設計支援、並びにそれを用いての画質調整等々です。

それらは国内国外の多くの製品に実装され、市場に出回っております。

しかしこの頃、デジカメの仕事から随分遠ざかってしまったなぁ・・・なぞと思いを巡らす今宵、最近、ついつい放置しがちになってしまうここ「かにの泡ぶく」に、少しこれら「デジタルカメラの画像処理」について、書いてみようかな・・・なんて、思い立ちました。

気が向いた時に、少しずつ書いていきます。今回は「ホワイトバランス」について、簡単に書いてみました。私が開発して、実際の業務にも使用した「ホワイトバランスシミュレーター」のお遊び版も、以下に公開しました!
Windows上で遊べます。お気軽にダウンロードくださいね。

_ 大雑把な流れ。

携帯電話に内蔵されているデジタルカメラを想定して説明してみましょう。

携帯電話に内蔵されているデジタルカメラの場合、光学系とイメージセンサ、ADコンバータ、場合によっては各種のセンサRAWレベルでの画像処理DSPが一体化した「カメラモジュール」という形で物理的に実装されている場合が多いです。

このカメラモジュールからは、所謂「RAW画像ファイル」という、ベイヤー配列(RGGB)のままのデジタルデータが出力されてきます。

この、「RAW画像ファイル」を処理し、最終画像を生成するまでの主なプロセスを超絶大雑把に書くとこんな感じになります。

細かいことを言うと、OB減算、ノイズ除去(RAW段、RGB段、YUV段)、周辺減光補正、色相彩度の最適化、周波数補正(シャープネス)・・・等々、他にも重要な処理が沢山あるのですがまずはそのへんはざっくり割愛。「画像」として見ることのできる状態にするための最低限度の処理だけ書いてみました。

最近のデジカメはRAW画像を保存することが出来るものが多いです。これら「最低限度の処理」を実現することで、あなたオリジナルの「デジカメ」(というか現像ソフトか)を作ることが出来るのです ^^)

パナソニックさんのデジタルカメラの内部信号処理でも、わかりやすく解説されております。



引用:パナソニックさんのデジタルカメラの内部信号処理より。

このブロックダイヤグラム、ホワイトバランスの前に「明るさの調整」ってのがあるのが面白いですね。デジタルゲインのことかな?

_ デジタルカメラのホワイトバランス。

まずはこれから行きましょうか。

RAW画像は、現在主流の原色センサの場合、R,Gr,Gb,Bという4つの色で構成されます。同じGなのに区別されているのは、画像データがこんな風に並んでいるからです。

GRGRGRGRGRGRGR・・・
BGBGBGBGBGBGBG・・・
・・・・・・・・・・・・・・・・・

ここでも、パナソニックさんの原色系フィルターと補色系フィルターが詳しいです ^^)

これ、RGBそれぞれが、画像1ピクセルです。撮影して得られる最終画像は1ピクセルにRGBがあってカラーになっているわけですが、デジカメのRAW画像は、1ピクセルに1色しかありません。周辺の画像を使って計算して1色から3色を得ているのです。これを「色補間処理」とか単に「補間処理」と言ったりします。

で、Grとは、Rの隣にあるG,Gbとは、Bの隣にあるGを指しています。

色補間処理により生成されたRGB画像に対してホワイトバランス処理が行われます。色補間処理は説明が高度になるので、また後日ゆっくり書きたいと思いますので、今日のところは「RAW画像を色補間してRGB画像になった」ということでよろしくです ^^)

で、この、RGB画像なのですが、RGBと言っても恐ろしく色の偏った画像なんです。イメージセンサ自体は色を感知する能力はありませんので、RGBの信号を得るために、イメージセンサ上の画素(ピクセル)毎に、赤、緑、青のカラーフィルターを貼り付けます。赤が貼りついている画素は、赤の信号が得られるというわけですね。で、この、フィルタの色毎の透過率の差や、イメージセンサの分光感度特性等の影響で、RGBそれぞれに感度差が生じます。また、撮影時の照明条件(照明の色温度やスペクトル)によっても色が偏ります。オレンジ色っぽい光を放つ裸電球の下で白い紙を見ると、オレンジっぽく見えますよね? これを白くするのが、「ホワイトバランス」の役割です。

_ ホワイトバランスの動き。

画像データに対する処理自体は、極めて単純です。R.G.Bそれぞれの画素値にある係数を乗算して、白が白になるようにするだけです。

例えば、ある条件で撮影した画像の中にある白(グレイでも良いんですが)画素値が、RGBの順番で 120、150、75 だったとしましょう。白であれば、R=G=B となりますので、一番明るいGを基準にして、RとBの値をGと同じにするための乗数を求めます。

R/G=0.8
B/G=0.5

ですので、Rには1.25、Bには2.0を乗算することで、R=G=B=150 となり、白になります。 簡単ですね ^^)

このR/G、B/Gを「感度比」と呼ぶことにしましょう。

_ 感度比をどうやって求めるか?

私がやっていた手法は原始的かつ直感的で、実際に白基準板を撮影して、RAW画像を得てそれを自作のシミュレーターにかけて調べるという方法を取っておりました。

上でも書きましたが、白い紙でもオレンジ色っぽい光を放つ裸電球の下で白い紙を見ると、赤が強く撮影されます。また、真っ白い光を放つ蛍光灯下で撮影すると、裸電球の下で撮影した画像よりも赤が低下し、青が強くなります。

これは、照明光の「色温度」というものが影響しているためです。

またまたパナソニックさんのお力を借りて ^^) 色温度とホワイトバランス調整が参考になります。

よって、実際の画質調整では、太陽光下の屋外や、色温度を可変できる照明装置を使って、いくつかの色温度で白基準板を撮影します。

具体的な数値で言うと、オレンジ色の裸電球だと2700Kぐらい、白色蛍光灯で4200Kぐらい、太陽光で5500Kぐらい、昼光色蛍光灯で6500Kぐらい、晴天下の日陰で8000Kぐらいと、かなりの幅があります。

これらそれぞれの色温度で感度比を取って、ホワイトバランス処理に使います。

さてここで問題です。では、デジカメ側では、今、見ている光が、どの程度の色温度であるのかどうやって知るのでしょうか?

実はここが最大の問題です。

_ 固定ホワイトバランス。

デジカメで撮影しようとしている光源の色温度を、撮影者に教えてもらう(設定してもらう)のが、この固定ホワイトバランスです。

デジカメのホワイトバランスのメニューを見ると、「AUTO」以外に、太陽マーク、曇りマーク、裸電球とか、蛍光灯のマークがあると思います。この「AUTO」以外が、固定ホワイトバランスです。

太陽マークに合わせて撮影すれば、デジカメは「光源の色温度は5500Kぐらいだ」と、わかりますので、5500Kの感度比でホワイトバランス処理を行います(実際には、5500Kを中心とした狭い範囲のオートホワイトバランス動作になる仕様であることが多い)。

これはデジカメ側にとっては非常に安心できるのですが、撮影者側からするといちいち面倒くさいですね。それに、照明光に関する基礎的な知識が必要となります。

_ オートホワイトバランス。

そこで、ほとんどのデジカメには「オートホワイトバランス」という仕組みがあって、ほとんどの場合、撮影者は光源の色温度なぞ気にせずにこのオートホワイトバランスモードで撮影します。

では、どうやってデジカメは、見ている画像情報だけで照明光の色温度を特定しているのでしょうか?

実はここ、すごく高度な処理が行われているのです。まるで推理小説の結末を予測するかのようなアルゴリズム ^^)

白い紙を裸電球の光で見ているからオレンジ色になっているのか、オレンジ色の紙を太陽光下で見ているからオレンジ色になっているのかを、見定めないといけないわけです。当然ですが、前者であれば白にしなければなりませんし、後者であれば白にしてはいけないわけです。

デジカメメーカーのノウハウがモノを言う部分でもあります。世間に出回るデジカメのホワイトバランス処理は、まさに百人百様です。

私もこの、オートホワイトバランスのアルゴリズム設計は随分手がけました。実際に開発中のデジカメ(ブレッドボード評価環境)をお借りして、暗室に籠っていろんな色温度でRAW画像を採取します。あとは、かにこむオリジナル開発の「ホワイトバランスシミュレータ」で、アルゴリズム検証を行います。

_ ホワイトバランスシミュレータ。

私が開発した「ホワイトバランスシミュレータ」を紹介したいと思います。Windowsの32bitアプリです。あんまりOSに依存する処理は使ってませんので、7〜10で問題なく動作すると思います。

こちらからダウンロードしてください。AWB_Sim020.zip(1,446,692 バイト)

zipを解凍して出来たファイル一式(フォルダでまとまってるハズです)を、PC内のどこか適用なところに置いていただければOKです。AWB_Sim.exe があるのと同じ階層に作業ファイルを作りますが、レジストリはいじりません。お使いのOS(PC)に余計なことはしませんので、ぜひお気軽に遊んでみてください。遊び終わったら、フォルダ毎捨ててもらえればOKです。

インターネットで公開するにあたり、いくつか仕様変更してあります。

実際には、開発中のデジカメに合わせてRAW画像ファイルをそのまま読むのですが、今回はJPEGファイルを読み込むようにしました。よって、OB減算機能は削除してあります。

また、アルゴリズム評価用に、アルゴリズムを搭載した外部モジュールを呼び出して色温度を得るという最も重要な機能については、削除してあります。(外部モジュールには、画像情報だけでなく、撮影条件(撮影時間、EV値等々)も引き渡せるようになっております。)

今は、画像のG値のみを見てホワイトバランス対象となるセルを取捨選択するという極めて簡便な仕様となっておりますが、実際の調整では、撮影条件(EV値等)を勘案しながら黒体輻射から類推される感度比曲線より、白を含むセルを類推して取捨選択する等のアルゴリズムを設計し、それを外部モジュールに実装、試行錯誤で評価します。

とは言え、分割されたセルの感度比を見たり、手動で感度比を設定してホワイトバランスの動作を見てみたりと言ったことは出来ますので、ホワイトバランスがどういうものなのか、遊んでみる分には結構楽しめると思います。

サンプルで入れてあるJPEGファイルは、RAW画像ファイルをOB減算、RGB補間したものをイメージした画像です。これでいろいろ遊んでみてください。

_ お仕事絶賛募集中〜 (^^)/

「かにこむ」では、デジタルカメラの画像処理設計や画質調整支援をはじめ、その他各種アプリケーション・システム開発のお仕事をお待ちしております。

私でなにかお手伝いできるようなことがありましたら是非! 電子メールなら master@kani.com (@(全角) を、@(半角) に置き換えてくださいね) まで、または こちらのフォーム から、お気軽にお問い合わせください。

詳細はこちら(かにこむで出来ること)をご覧ください。

よろしくお願いします!


もっと読みたい奇特なかたは、↓の読みたい月をクリックしてね。
2000|04|
2005|01|02|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|08|09|10|11|12|
2014|01|03|04|12|
2015|09|12|
2016|04|05|12|
2017|12|
2018|09|12|
2019|02|03|10|12|
2020|04|12|
2021|12|
2022|12|
2023|03|12|
2016年
5月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31


最新ツッコミ

  1. 青木@管理人 (10-09)
  2. こいち (10-09)
  3. 万年初心者 (04-01)
  4. 青木@管理人 (03-31)
  5. 万年初心者 (03-31)



  • 12月31日
    永劫回帰?!
  • 03月14日
    ランチに超高級カップ麺を食す。
  • 12月31日
    無為自然。
  • 12月31日
    今年もあと少し・・・
  • 12月31日
    大晦日。
  • 04月29日
    PCR検査陽性者数っていつの陽性者数?
    • 1. 日々の陽性者数はほぼほぼ意味無い。
  • 04月23日
    コロナ禍に思うこと。
    • 1. よんどころない話です。軽く読み飛ばしてください。
  • 04月22日
    買うとおカネが貰える?!
    • 1. 原油の価格がマイナスってナニソレ?!
  • 04月20日
    コロナ禍に思うこと。
    • 1. せめてもの報い。
  • 12月31日
    生きるということ。