デジタルカメラ画像動体透明化プログラム

概要

 このプログラムはフルオート(コンパクトタイプ)のデジタルカメラでスローシャッター効果を擬似的に行うためのものです。 あくまでも擬似的に行うものなので、実際のスローシャッターと同じものではありません。 複数枚の写真で1枚の写真を作り出すものですから、全く同じ場所で同じ撮影方法、同じアングルが必要です。 詳しくは撮影方法を参照してください。

 一応、いま出来ることとして人のいる場所の無人化と水が流れているような写真が出来ることが確認されています。


使い方概要

簡単な使い方

撮影方法、写真の選び方

 まず、このプログラムが必要とする画像がどんなものか説明します。

 このプログラムは動かないものは同じ場所に必ず写っていることが重要です。 そのため撮影には必ず同じアングルで行う必要があります。 このことは三脚が必須であることを意味しています。 また、三脚に付けてもヤワな三脚だとシャッターを押す動作でカメラがずれる可能性が大きいです。 そういう場合は三脚に固定して、その上セルフタイマーで撮影するなど細心の注意を計ってください。

 同じことに撮影条件を同じにする必要があります。これは撮影条件が違うと、同じものが同じに写っていても計算段階で色が違う等で同じものと判断しなくなるためです。 このため、ストロボを使う場合は全てに使う、使わない場合は全て使わない、光の状態が変わらないうちに撮影する(晴れと曇り等)、などにも注意を払ってください。

 その上で多くの写真を撮り、出来の良いものをピックアップして処理するのが良いです。

 写真の選び方は撮影条件が同じで、同じ写り方をしているものを選んでください。 その場合、なるべく多くの写真を選んだ方が綺麗に処理できますが、必要以上に多く選ぶとアングルズレや撮影条件の違いなどでピントが甘く見えてしまいます。 適当な写真を適当な枚数選んで、適当な処理を行えば(この選ぶのが大変ですが)、とても綺麗に処理できます。


画面とメニュー

画面構成

 このソフトは以下の表示があります。

 メニューの真下のバーに、左から計算方法選択リスト、パラメータ入力、計算中の表示チェックボックスがあり、その下に計算中の画面、最下部に状態表示ステータスバーがあります。

メニュー

 メニュー構成と機能は以下の通りです。

ファイル(F) - 選択(E)

 ファイルの選択のみを行います。 選択を行っただけでは計算は行いません。 これは同じファイルで計算方法やパラメータをいろいろ変えて計算しやすくしたためです。

ファイル(F) - 保存(S)

 計算した結果をファイルに保存します。 計算が完了したときのみ選択できます。

ファイル(F) - 終了(X)

 プログラムを終了します。 計算完了後に保存していない場合は保存するか聞いてきますが、それをあてにせず保存をしてから終了するようにしてください。

計算(C) - 実行(R)

 選択されたファイルで、指定の計算方法、パラメータで計算を行います。

計算(C) - 中止(S)

 計算を中止します。 中止した場合は再開することが出来ませんので、計算の実行を行い、最初から計算してください。

ヘルプ(H) - 目次(C)

 ヘルプの目次を表示します。

ヘルプ(H) - バージョン情報(A)

 プログラムのバージョン情報を表示します。 問い合わせ時に名称とバージョンが必要となりますので、ここに書かれたものを使用してください。

 おまけとして空きメモリがどれくらいあるかの表示を付けました。 まず足りなくなることはないと思いますが、参考にしていただければと思います。

計算中の画面とメニュー

 計算中はほとんどのメニューとパラメータの設定が出来なくなります。 これは計算中に不用意に変えられると計算がおかしくなるためです。

 もし計算中に計算方法やパラメータを変えたくなったときは、いったんメニューの計算(C) - 中止(S)で計算を中止し、計算方法やパラメータを再設定してもう一度最初から計算を行ってください。

 なお、中止しないとこれらのメニューや機能は選択できなくなっていますので、不用意に変えてしまう危険性はありません。


計算方法とパラメータ

