サーマル画像とカメラ画像の重ね合せ方法
2017年5月21日 - 未分類
Lepton ModuleやSeek Thermalで熱画像が撮影できます。
しかし、熱画像は画素も粗く、熱分布しか映らないので、どこがどこなのかよく分かりません。そこで、カメラ画像と合成して、どこの場所の温度なのか分かるようにします。
カメラ画像の上に、サーマル画像を拡大、移動して重ねてみました。
なんとなく、合っているような気もしますが、もっと正確に一致させる方法を考えてみました。
基本的に、2枚の画像の重ね合わせはアフィン変換でできます。アフィン変換のマトリックスを求めればいい訳です。アフィン変換のマトリックスは3行3列なので、3点の一致点が分かれば算出できます。Pythonのコードでは、OpenCVを使えばgetAffineTransform
で簡単にできます。
import cv2
import numpy as np
img = cv2.imread('lena.jpg',1)
rows,cols,ch = img.shape
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv2.getAffineTransform(pts1,pts2)
dst = cv2.warpAffine(img,M,(cols,rows))
cv2.imshow('input',img)
cv2.imshow('output',dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
では、どのようにすれば正確な3点の一致点を得ることができるでしょうか?
点熱源が3つ必要になります。100円ライターでもいいですが、できれば、固定して使える点熱源がいいでしょう。いろいろ探してみました。やはり電子的に熱を発生させるほうが使いやすそうです。
AMAZONに電子ライターというものが売られていました。1個、725円で、1回の充電で100回ほど、タバコに火が点けられるというものです。これを3個購入しました。
三箇所に両面テープで貼りつけます。電子ライターを購入して分かったのですが、10秒で自動的に電源が切れる仕組みのようです。なので、3つ同時に点けることができませんでした。仕方がないので、ひとつづつ点火して3枚の画像を撮影して、1枚に合成しました。最初に、電子ライターを付けない状態での背景画像を撮影して差分を取って、合成です。
ノイズも映っていますが、点熱源の位置は判別できます。二つの点で映っていることころがありますが、これは、消火後にケーツに入った状態でも、熱が残っているからです。上の点が正しい位置です。手動で点熱源のピクセル位置を測定します。PhotoShopとかImageMagickでできます。
得られたアフィンマトリックスは、
M= [
[ 3.0437788 0.05069124 46.53686636]
[ -0.09965438 3.10829493 35.31739631]
]
でした。この行列を使って合成画像を作成できます。
これで、サーマル画像とカメラ画像の位置合わせができました。