画像圧縮率でピント合わせ

CIMG4663
月の直焦撮影の際、ピント合わせは重要な作業なのですが、これが結構面倒です。私は電動フォーカサーとか持っていないので、ヘリコイドの目盛を頼りに手動でピントを追い込む訳ですが、少しでもコンピュータの力を借りて省力化しようと思いました。
写真画像を与えることで、機械的に画像のシャープさを定量化できることが前提ですが、ここでは簡便な方法として、カメラ自体が生成するファイルサイズとの相関を利用することにします。つまり、シャープな画像は情報量が大きいので、可変レート圧縮アルゴリズムでは、圧縮後のファイルサイズが大きくなるという性質を利用する訳です。これにはあまり厳密な技術的根拠はなくて、他にもっと良い方法があれば、そちらに移行するつもりです。(でも、まあまあ使える指標だと思っています。)

ツール

私は、GUI ソフトを書くのは苦手なので、ここでは AWK や find などの UNIX 標準ツールを使うことにしました。以下では自作ツールの使い方概要を示します。実装は簡単なので、AWK や find、gnuplot の分かる人なら、簡単に真似できると思います。(本当は実装があまりにアドホックなので、恥ずかしくて公開したくないだけ。)
まず最初に、次のようなリスト(テキストファイル)を処理するスクリプトを書きます。左がヘリコイドから読み取ったドローチューブの繰り出し量です。右側が、写真の通し番号です。寒い戸外でファイル名を全部タイプするのは大変なので、番号だけを記入すれば良いようにしました。(ダッシュ(-)は、範囲を示すために使います。)

><

29.5 123-132
30.0 133-142
30.5 143-152

ここで例えば、DSC_00141.NEF というファイルは、繰り出し量 30.0mm で撮影した、ということになります。これを、次のようなフォーマットに変換します。(一度に全てを処理するスクリプトではなく、段階を経た変換をするのが UNIX 流です。(^^)

><

29.5 DSC_00123.NEF
29.5 DSC_00124.NEF
29.5 DSC_00125.NEF
.
.
.
30.5 DSC_00152.NEF

次に、このリストから、gnuplot への入力データファイルに変換します。これは簡単で、右側のファイル名をファイルサイズに変換するだけです。結果は、次のようなファイルになります。このファイル出力を size.txt としましょう。

29.5 168550
29.5 157391
29.5 164250
.
.
.
30.5 169876

(これはあくまでもサンプルで、数字はデタラメです。)
最後に gnuplot を起動し、次のようなコマンドを与えます。

$ gnuplot
gnuplot> set term png
gnuplot> set output "out.png"
gnuplot> plot "size.txt"
gnuplot> quit

これで、ドローチューブ繰り出し量と撮影結果ファイルの相関プロットグラフができるという訳です。ここから先は自動化しなくても、人間の眼力だけで評価ができるのではないか、と睨んでいます。
今週末、天気が良ければ、早速実践してみようと思っています。

おまけ

先日、レンズの絞り量と画像のシャープさの相関を見ましたが、ここでも上記ツールを流用することが可能です。exif というコマンドラインツールを使うと、EXIF データ中の絞り値を抽出することが可能なので、それを利用する訳です。

><

(右上写真は再掲です。すんまそん)

ソースコード

ソースコードというほどのものではありませんが、以下に置いておきます。