計算方法とパラメータ

 おすすめは色空間密集平均値ですが枚数が少ない場合は色空間最密集値も使えるかもしれません。 また、流れる水のような場合は通常平均値で計算してください。

 最密集値と密集平均値は最初に思いついたものですが、後から思いついた色空間が付いた方が成績が良さそうです(多くの画像で試した訳じゃないですが)。

通常平均値

 RGB それぞれの色を個別に平均したものです。 単純に平均を取っていますので、人物等を消すのは苦手です。 ただし流れる水を表現する場合などは最適です。

最密集値

 RGB 個別に距離を計算して、もっとも密集した値そのものを計算結果とします。 画像が少ないときなどに威力を発揮しますが、平坦な絵になりがちです。

密集平均値

 RGB 個別に距離を計算して、密集度にあわせた平均値を計算します。 ある程度の画像枚数があるときに威力を発揮します。

色空間最密集値

 RGB をまとめた距離を計算して、もっとも密集した値そのものを計算結果とします。 枚数が少ないときに威力を発揮します。

色空間密集平均値

 RGB をまとめた距離を計算して、密集度にあわせた平均値を計算します。 ある程度の画像枚数があるときに威力を発揮します。

パラメータ

 距離が関係する場合、その距離をどれくらい重要視するかがこのパラメータです(距離の関係しない通常平均値は、パラメータは使っていません)。 値が小さくなればなるほど(0に近づけば近づくほど)距離を重要視しないで計算しますし、大きくなれば大きくなるほど距離を重要視します。

 ファイルが少ない場合は重要視した方が動いているものは消せますし、ファイルが多い場合はそれほど重要視しなくても良いでしょう。 私の場合、ファイルが少ない(5から10程度)場合は1.5位で 計算し、多い(15を越える)場合は0.5位にしています。 ただ、私自体がこのパラメータを指示できるほど使いこなせていませんので、いろいろ試行錯誤をして最適な値を見つけてください。

 距離計算は RGB個別の場合は値の絶対値、色空間の場合は座標としてみた距離で計算していますが、その距離のパラメータ乗の逆数を密集度合いとしています。

通常平均値

 各画像の同じポイントの RGB を個別に平均を取ったものです。

 ただ単純に平均を取ったものですから、動いているものを消す場合は非常に多くの画像(40枚以上)が必要になり、実用的ではありません。 これが活躍する場面はスローシャッターで滝などを撮したときの流れる水を計算で擬似的に作るものでしょう。 この方法では、20枚程度でそこそこ見られる流れる水を作り出すことが出来ます。

 写真は多ければ多いほど良いのですが、余り多いとフレーミングがずれたやつや、撮影条件が変わったやつなどが混ざると思いますから、多く撮ってある程度チョイスして使うのがベストだと思います。 その場合でも最低20枚ほどは欲しいですね(そのため、撮影は40枚以上撮るのがベスト)。

 この計算方法のみ距離が関係してきませんので、パラメータが設定されていても無視します。

最密集値

 各画像の同じポイントの RGB を個別に距離を計算し、一番密集した場所にあるポイントの値を計算結果とする方法です。 ただ、RGBを個別に計算しているため、ある画像にあった色が必ず選択される訳ではありません。Rはこの画像、Gはこっちの画像、Bはまた別の画像から選ばれ、それがどの画像にも属さない色になる可能性もあります。

 この計算方法はプログラミング初期に思いついたもので、実際計算させると余り良い結果を出しません。 動いている人などを消すには色空間を使った計算方法を使う方をおすすめします。 実際これで計算してみるとベッタリした色使いになり、写真っぽくなくなります。

 パラメータは2画像の(RGBを個別に)値の距離計算に使用します。 密集計算は以下のように行っています(p1, p2 は画像1,画像2のある値を示し、paramはパラメータです)。 +1しているのは分母が0にならないようにするためです。

mass = 1 / ( ( | p1 - p2 | + 1)param)

