Spektrális lenyomat
A spektrális lenyomat nem más, mint minden egyes hullámhosszú csatornán összesített reflektancia függvényérték, amely a mi esetünkben az egy pixelen, egy csatornán vett intenzitásérték.
A spektrális lenyomat nem más, mint minden egyes hullámhosszú csatornán összesített reflektancia függvényérték, amely a mi esetünkben az egy pixelen, egy csatornán vett intenzitásérték.
A spektrális szög az alábbi képlettel kapható meg:
\theta(d,m) = cos^{-1}\left( \frac{\sum_{i=1}^{N} m_i d_i}{\sqrt{\sum_{i=1}^{N} d_i} \sqrt{\sum_{i=1}^{N} m_i}} \right)
ahol d a vizsgált minta spektrális lenyomat vektora, m a kontroll spektrális
lenyomat vektora, N a csatornák száma, mi és di pedig rendre a kontroll és a
minta reflektancia értéke az i-edik csatornán.
Mivel a képeinken a fertőzött gombafejek is csak részben fertőződtek meg és
vannak egészséges részek, ezért célszerű pixelenként összevetni minden
egyes fertőzött gombapixelt az egészséges, kontroll pixelekkel. A kiszámolt
szögértékek tekintetében érdemes figyelni a minimum és maximum értékeket,
mert itt egy-egy vizsgált pixelt minden egészséges pixellel összevetünk és a
vizsgált pixel kapcsán a minimumot és a maximumot külön képekben
elmenteni.
Az algoritmus lépései a következők:
A pixelenkénti összevetés miatt a program nagyon sokáig futott, az algoritmus
így meglehetősen számításigényes. Ha a maszkolt képeken külön
hiperspektrális képként vizsgálnánk, az eljárás gyorsabb lenne, azonban ez
technikai korlátok miatt ez nem volt lehetséges.
A korábbi vizsgálatokat és gondolatmenetet folytatva elkezdtük vizsgálni a pixel spektrumának vektorát, vagyis tekintsünk minden pixelre úgy, mint egy vektorra. Vizsgáljuk meg a vektorok (=pixelek) közötti szögeket a referencia fehér tárgyon és a kép többi részén.
Ehhez először meg kell határozni a képen azt referencia tárgy helyét, de nem kell pontos szegmentálás, elegendő, ha mintát tudunk venni erről a tárgyról. Legyen ennek a mintának a vektora a referencia vektor. Ehhez hasonlítunk minden más pixel-vektort.
A jobb láthatóság kedvéért álszíneztük a képet az 1. és a 7. napon számolt szögek esetében. Az egyes színeket a képeken a bal oldali referencia téglalaphoz kell viszonyítani.
Az 1. napos képen a gombák tetejének közepe már vörösbe hajlik, itt voltak fertőzve. A kék részek az árnyéknak tudhatók be. A 7. napos képen eléggé terjedt a fertőzés, itt a sárga részeket érdemes figyelni. Álszínezés nélkül sajnos nem látszik a különbség. Alakban és méretben azért különbözőek, mert a fertőzés miatt elindult a fertőző gombák fonalasodása, illetve a csiperke is „szétfolyt” kicsit. Az eltérés a két álszínezett kép között azt is mutatja, hogy mennyire megváltozik a spektrális intenzitás a két különböző mértékű fertőzés között, ugyanis, ha nem változna, akkor a referencia test azonos színű lenne.
A program futtatásához Python 3.x és az következő python csomagok szükségesek: opencv_python, numpy, matplotlib, spectral, sys
python3 spectral_angle_mapping.py input.hdr
Az input.hdr helyére azt a hiperspektrális fájlt kell megadni, amelyet szeretnénk feldolgozni.
Licensed under the Creative Commons Attribution Share Alike License 4.0