【コンピュータシステム学科 飯倉宏治】ケータイで夜の景色を綺麗に撮る? - ソフトウェアでハードの限界を超えてみる

夜を撮るのは難しい。携帯電話のカメラで夜を撮るのは結構難しい。もちろん、最近は携帯電話のカメラといえど高性能なものもある。しかし、少なくとも私が持っている携帯電話では、夜の景色を綺麗に撮ることは、かなり難しい。

…というわけで、今回はケータイで夜の景色を綺麗に撮ってみようと思います。

※ HDR 画像を知っている方へ: 今回は普通に HDR 画像を生成する話ではなく、Exif にシャッタースピードや ISO 感度などの撮影状況データが入っていない画像を使って、HDR 画像を生成する話です。画像から EV の変動量を計算し、それを用いて HDR 画像を生成します。

デジタルカメラで撮影した画像には、Exif という形式でシャッタースピードやセンサー感度などの撮影状況が保存されます。しかしこれはあくまでも一般的な話であり、全くそのような情報が格納されないカメラもあります。実際、私が使っている携帯電話(008SH) では撮影時の情報を Exif に保存してくれません。

いまどきガラケー!?と思われる方もいるかもしれませんが、そうです、私はガラケーのユーザーです。少し補足すると、数年前にiPhone からガラケーに機種変更しました。今のところ、これで十分かなぁ、という状態です(iPhone 用の有料アプリを開発して国内総合 Top 10、フランスで仕事効率化カテゴリ Top 10 にランクインしたのですが…スマートフォンに対する興味がすっかり無くなってしまいました)。

閑話休題。

夜の景色を美しく残すためには、HDR 画像と呼ばれるものを生成するのが一般的です。ちなみに HDR とは High Dynamic Range の略で、格納可能な情報の幅が広いことを意味します(もちろん、対応可能な明るさの幅が広いだけではダメで、情報の分解能も重要となります)。

HDR 画像を出力してくれるカメラであれば、夜の景色もバッチリ綺麗に撮影することができるでしょう。しかし 008SH にはそのような機能はなく、ごく普通の画像ファイルしか出力できません。ちなみにパソコンなどで使用する普通の画像ファイルを LDR 画像と呼んだりします(LDR は Low Dynamic Range の略です)。

LDR 画像を複数使うことにより、HDR 画像を生成することができます。LDR 画像からHDR 画像を生成するときには、撮影時の情報が必要です。そういう意味では 008SH は HDR 画像生成にまったく適さない携帯電話だといえます。しかし画像に関する知識があれば、これらの情報が無くても、計算により推定して HDR 画像を生成することができます。

この画像は本学の食堂(学食)を 008SH で撮影したものです。画像では建物内部が輝いています。でも実際には、こんなに明るくありません。いくら夜とはいえ、肉眼で見れば建物内部の様子も普通に見えます。また、暗く写っている部分はもう少し明るく見えます。夜の景色を表現する方法としては、このような表現もあるのかもしれません。でも、我々が見る景色と比べると不自然です。

LDR 画像から HDR 画像を作るためには、露出を変えながら同じシーンを撮影する必要があります。幸い 008SH でも明るさの調整機能がありますので、この機能を活用します。

このとき注意しなければならないのは、まったく同じ構図で撮影しなければならないことです。そのため、携帯電話を三脚に固定して撮影しました。もちろん通常のガラケーがそうであるように、008SH にも三脚用の穴はありません。そこで小型の万力を用いて三脚への固定を試みました。

ボタン部分は万力で押してしまうと撮影ができなくなるので、画面部分を固定することにします。

万力でおもいっきり挟んでしまうと画面が割れてしまうので、布を使ってクッション代わりにします(今回はメガネ拭きを使用しました)。どこまで万力で締めてよいのか、かなり神経を使います。ちなみにこのブログを読んで真似した結果、携帯電話が壊れてしまっても当方は責任をとりません。真似する場合は各自の責任でお願いいたします。

こんな感じで三脚に固定し、写真を撮影します。通常モード、一番暗いモード、一番明るいモードでそれぞれ 1 枚ずつ、計 3 枚撮影します。

