One of the thermal imagers I have been con­sid­er­ing using is the Seek Thermal cam­era. An impress­ive cam­era, cur­rently only avail­able in the US, they use a Ray­theon sensor to cre­ate a small USB cam­era designed to be used with a mobile phone. Most import­antly for me it sup­ports a wide range of tem­per­at­ure, an inten­tional lim­it­a­tion with the FLIR cores.

Sadly the cam­era has some issues. All thermal sensors require post-processing to clean up the image and work around qual­ity issues with the image, it is a bit more com­plex than a stand­ard CCD. The Seek cam­era does some basic pro­cessing in the device but most of the image manip­u­la­tion required to get the cam­era work­ing is per­formed in the Android applic­a­tion. Seek has been prom­ising an SDK since the product was first announced, pre­sum­ably this will allow other cli­ents to be used, but no SDK has been forthcoming.

I have been spend­ing a fair bit of time try­ing to under­stand how to use their fact­ory cal­ib­ra­tion val­ues and get a good tem­per­at­ure read­ing out of the device, so far unsuccessfully.

As a side effort I spent a bit of time work­ing on another prob­lem with the device, with more success.

When first released the cam­era had an erro­neous thermal gradi­ent at the edges and par­tic­u­larly the corners. This was par­tic­u­larly obvi­ous if you poin­ted the cam­era at a thermally flat sur­face, such as a wall, the auto­scal­ing would high­light the error as the only vari­ation in the image. Vari­ous people repor­ted that adjust­ing the lens holder helped and that the prob­lem var­ied with time. I believe that the issue is a com­bin­a­tion of the lens holder being imper­fectly aligned and so its tem­per­at­ure influ­ences the sensor, the lens holder is heated by the cir­cuitry around it and so gets worse with time.

Early this year Seek cor­rec­ted the prob­lem with a soft­ware update. Look­ing at ver­sion num­bers of each com­pon­ent it was clear that the fix was purely post-processing per­formed by the Android applic­a­tion. They have never respon­ded to ques­tions on how this was achieved.

I have man­aged to fig­ure out their tech­nique and have doc­u­mented it in an Octave/Matlab func­tion which repro­duces the pro­cess used. Hope­fully this will allow people mak­ing inde­pend­ent cli­ents to apply sim­ilar cor­rec­tions and allow the cam­era to be used with non-phone devices.

I dis­cuss details of the tech­nique on the eevb­log forum where most of the Seek dis­sec­tion has taken place. The script is also rel­at­ively simple and com­men­ted for any­one with Mat­lab experience.

Some before and after pho­tos of the pro­cessing. A thermally flat image and some ugly face.

Before — Floor

After — Floor

Before — Face

After — Face

It is inter­est­ing to see that the cor­rec­tions to the face go far fur­ther than I ini­tially expec­ted.
The fixup in the bot­tom right corner is obvi­ous, the gradi­ent gets changed to a flat back­ground.
How­ever the fixes around the bot­tom of my face were start­ling, my neck gets cor­rec­ted to a much bet­ter tem­per­at­ure, the beard cools down and the jumper col­lar cools right off. I think all these revised details are more accurate.

Source code, includ­ing the raw data of my face and usage instruc­tions, is on github.