2018.12.22
【Webマガジン Vol.28- Dec., 2018】Column: FLIR Lepton で、お手軽?サーマル (2)
WEBマガジン
初めに
Leptonは、小型の安価な遠赤外線(LWIR)カメラモジュールで、80×60画素のLepton1.x/2.xシリーズと、160×120画素のLepton3.xシリーズのラインアップがあります。
本書は、Leptonを使ってお手軽(?)にサーマルイメージを得るPart.2になります。
図1 Leptonシリーズ
Breakout Board・PT1, PT2を用いたLeptonアプリケーション開発
Leptonの使用目的として、撮影対象の温度分布を知りたいことに加えて、実際の温度を知りたい、と、よく言われます。温度を知りたい対象に熱伝導率が良く熱抵抗が低い材質を使い、直接接触して温度を測る体温計のような接触式温度計と違い、撮影している対象が放射している赤外線を測定して間接的に温度を測る場合、しかもその撮影対象や使用する測定器つまりLeptonの付近に存在する、空気を含む物体が赤外線を放射あるいは吸収するため、精度よく撮影対象の温度を知ることは簡単ではありません。このような、非接触式温度計の精度や測定速度に関する議論は他のサイトに譲りたいと思いますが、関連してよく出される質問に、「温度(情報)はどうやったら取り出せるのか?」があります。画像が出力されていることは判るが、温度データは?ということですね。
Beaglebone BlackでFLIR Bosonを動かそう でも簡単に触れましたが、サーマルカメラは赤外線センサの集合体で、撮影対象の赤外線放射を、輝度として白黒撮影しています。すなわち、センサ出力が高い=画として白いほど高温、ということになります。センサそれぞれの分解能は14ビットとなっており、その集合である撮影画像はraw14と呼ばれます。つまり、ラジオメトリ付きLeptonの場合は、ラジオメトリを有効にした時(TLinearを有効にした時)のraw14各ピクセルの値が、そのピクセルに対応する実際のシーンの温度を表現しています(ラジオメトリなしのLeptonの場合も同様ですが、その場合は気温や自温度による補正をされていませんので、直接、撮影対象の温度が示されてはいません。)すなわち、撮影によって対象物の温度を知りたい場合は、ラジオメトリ付きLeptonで、raw14画像を得る、それが温度データそのもの、ということになります。
一方、我々が一般的に目にする画像(写真やTV画像のような)は、8ビット階調(RGBあるいはYUV各色8ビット)で表現されており、サーマルカメラは、より高い分解能で撮影していることになります。つまり、あるピクセルにおいて、近隣ピクセルとそれほど大きな温度差が存在しない室温環境のような場合(大抵は、Leptonの場合撮影可能なシーンダイナミックレンジ-10~+140℃のうち、屋内なら気温程度~せいぜい+20℃程度が画像内の大部分)は、近隣の点との間ではっきりとしたコントラストにはなりません。図2は、LeptonではなくBosonを用いた画像になりますが、サーマルカメラの出力そのままでは、左側のように見えます。
図 2 左:raw 右;AGC後 カップにはお湯が入っているのだが…(データとしては400程度、20℃以上異なる)
分解能<50mKということは、1LSBの違いが0.050℃未満、ということですが、単純に、可視化のために、右詰めになっているraw14を左詰めに直して上位8ビットだけを取り出しても、かなりの温度差が無いと見分けがつかなくなることを意味しています(TLinearを有効にしている場合はraw14でも16bitデータです)。このため、「見る」ための画像では、温度の分布状況を元にして、いわゆるAGC処理(データ圧縮)を行うことでコントラストを作り、それに疑似カラー着色を行ないます。この過程で、そもそも持っていた温度情報は失われます。それが右側の画像になります。
Leptonは、自身でもAGC処理を行うことができます。しかし、画像出力は、FLIRの他のカメラと異なり1チャネルしかありませんから、AGC処理を行った画像を選択すると、ラジオメトリ付きLeptonであっても温度データを得ることはできません。従って、温度データを取得・記録などしたい場合は、raw14でLeptonから温度を取り出し、さらにその画像を「見る」必要があるならば、そのデータにLepton外部でAGC処理を施して、見るための画像を「作る」ことになります。
なお、LeptonのデフォルトではAGC処理は行わない設定となっています。LUA(Lepton User Application)では、RawでAGC処理off、RGB888でAGC処理onとなっています。LUA上では、Rawを選択したときにはAGC処理を行った画像が表示されますが、その際の疑似カラーパレットはLUA上に用意していないのか、選択できません。
PT1, PT2の場合、Leptonからはraw14を出力させ、PT1, PT2搭載のMCUでAGC処理及び疑似カラー着色をプログラムすることも可能です。PT1, PT2用のファームウエアソースコードはGitHubで公開されていますから、そちらを確認してみてください。
Breakout Boardを用いる場合、Lepton自身でのAGC処理設定に応じたデータをVoSPIでキャプチャしますが、raw14で出力させた場合に画像として見たい場合は、ユーザーアプリケーションとしてAGC処理・疑似カラー着色をプログラムすることになります。
次の表は、それらの関係をまとめてみたものです。
標準提供 | リファレンスデザイン | そのほかのリソース (FLIRサポート外) |
||
ファーム | アプリケーション | |||
Breakout Board | (SDK) | none | http://lepton.flir.com
Lepton2.5を主に対象 |
GroupGets GitHub
Google Groups |
PT1, PT2 | On board | Lepton User Application | (上記サイトにプレゼンテーション あり)全Leptonシリーズ |
|
LDK-P (カスタムPT1, PT2) |
On board | LDK-P GUI | 全Leptonシリーズ | – |
組込プラットホーム、特にARM等組み込みターゲットのSoCを使っている場合、SPIやI2Cにアクセスすることが比較的容易でしょうから、Breakout Boardを使用した開発に取り組むことも比較的容易かと思います。しかし、そういった端子に空きが無かったり、そもそも存在していない、というケースもあるかもしれません。そのような場合にはft232のようなUSB – SPI, I2Cブリッジデバイスの利用を検討することができるかもしれません。そのような事例を紹介されておられるサイトもありますので、探してみてください。