密集平均値

 各画像の同じポイントのRGBを個別に距離を計算し、密集度にあわせた重み付けして平均を取ったものです。

 重み付けをしての平均ですから、密集したところは重く、離れている値は軽くして計算します。 そのため、密集したところがより強く出てきます。

 この計算方法はプログラミング初期に思いついたもので、実際計算させると余り良い結果を出しません。 動いている人などを消すには色空間を使った計算方法を使う方をおすすめします。 実際に計算してみると結構良さそうに見えますが、やっぱり色空間を使ったものの方が綺麗です。

 パラメータは2画像の(RGBのどれかの)値の距離計算に使用します。 密集計算は以下のように行っています(p1, p2 は画像1,画像2のある値を示し、paramはパラメータです)。 +1しているのは分母が0にならないようにするためです。

mass = 1 / ( ( | p1 - p2 | + 1 )param)

色空間最密集値

 各色要素RGBを三次元空間のXYZに見立て、ある画像の点を色空間のポイントとして他の画像の同じ点を色空間での距離で計算し、もっとも密集した場所の値を計算値とするものです。

 RGBまとめて考えるので、この計算の値はどれかの画像の値そのままを使うことになります(もちろん場所によってどの画像を使うかは変わってきます)。 そのため、この計算方法は破綻が少ないのですが、別々の画像を寄せ集めて作るのでグラデーションなどがあるところで色飛びや色混ざりが起こる可能性があります。

 画像枚数が少ない場合などに使えるのではないかと思いますが、私は色空間密集平均値の方が良い画像になると思っています(枚数が少ない場合はパラメータを大きくして対処します)。

 パラメータは2画像の色の空間座標での距離計算に使用します。密集計算は以下のように行っています(p1, p2 は画像1,画像2を示しp1.rは画像1のRの値他はそれに準じた値、sqrtは平方根です、paramはパラメータです)。 +1しているのは分母が0にならないようにするためです。

mass = 1 / ( ( dist(p1, p2) + 1 )param),
dist(p1, p2) = sqrt( ( p1.r - p2.r )2 + ( p1.g - p2.g )2 + ( p1.b - p2.b )2)

色空間密集平均値

 各色要素RGBを三次元空間のXYZに見立て、ある画像の点を色空間のポイントとして他の画像の同じ点を色空間での距離で計算し、密集度にあわせた平均値を計算したものです。

 RGBまとめて計算するため、変な値が出にくく、またグラデーションなどでも平均値で出しているためある程度破綻せずに計算できます。 私は動いている人などを消す用途ではもっぱらこの方法を使っています。

 パラメータは2画像の色の空間座標での距離計算に使用します。密集計算は以下のように行っています(p1, p2 は画像1,画像2を示しp1.rは画像1のRの値他はそれに準じた値、sqrtは平方根です、paramはパラメータです)。 +1しているのは分母が0にならないようにするためです。

mass = 1 / ( ( dist(p1, p2) + 1 )param),
dist(p1, p2) = sqrt( ( p1.r - p2.r )2 + ( p1.g - p2.g )2 + ( p1.b - p2.b )2)


雑誌収録について

 このソフトを開発して自分のコンピュータの遅さに改めて気付きました。 そして多分仕事に使っている人はこのコンピュータより速いコンピュータを使い物にならないと思って廃棄しているのではないかとも思いました。 ということで、雑誌収録等の場合は私に速いコンピュータを提供することと引き替えに許可したいと思います。 速いコンピュータの条件は下記に相当します。

 雑誌収録等はどこまで含まれるかというと商用でこのソフトを紹介、収録することとし、雑誌収録、紹介、商用WEBでの紹介などが含まれます(商用ソフトに添付などはまず無いとは思いますが、あった場合はこれに準じます)。

 商用であっても私のソフトサイトへのリンクはこれに当たりませんし(ただし紹介文を入れたり、ソフト単独のhtmlへリンクする場合は応談です)、個人で紹介する分には紹介文を入れたとしてもフリーとします(ただし教えていただければ、見に行きますし、嬉しいです)。

 以上、よろしくお願いします。なお、複数の雑誌から依頼があった場合、この条件が変わるかもしれません。 事前にメールで確認してください。

 もちろんこの条件は雑誌などに収録する条件ですので、収録した雑誌からの取り扱いはフリーソフトとしてください。

 Halo記:おお、私もデジタルカメラが欲しいぞ、どこかでC-2000ZOOMが余っていたら私にください。(あるわけないだろ>自分)


copyright (c) 1999 and