概要
学部1年生の頃に開発したソフトウェアの書き起こしです.
星景写真:星と地上の景色が一緒に写っている写真
(星を流すもの,流さないものがあるが,ここでは流すものを扱う)
星景写真の撮影法の1つに,比較明合成という方法があります.カメラを三脚に固定し,同じ構図で数百枚の写真を撮って,ソフトウェアで各ピクセルの輝度のmaxをとり1枚の画像にするという方法です.
合成語に手直しすることを考えると,jpgファイルより,データ量の大きいrawまたはtiffファイルで合成する方が好ましいです.
しかし,rawやtiffでこの合成を行うソフトウェアは,有償のプロプライエタリなソフトウェアしか見当たりませんでした.気に食わなかったので,自らOSSとしてソフトウェアを作成しました.
アルゴリズム
ヘッダ等の,ピクセル以外のデータについては,1枚目のデータをそのまま利用するものとする.そのため,1枚目の全データを出力ファイルとして出力し,それからピクセルデータの合成・書き込みを行う.
また,画像データ1枚は数十MBほどのサイズであり,愚直に全ての画像データを同時にメモリに載せることはできない.各画像ファイルに対して処理をするのではなく,各ピクセルに対して処理を行うことでこれを解決する.
Input 画像ファイル a0, a1, ... , an
Output 画像ファイル out
a0 の全データを out としてwriteする.
ピクセルについて,左上から右下まで繰り返し:
p番目のピクセルに注目しているとする.
a0~anのp番目のピクセルの数値を読み込み,輝度が最大となるピクセルの値を得る.
最大値をoutのp番目のピクセルに書き込む.
ソースコード
当時はC言語しかまともに使えなかったので,Cで書きました.
https://github.com/ryhoh/tiffcomp
使い方
$ ./a.out (画像1のパス) (画像2のパス) ...
まとめ
非圧縮なtiffファイルで比較明合成ができるようになりました.このソフトウェアのおかげで当時は捗りました.
写真から遠ざかっていたため長らく放置状態でしたが,Thetaで遊ぶようになったので,また使う機会があるかもしれません.