ぶれたりピントが外れたりした写真を修正する

 風や振動や手の震えなどが原因で、ぼやけた写真を撮ってしまったという経験は誰にでもあるだろう。しかしこのデジタル時代には、もう絶望する必要はない――ぼやけたりかすんだりした写真でも、撮ってしまった後に修正することができる。このような修正を行なうことができるツールはLinux用にも複数存在する。

 カメラの揺れによるブレやピント外れを取り除くためには、デコンボリューションと呼ばれる処理を施せば良い。デコンボリューション処理の基となっている数学的な理論について知りたければ、まずはWikipediaで紹介されている参考文献を参照すれば良いだろう。詳細な情報を知りたいだけ知ることができる。一言で言えば、FFT(高速フーリエ変換)を画像に対して行いブレを抽出し、それを補正することによって画像を本来の形に変換するということだ。この処理はCPUを激しく使用するが、ぼやけた写真を修正するためにはこれ以上に優れた方法は存在しない。

Unshake

unshake1_thumb.jpg
Unshake

 まず手始めに行うことのできるもっとも簡単な方法は、Mark Cahill氏による Unshake を使用することだろう。Unshakeは小さなJavaアプリケーションで、処理を高速に行うために役立つ当て推量を行うためのオプションが数多く用意されている。最新版はバージョン1.5で、実行にはJava 2かそれ以降の版のJavaが必要だ。Unshakeはオープンソースではなく、ライセンスで商用利用が禁止されている。

 Unshakeの配布ファイルをシステム上のどのディレクトリでも良いので展開したら「./unlaunch.sh」を実行してUnshakeを起動しよう。Unshakeのユーザインターフェースでは、上部に各コントロールがあって、その下に状況表示ウィンドウがあり、一番下にファイル選択用ウィジェットがある。写真を開いたらまず最初に、画像中のもっとも気になる部分だけを表示させるように写真のウィンドウの大きさを調整しよう。これは重要な操作なのだが、操作画面にはその説明がない。不適切な場所を表示させている場合、Unshakeがそこをブレだと誤認して、修正処理をやりすぎてしまうことがある。

unshake2_thumb.jpg
Unshakeによる処理結果

 ウィンドウを適切に設定したら、Estimate(見積もり)ボタンをクリックすれば、Unshakeが処理にかかりそうな時間を推測してくれる。その際、ブレの度合いと修正品質のパラメータを調整すれば、推測結果が変わる。修正結果を見るには、DeBlur(ブレをなくす)ボタンをクリックすれば良い。Unshakeが画像の修正を行って、結果を新たなウィンドウを開いて表示するので、その画像を保存することもできる。

 Unshakeは、修正を適用すべき度合いを自ら判断する。実際の処理時間は、Unshakeの判断次第で大きく変わる。Time(時間)コントロールを使えばUnshakeが行う処理に、より長い、あるいははより短い時間をかけるように調整することができる。デフォルトの設定である「x1」は、UnshakeがEstimate(見積もり)で推定した時間内で変換を行うことを意味する。より精細な分析を行うようにしたい場合は、Time(時間)のパラメータは「x100」まで調整することができる。

 デフォルトの設定では、1.3メガピクセルの画像の場合で40秒から50秒が妥当な見積もり時間だ。なおCahill氏はUnshakeのサイトで、実際の処理時間が見積もり時間の「x100」(100倍)近くまでかかったことはないと述べている――単に、プログラムが必ず終了するように上限として用意しているだけとのことだ。

