Skip navigation

Spektrális lenyomat és spektrális szög alapú vizsgálatok

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.

Spektrális szög

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.

Megközelítés

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:

  1. Az összes csatorna intenzitása akkumulálása egy képbe.
  2. Az előtér és a háttér elkülönítése Otsu szegmentálással.
  3. A gombafejek szegmentálása: távolságtérkép segítségvel csak a
    "kövér" körszerű részletek meghagyása a képen. Így eltűnnek a
    tálkák csillogó szélei.
  4. A minták elrendezése ismert: felül két kontroll minta van, alatta pedig 2-
    2 fertőzött minta (rendre Mp10 és Mp20). Címkézem a képet és az első
    címke a háttér, az 1. és 2. címke a kontrollhoz, a 3., 4., 5., 6. címke
    pedig a fertőzött gombákhoz.
  5. Egy-egy maszk készítése a fertőzött és a kontroll gombákhoz.
  6. A maszk segítségével a fertőzött és kontroll pixelhalmazt kiválogatása és
    a spektrális szög kiszámolása.

Tapasztalat

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.

Továbbfejlesztett változat

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.

Tapasztalat

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. 

1. nap

7. nap

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.

Programkód és futtatás

A program futtatásához Python 3.x és az következő python csomagok szükségesek: opencv_python, numpy, matplotlib, spectral, sys

A program futtatása (Linux és Windows rendszeren hasonlóan történik):

python3 spectral_angle_mapping.py input.hdr

Az input.hdr helyére azt a hiperspektrális fájlt kell megadni, amelyet szeretnénk feldolgozni.