貧者の赤道儀 (The Poor Man's Equatorial) - (3) スクリプトの準備

撮影フレームの赤緯が正確に判ったので、後は位置合わせして重ねあわせる処理を行う。これを自動化するためにシェル・スクリプトを用意する。

シェル・スクリプトからはNonaとImagemagickやGraphicsmagickを呼び出す。が、Nonaは処理条件などをファイルで指定する必要が有るので、Nona用のファイルも準備する必要がある。Nona用のファイル(.pto)のひな形は、前回にHuginで変形させたときにセーブしたファイルを使うと良い。下のように変数を書き換えられるように編集しておく。

# hugin project file
# hugin_ptoversion 2
p f2 w6236 h7863 v92  E-0.0291464 R0 S0,6236,4862,7765 n"TIFF_m c:LZW"
m g1 i0 f0 m2 p0

# image lines
#-hugin  cropFactor=1.5
i w1990 h2985 f0 v30.0 Ra0 Rb0 Rc0 Rd0 Re0 Eev-0.02915 Er1 Eb1 r0.26 p-36.04250367 yYAWANGLE TrX0 TrY0 TrZ0 j0 a0 b0 c0 d0 e0 g0 t0 Va1 Vb0 Vc0 Vd0 Vx0 Vy0  Vm5 n"INPUTFILENAME"

k i0 t4 p"-17 2701 2063 2701 2051 3003 -29 3024"
  • pの行、wとhとvは変形後の寸法と画角。今回の撮影は水平画角32°だったが、前後に1時間15分づつ撮影しているので、それぞれ20°くらい足して72°となる。これをEquirectangularに変形させると少し広がって92°となった。実際にはHuginのプレビュー画面で確認するしか無い。
  • iの行、wとhは入力画像の大きさ。pは算出した赤緯。yはヨー(首振り)角度、nは入力ファイル名で、後から書き換えて使えるように適当な文字列を埋め込んでおいた。


余所のカメラは知らないが、ワタシが使っているカメラのインターバロメータ撮影では、例えば9秒間隔と設定すると、9秒間隔で露光が開始される。この9秒を角度に換算して、先ほどのヨー(首振り)角度として使う。角度とファイル名の書き換えを行うシェル・スクリプトをでっちあげる。

#!/bin/bash

for i in 0 1 2 3 4 5 6 7 8 9; do
  for j in 0 1 2 3 4 5 6 7 8 9; do
    for k in 0 1 2 3 4 5 6 7 8 9; do
      # projection to equirectanglar
      n=$((${i} * 100 + ${j} * 10 + ${k}))
      y=`echo "scale=8; (577 - ${n}) * 9 * 0.25 / 60" | bc`;
      f=DSC_`printf %05d ${n}`.tif;
      echo ${f} ${y}; 
      cat nona.pto.template | sed "s/INPUTFILENAME/${f}/" | sed "s/YAWANGLE/${y}/" > nona.pto;
      nona -o ${f}.Nona.tif nona.pto;
      convert DSC_`printf %05d ${n}`.tif.Nona.tif0000.tif -repage +0+0 DSC_`printf %05d ${n}`.tif.Nona.tif0000.tif ;
    done;
    convert DSC_00${i}${j}?.tif.Nona.tif0000.tif -background none -compose Lighten -flatten DSC_100${i}${j}_Nona.tif;
  done;
  convert DSC_100${i}?_Nona.tif -background none -compose Lighten -flatten DSC_2000${i}_Nona.tif;
done;

convert DSC_2000?_Nona.tif -background none -compose Lighten -flatten DSC_30000_Nona.tif


999枚の元画像はDSC_00000からDSC_00998までにリネームしてある。10枚づつ変形させて比較明合成、10個1を10枚合わせて比較明合成、100個1を10枚合わせて比較明合成して最終出力としている。PCに搭載しているメモリの量にも拠るだろうが、10枚づつぐらいが安全だろう。

比較明合成ではなく、平均化の場合は次のようにする。ビット深度とかは好きにすれば良い。

gm convert -average -define tiff:sample-format=ieeefp,tiff:bits-per-sample=64 DSC_2000?_Nona.tif DSC_30000_Nona_Average_64.tif