Refocus

 GIMPには、Unshakeと同じ類いの修正を行うサードパーティ製のプラグインが2つある。どちらもオープンソースだが、どちらも現在は活発な開発は行われていないようだ。

 1つは Refocus で、正式にはバージョン0.9.0となっている。しかしこのバージョン0.9.0は2003年にリリースされたものなので、新しいバージョンのGIMPとの互換性を向上させるためのパッチが他の複数の開発者たちから独自にリリースされている。Richard Lemieux氏とPeter Heckert氏が、それぞれ各自のパッチを当てた版のウェブページを保守している。なおDebianとUbuntuのパッケージマネージャには、Lemieux氏のバージョンがRefocus 0.9.1として含まれている。

 RefocusはGIMPの中でFilter(フィルタ)→Enhance(拡張)メニューから起動する。Refocusには5つのパラメータとプレビューウィンドウがある。パラメータはデコンボリューション処理の数学的な理論に関わるので説明するのは難しいが、設定をいろいろ試して遊んでみると良いだろう。大まかに言えば、Radius(半径)コントロールとMatrix Size(行列の大きさ)コントロールはどこまで小さいブレを検知するのかを決定するものであり、Gauss(ガウス)、Correlation(相関)、Noise(ノイズ)の各コントロールは滑らかさやブロックノイズに影響を与える。

 試してみたところ、RefocusはUnshakeよりも劇的に高速で、Unshakeでは30秒から40秒ほどかかる画像のブレを修正するのに5秒もかからなかった。ただし当然ながらUnshakeの特長は、独自の自動調整を行って高品質な出力を生み出すという点だ。

Iterative Refocus

 もう一つの便利なGIMPプラグインは Iterative Refocus(Refocus-it) だ。Refocus-itの最新リリースは2004年にリリースされた2.0.0だが、私が調べてみた限りRefocusとは違って最新版のGIMPとの互換性の保持には誰も取り組んでいないようだった。

 Fedoraではこのプラグインがgimp-refocus-itパッケージとして提供されているが、それ以外のディストリビューションのユーザはおそらくソースからコンパイルする必要があるだろう。とは言っても嬉しいことに簡単に行うことができる。GIMPの開発ライブラリがインストールされていることを確認したら、定番の3ステップ「./configure; make; make install」を実行すれば良い。なおUbuntu 7.10では/usr/local/share/help/Cと/usr/local/share/help/imagesというディレクトリを作成する必要があった。この問題を修正するにはMakefileを変更しても良いが、ディレクトリを作成した方が早いだろう。

 Refocus-itも、一度インストールした後はGIMPのFilters(フィルタ)→Enhance(拡張)メニューの中に表示されるようになる。Refocus-itには、画像内のモーションブラーの方向やサイズを指定することができるオプションを含め、Refocusよりも多くのオプションがある。それによりブレの修正がよりうまくできるはずだが、やはりいつもうまく行くわけではない。というのも、ブレの最悪のケースは直線的なものではなく、複数の方向を持つものや環状になっているものだからだ。それでも画像を拡大してブレの方向や長さを見極めることができるので、その分だけブレを取り除くことがうまくできるはずだ。

 Refocus-itはその名が示す通り、毎回少しずつの修正を繰り返し行う。その他の設定に関してと同様、何度繰り返せば画像がもっとも向上するのかについての判断は主観的な印象によって異なることが多いが、Preview(プレビュー)ボタンを使って何度か確認すれば、出力の品質についての感じをつかむことができるだろう。

魔法の解決策はない

 映画の中で、ぼやけためちゃくちゃな画像から、極めて明瞭な犯人の顔写真や、ヒーローが追跡すべき車のナンバープレートを導き出すといった、あり得ないほど正確な「コンピュータによる画質向上」(のように見せかけたもの)が行われるのをおそらく見たことがあるだろう。現実では画質向上技術はまだそこまでは優れていないものの、それでもデコンボリューションによる画質向上にはきっと驚かされることだろう。

 以上の3つのアプリケーションはどれも素晴らしい結果を生み出す。もっとも高速なのはRefocusだが、個人的にはUnshakeでもっとも明瞭な結果を得ることができたと思った。ただ、3つのアプリケーションのうちの1つがフリーソフトウェアではなく、フリーソフトウェアである他の2つは活発に保守されていないという状況は残念に感じる。とは言え使用する数学は広く理解されているものなので、もしかすると他のプログラマが作業をやめたところから引き継いで、これから画像編集を行う人々のためにさらに優れた画質向上技術をもたらしてくれる人が現われるかもしれない。

Linux.com 原文