How to derive surface temperature from thermal band using GRASS?

GRASS is open source software, you can manage your imagery using this kind of software. Especially for anyone who has interest on imagery processing, using GRASS Raster map calculator is very convenient. You can download GRASS from this link .

Basically, to derive surface temperature we need to prepare our thermal band imagery, in this case we will use band62 (high gain) from Landsat ETM+ of Sendai, Miyagi Prefecture, JAPAN. Date acquisition is March 14, 2012.

Before begin, we need to make sure that atmospheric correction of the image is already taken for absolute calibration of satellite-derived surface temperature. Please refer to _MTL.txt for atmospheric correction variables needed.

L= ((LMAX − LMIN)/(QCALMAX − QCALMIN))(QCAL − QCALMIN) + LMIN

(GSFC/ NASA, 2001)

in command console GRASS you can input this formula:

r.mapcalc band62=((12.65-3.2)/(255-1))*(L72107033_03320120314_B62@PERMANENT-1)+3.2

from _MTL.txt we can find this variables:

QCALMAX_BAND62 = 255.0
QCALMIN_BAND62 = 1.0
LMAX_BAND62 = 12.650
LMIN_BAND62 = 3.200

“band62” is name for output result

“L72107033_03320120314_B62@PERMANENT” is location of band62 in your working directory. When the first time you launch GRASS, you will ask to defined your working directory!

Next step is (2) convert spectral radiance into kelvin, type this formula is command console:

r.mapcalc temp_kelvin=1282.71 / log(666.09 / band62 + 1)

and to (3) convert kelvin to degree celcius you can type this formula:

r.mapcalc temp_celcius=temp_kelvin – 273.15

r.info -r temp_celcius

r.univar temp_celcius

the result output will inform you the min temperature, max temperature, range, mean, standard deviation, etc.

To apply new colour table you can use this formula:

r.colors temp_celcius col=bgyr