Yüksek Çözünürlüklü Spektraların, Bant Eşdeğer Yansıtımlarını Hesaplama

13/4/2015 by Bahadır Çelik

Uzaktan algılamada çok-spektrumlu uydu görüntüleri, genel olarak geniş dalga boyu aralıklarında algılanmış 3-10 bantlı verilerdir. Diğer taraftan, çeşitli nesnelere ait el spektro-radyometreleri ile ölçülen veya belirli bir spektral kütüphaneden alınan yansıtım değerleri ise noktasal dalga boylarında ölçülmüş yüksek çözünürlüklü verilerdir.

Yüksek çözünürlüklü bu spektraların bant karşılığı değerlerinin hesaplanması bazı uzaktan algılama uygulamalarında karşımıza çıkar. Örneğin, spektral karışım analizlerinde, lokal olarak saf yüzey komponentlerinin (pure endmember) belirlenmesi önemlidir. Uygulamada, kullanılan uydu görüntüleri, her ne kadar yüksek mekansal çözünürlüğe sahip de olsa, görüntüde her bir piksel, farklı yüzey bileşenleri içerebilmektedir. İşte bu aşamada, yani saf yansıtıma sahip endmemberların seçiminde, arazide el spektro-radyometreleri ile ölçülerek elde edilen veriler kullanılır.

Bant karşılık değerlerin hesaplanması, çoğu zaman, toplanan spektraların algılayıcı bant duyarlılık fonksiyonuna konvolüsyonu olarak da ifade edilir ve bu konvolüsyon işlemi aşağıdaki şekilde hesaplanır;

$$ \frac { \int \limits_{ { \lambda }_{ alt } }^{ { \lambda }_{ üst } }{ { L }_{ s }(\lambda )f\left( \lambda \right) d\lambda } }{ \int \limits_{ { \lambda }_{ alt } }^{ { \lambda }_{ üst } }{ f\left( \lambda \right) d\lambda } } $$

Burada, \({L}_{s}(\lambda)\) konvolüsyonu yapılacak spektranın yansıtım değerlerini, \(f\left( \lambda \right)\) bağıl duyarlılık fonksiyonunu (relative response function), \({ \lambda }_{ üst }\) ve \({ \lambda }_{ alt }\) algılayıcı bandının alt ve üst dalgaboyu sınırlarını ifade eder.

Bağıl duyarlılık fonksiyonları uydu üreticilerı tarafından yayımlanır. Örneğin Landsat uydularının (4,5,7 LDCM), Thematic Mapper, Enhanced Thematic Mapper ve LDCM OLI algılayıcılarına ait bağıl duyarlılık fonksiyonları ve kalibrasyon parametreleri NASA tarafından Landsat Science Data Users Handbook [1] içinde açıklanmaktadır. Aşağıdaki grafik, Landsat TM ve ETM algılayıcılarının ısıl bant hariç tüm bantlarına ait duyarlılık eğrilerinin grafiğini göstermektedir.

Landsat TM ve ETM algılayıcı bağıl duyarlılık fonksiyonları

Bazı uzaktan algılama paket yazılımlarında bu spektraların konvolüsyon işlemi için hazır modüller bulunur. Örneğin Envi yazılımında Spectral> Spectral Libraries sekmesi altında Spectral Library Resampling modülünü kullanarak halihazırda, yazılıma özel olarak entegre edilmiş, (Aster Spectral Library (jhu ve jpl)) [2] veya (USGS Mineral Spectral Library) [3] kütüphanelerinden çeşitli materyallere ait spektraları bulabilirsiniz.

resampling parametreleri

Ayrıca, spektro-radyometreler ile elde ettiğiniz verileri de Spectral Library Builder modülü yardımı ile .sli uzantılı kütüphanelere çevirebilir ve daha sonra konvolüsyon işlemini gerçekleştirebilirsiniz. Envi yazılımda bilinen çeşitli algılayıcılar için filtre fonksiyonları önceden tanımlanmış olarak bulunmaktadır. Ayrıca tanımlı olmayan algılayıcılar için filtre fonksiyonlarını oluşturmak da mümkün. Gerekli veri gösterildikten sonra algılayıcı filtre fonksiyonunu girilmesi için aşağıdaki ekran görüntüsü bulunan pencere ile karşılaşılacaktır.

resampling parametreleri