三脚を使って撮影しても、カメラの位置が少しずれてしまいました。でも、少々のずれであれば Paint.net など、レイヤ機能を持つフリーソフトウェアで位置補正してしまえば問題ありません。ちなみに Paint.net ではレイヤをダブルクリックするとそのレイヤの透明度を調整できるので、半透明化し、下の画像と比較しつつレイヤを移動させて位置を補正すると良いでしょう。補正した画像は JPEG で保存しておきます。これは、後で使う Picturenaut という HDR 画像生成ソフト(これも無料でダウンロード可能)で読み込むためです。

画像がずれていないことを確認できたら、EV シフト量を画像から推定します。今回は、通常モードで撮影した画像を基準画像とします。よって、通常モードで撮影した画像の EV シフト量は 0 となります。

次に一番明るい画像の EV シフト量を計算します。一番明るい画像と通常モードの画像について、同じ位置のピクセル(画素)を調べます。Paint.net の場合、スポイトツールが使えます。このとき、色ウィンドウを表示させ、「拡張」ボタンをクリックすると RGB 値と HSV 値が表示されるようになります。この V が明るさの値=輝度となります。

ちなみに輝度を調べるために使用する場所ですが、通常モードと明るいモード、それぞれの画像で真っ黒および真っ白になっていない部分を選ぶことが大切です。というのは、白以上に明るい部分は情報が失われており、真っ白な部分では本当の露出が分からないからです。逆に、真っ黒な部分も適切ではありません(黒以上に暗い部分は記録できないので)。また夜の撮影では、暗い部分が多くなります。そのような場所はノイズが現れやすい部分でもあるため、スポイトツールで該当ピクセルの周辺を調べ、おおよその V の値を決定します。

このようなことを考慮し、それぞれのピクセルの輝度値を調べてみました。すると、通常モードで V=24、明るいモードで V=54 という値が得られました。これらの数値から相対的な露出の違いを求めます。

パソコンで扱う画像はガンマ補正とよばれる処理が施されているのが一般的です。露出量を求めるためには、このガンマ補正による影響を取り除かなければなりません。そのため、V の値を 0~255 ではなく、0~1.0 の値に変換します。これは得られた V の値を 255 で割れば計算できます。この値を v とすると、この v を 2.2 乗した値が該当部分の露出ということになります。

というわけで今回の例では、通常モードは (24/255)^2.2 = 0.005521… となり、明るいモードは (54/255)^2.2 = 0.03287… となります。

Picturenaut に与える EV の変化量は、露出が 2 倍になる場合は +1、 4 倍なら +2、逆に半分になる場合は -1 を与えます。この値は底を 2 とする対数により計算することができます。

以上をまとめますと…

  1. (1)通常モードと明るいモードにおける同じ場所の V の値を調査
  2. (2)それぞれの V を 255 で割って、それを v とする
  3. (3)この v を 2.2 乗して、それを v’ とする
  4. (4)明るいモードの v’ を通常モードの v’ で割り、それを s とする
  5. (5)底を 2 とする s の対数を求め、これを EV の変化量とする

 

ちなみに、Windows のアクセサリとして付属する関数電卓では 2 を底とする対数の計算ができません。そこで。底の変換公式を使って計算します。

具体的に計算してみますと、明るいモードで撮った写真の EV シフト量は、

(log ((54/255)^2.2)/((24/255)^2.2))/log 2 ≒ 2.574

となりました。これが明るいモードで撮った写真に対する Bias [±EV] の値となります。

次に、暗いモードで撮った写真の EV 変化量も求めてみます。明るいモードの時と同様に輝度を調べ、それぞれの輝度値 V=66 と V=34 を得ました。先程と同様に計算して、

(log ((34/255)^2.2)/(66/255)^2.2))/(log 2) ≒ -2.105

を得ます。

これらの値をPicturenaut に与え、HDR 画像を作ってみます。

無事、HDR 画像を作ることができました。あとは自分の記憶をたよりに、見え方や色味の調整を行います。以下に 008SHを用いて作った写真(?)を載せておきます。

一応、比較画像も掲載します。まだまだ不自然なところがあるとはいえ、通常モードで撮った画像より自然な感じになっています。

左が通常モードで撮影した画像。右が HDR 化して色味の調整等を行った画像。

長くなりましたが、Exif に撮影情報などを保存してくれない携帯電話でも、画像に関する知識とソフトウェアを使うことにより、夜の風景を綺麗な写真(?)として残すことができました。

かなり駆け足となりましたが、この記事をきっかけにコンピュータによる画像生成に興味を持つ人が増えてくれれば、と思います。

 

静岡理工科大学総合情報学部コンピュータシステム学科講師 飯倉宏治