Burada Input Data File ve Input ASCII File seçenekleri herhangi iki spektrayı karşılaştırırken, birinin diğerine resampling işlemi için kullanılır. Eğer yazılımda önceden oluşturduğunuz veri .sli uzantılı data dosyasında tanımlandıysa Input Data File seçeneği, ascii metin olarak tanımlandıysa Input ASCII File seçeneği seçilmelidir. Giriş yaptığınız veri dosyasının .hdr uzantılı başlık dosyasında Full Width Half Maximum (FWHM) değerlerini tanımladıysanız, resampling işlemi verilen FWHM değerleri dikkate alınarak ve gaussian fonksiyon kullanılarak yapılır. Diğer seçeneklerden User Defined Filter Function kullanıcı tarafından tanımlananan algılayıcı duyarlılık fonksiyonunu ifade eder. Pre Defined Filter Function seçildiğinde ise yazılımda önceden tanımlanmış çeşitli algılayıcılara ait duyarlılık fonksiyonlarını seçebilirsiniz. Öntanımlı algılayıcılar şu şekildedir; ASTER, AVHRR-7, AVHRR-8, AVHRR-9, AVHRR-10, AVHRR-11, AVHRR-12, AVHRR-14, AVHRR-15, AVHRR-16, AVHRR-17, GeoEye-1, IKONOS, IRS-LISS1, IRS-LISS3, IRS-Pan, Landsat MSS4, Landsat MSS5, Landsat TM4, Landsat TM5, Landsat ETM, MODIS, MOMS, QuickBird, RapidEye, SeaWiFS, SPOT1, SPOT4, SPOT5

Set Bad Values çıktıda biribiri ile çakışmayan dalga boyları, yani konvolüsyon haricinde kalan bölgeler için atanacak default değeri gösterir. Aşağıda Johns Hopkins Üniversitesi spektral kütüphanesinden elde edilen 0095UUUASP kodlu asfalt numunesinin Landsat 5 TM bantlarına karşılık gelen değerlerini ve grafiğini görebilirsiniz. (Yatay eksen, her bant için bant orta değerlerini (dalga boyu) göstermektedir.)

resampling parametreleri

ENVI haricinde bu işlemi gerçekleştirmek amacıyla, şimdilik sadece ASTER kütüphanesi ve landsat responselarını kullanabilen ve boş zamanlarımda yazdığım küçük bir python scriptini şu github deposunda bulabilirsiniz. :) Kodun kendisi şu şekilde;

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# -*- coding:utf-8 -*-


import os
import sys

import numpy as np
import matplotlib.pyplot as plt


bwlen = []


def bandpass(sensor, band):
    bandorta = np.array([[0.4825, 0.5650, 0.6600, 0.8250, 1.6500, 2.2150],
                        [0.4850, 0.5600, 0.6600, 0.8300, 1.6500, 2.2150]])
    platforms = {'TM5': 3, 'TM4': 2, 'TM7': 1}
    bands = ('spectral_b1.txt', 'spectral_b2.txt', 'spectral_b3.txt',
            'spectral_b4.txt', 'spectral_b5.txt', 'spectral_b7.txt')
    wlens, refl = np.loadtxt(os.path.join("spectra/manmade", '%s.txt' % spectra),
                            unpack=True, skiprows=26)
    refl /= 100  # Yansitimlari normalize ettik
    if sensor in platforms:
        for i in band:
            wlenr, resp = np.loadtxt((os.path.join("filtfunc", bands[i - 1])),
                                    unpack=True, usecols=(0, platforms[sensor]), skiprows=1)
            wlenr /= 1000
            indis = (wlens >= np.min(wlenr)) & (wlens <= np.max(wlenr))
            x = wlens[indis]  
            y = refl[indis]  
            refson = np.interp(wlenr, x, y)  
            pay = np.multiply(resp, refson)
            deger = np.sum(pay) / np.sum(resp)
            bwlen.append(deger)
        print "Degerler: \n %r" % bwlen
        if platforms[sensor] == 3:
            plt.xlim(min(bandorta[platforms[sensor] - 3] - 0.01),
                    max(bandorta[platforms[sensor] - 3] + 0.01))
            plt.title("Spektral Konvolusyon " + spectra + sensor)
            plt.plot(bandorta[platforms[sensor] - 3], bwlen)
            print "Bant Orta Degerleri: \n %r" % (bandorta[platforms[sensor] - 3])
        elif platforms[sensor] == 2 or platforms[sensor] == 1:
            plt.title("Spektral Konvolusyon " + spectra + sensor)
            plt.xlim(min(bandorta[platforms[sensor] - 2] - 0.01), 
                    max(bandorta[platforms[sensor] - 2] + 0.01))
            plt.plot(bandorta[platforms[sensor] - 2], bwlen)
            print "Bant Orta Degerleri: %r" % (bandorta[platforms[sensor] - 2])
        plt.ylabel("Yansitim")
        plt.xlabel("Dalga Boyu(mikrometre)")
        plt.show()
    else:
        sys.exit("Hatali Platform Secimi!")

if __name__ == '__main__':
    band = 1, 2, 3, 4, 5, 6
    sensor = "TM5"
    spectra = "0095uuu"
    bandpass(sensor, band)

Programın ASTER SPL0095UUUASP kodlu asfalt numunesinin Landsat 5 TM algılayıcısındaki çıktıları ve grafiği;

resampling parametreleri

Çıktılar

Degerler: 
[0.059884618325331609, 0.075606068764296763, 0.089786907803512436, 0.10868446927246983, 0.1510131066501155, 0.14868392822163085]
Bant Orta Degerleri: 
array([ 0.4825,  0.565 ,  0.66  ,  0.825 ,  1.65  ,  2.215 ])

Yorumlar