# 10. Analýza rastrového obrazu (100%)
###### tags: `zpracovaniObrazu`, `PB130`,`PV131`
:::warning
* Segmentace obrazu, algoritmy značení komponent, popis objektů, klasifikace objektů
* Výpočet mapy vzdáleností
* Základy matematické morfologie
* dilatace a eroze
* otevření a uzavření
* hit-or-miss
* top-hat
* watershed
:::
## Analýza
:::success
**Typické fáze analýzy**
* Předzpracovnání obrazu
* Potlačení šumu, odstranění nerovnoměrného osvitu, apod.
* Segmentace obrazu
* Rozklad definičního oboru na oblasti odpovídající objektům
* Popis objektů
* Určení atributů/vlastností objektů nutných pro rozpoznání
* Klasifikace objektů
* Rozdělení objektů do tříd podle jejich atributů
* Porozumění obrazu
* Porozumění smyslu objektů v obraze
:::
## Segmentace obrazu a algoritmy značení komponent
* Dělení nebo separace obrazu na segmenty (regiony, spojené množiny) podobných vlastností (atributů)
:::info
**Haralick and Shapiro**
„Oblasti by měly být jednotné a homogenní s ohledem na některé charakteristiky, jako je intenzita nebo textura. Interiéry regionů by měly být jednoduché a bez mnoha malých děr. Sousední oblasti by měly mít výrazně odlišné hodnoty s ohledem na charakteristiku v rámci které jsou jednotné. Hranice každého segmentu by měly být jednoduché, ne členité, a musí být prostorově přesné.“
:::
:::success
**Definice:**
* **Sousedé daného pixelu**
* 2D: Horizontální a vertikální sousedé, 4-sousedé,, 8-sousedé,
* 3D: 6-sousedé,, 18-sousedé,, 26-sousedé,
* **Sousedství dvou pixelů**
* 2D: 4-sousedství pixely, 8-sousedství pixely
* 3D: 6-sousedství pixely, 18-sousedství pixely, 26-sousedství pixely
* **Cesta mezi dvěma pixely**
* Sekvence rozdílných pixelů $p_0,...,p_n$ takových že $p_0$ a $p_n$ jsou ony dva pixely a $p_i$ a $p_{i+1}$ jsou sousedící pixely pro každé $0 \leq i \leq n-1$
* $n$ je délka cesty
* 2D: 4-cesta, 8-cesta
* 3D: 6-cesta, 18-cesta, 26-cesta
* **Spojené pixely**
* Uvažujme podmnožinu $S$ pixelů obrázku
* Dva pixely jsou spojeny v $S$ pokud mezi nimi existuje cesta složená pouze z pixelů podmnožiny $S$
* **Souvislá komponenta množiny**
* Uvažujme podmnožinu $S$ pixelů obrázku
* Pro každý pixel v $S$, množina s ním spojených pixelů v $S$ se nazývá souvislá komponenta $S$
* **Souvislá množina**
* Uvažujme podmnožinu $S$ pixelů obrázku
* Pokud $S$ má pouze jednu souvislou komponentu, pak se $S$ nazývá souvislá množina
* Souvislá množina se také nazývá region, oblast nebo segment obrazu
* **Hranice oblasti**
* Množina pixelů v regionu které mají alespň jednoho souseda mimo region
:::
### Prahování
###### *Prahuje sa v Prahe často?* ... Badumtsss
:::success
Pixely jsou rozděleny na regiony podle jejich intenzity: pixely s intenzitou menší než zadaný práh patří do jiného regionu než pixely s intenzitou větší.
* Globální prahování = prahování
* Práh je stejný pro všechny pixely obrazu (nezávisle na jejich pozici)
* Lokální (adaptivní) prahování
* Práh závisí na pozici pixelu v obraze
* Určení prahu
* Manuální - práh je nastaven uživatelem
* Automatcké - analýza histogramu intenzity
:::
#### Dvouúrovňové prahování
:::success
* Pokud je obrázek jednoduchý (předměty podobné intenzity na uniformním pozadí, např. zadaný text nebo buňky stejného typu), histogram obsahuje dva vrcholy s údolím mezi nimi. Hranice je převzata v údolí (na lokálním minimu mezi dvěma maximy).
* Pro přesnější určení minima může být údolí proloženo parabolou.
* Pokud histogram neobsahuje dvě maxima, může pomoci výpočet histogram pixelů, které mají velký Laplacián
:::
##### Obrázky s unimodální distribucí
* Pokud histogram obsahuje pouze jeden zřejmý vrchol, nazýváme takový obrázek obrazem s unimodální distribucí
* Nejjednodušší metodou je vzít X% nejvíce/nejméně intenzivních pixelů jako objekt, zbytek jako pozadí (např. X=10 %)
* Sofistikovanější metoda (Rosin)
* Nakresli úsečku od maxima k druhé straně histogramu
* Úsečka začíná na nejvetším sloupci a končí na prvním prázdném sloupci za posledním neprázdným sloupcem
* Práh je index $i$ který maximalizuje kolmou vzálenost mezi úsečkou a bodem $(i, h(i))$
* ![](https://i.imgur.com/hmhcwCD.png =300x)
##### Shlukování histogramu
* Uvažujme dvě skupiny pixelů - popředí a pozadí
* Každá skupina má svůj vlastní rozsah a distribuci
* Rozsahy se obvykle překrývají
* Místo minimálního překryvu nemusí být údolí
* Cílem je minimalizovat chybu klasifikace pixelu pozadí jako pixel popředí a naopak
* ![](https://i.imgur.com/rrYYYXT.png =300x)
> [color=#666666] **Algoritmus:**
> * Zvol práh $T$
> * Rozděl obraz do dvou shluků (před a po prahu $T$)
> * $\mu_B(T)$ = průměr pixelů s hodnotou menší než práh T
> * $\mu_O(T)$ = průměr pixelů s hodnotou větší než práh T
> * Vyhodnoť $\displaystyle T = \frac{\mu_B(T) + \mu_O(T)}{2}$ a opakuj dokud algoritmus nezkonverguje
##### Shlukování histogramu (Otsu 1979)
* Idea - Najdi práh který minimalizuje vážený rozptyl v rámci třídy
* Stejné jako maximalizovat rozptyl v rámci třídy
* Operuje přímo na šedotónovém histogramu (např. 256 hodnot) což je rychlé
* Předpokládá uniformní nasvětlení a bimodální nebo multimodální distribuci histogramu
* Lze modifikovat pro lokální použití
> [color=#666666] **Algoritmus:**
> * Pro každý práh $T$:
> * Rozděl pixely do dvou shluků a dle prahu $T$
> * Najdi průměry $\mu_B(T)$ a $\mu_O(T)$ pro každý shluk
> * Najdi rozptyl $\delta_{between}(T)$
> * Najdi maximální rozpyl
##### Gradientní prahování (McAulay)
* Idea - Mezi jakýmkoli objektem a pozadím je zřejmá hrana, intenzity na hranách jsou nejdůležitější.
* Vyhodnocení: Vážený součet všech hodnot na obrázku, klást důraz na ty, které jsou v blízkosti silných hran.
* $\displaystyle T = \sum_m f(m) \cdot \frac{|\triangledown f(m)|}{\displaystyle \sum_n |\triangledown f(n)|}$
#### Víceúrovňové prahování
::: success
* Idea - Pokud obrázek obsahuje několik typů objektů na uniformním pozadí a každý typ objektu má specifický rozsah intenzity, (např. směs buněk více typů), histogram obsahuje několik vrcholů s údolími mezi nimi.
* Je přijato několik prahů, jeden práh na každé údolí (na lokálním minimu mezi dvěma sousední maxima).
* Pro přesnější určení minima může být údolí proloženo parabolou.
:::
#### Prahování barevných obrázků
::: success
* Prahování je provedeno na každý barevný kanál zvlášť (RGB).
* Prahování se neprovádí podle intenzity, ale podle odstínu, sytosti nebo jiných charakteristik.
* Uživatel (nebo počítač) vybere konkrétní rozsahy barev pro každý typ objektu.
:::
#### Lokální (Adaptivní) prahování
::: success
* Problém
* **A)** Nerovnoměrná intenzita pozadí
* **B)** Stejnoměrná intenzita pozadí, ale nerovnoměrná intenzita objektu, která netvoří jednotlivé píky v histogramu (píky se v histogramu překrývají a tvoří jeden širší vrchol)
* Řešení:
1. Obrázek je rozdělen na pravidelné podoblasti (např. čtverce) a práh se nastavuje individuálně pro každý region pomocí analýzy histogramu vypočítaného z této konkrétní oblasti.
* Nepříliš dobré výsledky na okrajích mezi oblastmi.
2. Stejné jako 1., ale jsou určeny prahové hodnoty pro jednotlivé pixely pomocí interpolace prahové hodnoty mezi regiony.
* Dobré v případě **A)**, ale ne v případě **B)**.
3. Nejprve se provede globální prahování, aby se oddělilo pozadí objektů.
Poté se pro každý objekt vypočítá histogram lokální intenzity a je stanovena prahová hodnota.
Všechny objekty jsou přesegmentovány pomocí jednotlivých prahů
* Dobré v případě **B)**, ale problémy nastanou, když se dva typy objektů (různých intenzity) vzájemně dotýkají a je s nimi zacházeno jako s jednou oblastí po iniciálním globálním prahování.
:::
#### Hysterezní prahování
::: success
* Použijí se dva prahy, nízký a vysoký.
* Pixely s hodnotou vyšší než je vysoký práh jsou označny jako objekt
* Pixely s hodnotou vyšší než je nízký práh jsou označny jako objekt pouze pokud v obrázku vytvořeném prahováním nízkým prahem existuje cesta mezi tímto pixelem a libovolným pixelem, který je již jako objekt označen.
* Ostatní pixely jsou označeny jako pozadí.
* ![](https://i.imgur.com/B1topa4.png =500x)
:::
### Metody založené na oblastech
::: success
Iterační metody založené na slučování a/nebo dělení oblastí na základě stupně podobnosti vlastností (atributů) oblasti.
:::
#### Narůstání oblastí (Region growing)
::: success
* Inicializace: Obraz je rozdělen do velkého počtu segmentů (oblastí).
* Počáteční oblasti mohou být tvořeny dokonce jednotlivými pixely.
* Iterace: Sousední oblasti jsou seskupeny, pokud jsou jejich vlastnosti (většinou intenzita) podobné.
* Poznámky:
* Je dobré klást určitá omezení na proces slučování
* Omezení mohou být poměrně složitá
:::
#### Štěpení a slučování (Split and Merge)
::: success
* Vstup:
1) Původní obrázek (jedna oblast).
2) Jednotlivé pixely (mnoho oblastí).
3) Střední počet oblastí.
* Iterace:
* Oblasti, které nejsou homogenní, jsou rozděleny do několika menších oblastí
* Sousední oblasti, které mají podobné vlastnosti, jsou sloučeny dohromady.
:::
::: info
* Podmínky pro rozdělení a sloučení mohou být poměrně složité.
* Často se používá metoda **Quad-Tree**
* Nehomogenní oblasti se rozdělují na 4 stejné podoblasti (kvadranty)
* 4 sousední oblasti podobných vlastností se stejným rodičem se v rámci možností spojují dohromady.
* Následuje sloučení regionů na různých úrovních pyramidy nebo mající jiného rodiče.
* ![](https://i.imgur.com/FzJue71.png =300x)
* ![](https://i.imgur.com/NthXT88.png =200x) ![](https://i.imgur.com/QBMErLO.png =200x)
:::
### Segmentace největší kontury (Largest Contour Segmentation - LCS)
> [color=#666666]
> 1. Odfiltrování šumu (průměr nebo medián)
> * Velikost jádra závisí na typu a velikosti šumu
>2. Určení lokálních maxim a minimální intenzity v obraze ($GlobalMinI$)
>3. Výpočet středů lokálních maxim, tj. redukce lokálních maxim na 1 pixel.
>4. Pro každé lokální maximum:
> 4.1) Současný práh $(CurT) = ($ Maximální intenzita $(LocalMaxI) + GlobalMinI) / 2$
> 4.2) Počet iterací $(I) = 0$
> 4.3) Provede se růst oblasti od středu lokálního maxima tak, aby byly zahrnuty všechny sousední pixely, jejichž intenzita $\geq CurT$ .
> 4.4) $N$ = počet středů uvnitř tohoto regionu.
> 4.5) $I = I + 1$
> 4.6) Pokud $I = BitDepth$, dokončíme iteraci pro daný střed a přejdeme ke kroku 5.
> 4.7) Pokud $N>1$, $CurT = (CurT +$ předchozí vyšší prahová hodnota$) / 2$
> 4.8) Pokud $N=1$, $CurT = (CurT +$ předchozí spodní prahová hodnota$) / 2$
> 4.9) Přejdeme na krok 4.3
>5. Pokud $N>1$, Konečný práh $(FinT) = CurT+1$
> Pokud $N=1$, konečný práh $(FinT) = CurT$
>
> **Ukázka:**
> ![](https://i.imgur.com/mQbjx4G.png =500x)
> ![](https://i.imgur.com/N78PeQf.png =500x)
::: info
* Systematická chyba
* Objekt je často protáhlý směrem k sousednímu objektu (objektům)
* Hranice objektu je nepřesná
* Střed objektu je posunut směrem k sousednímu objektu (objektům)
:::
### Segmentace pomocí detekce hran
::: success
* Určení hranic objektů ze snímku okrajové mapy
* Konstrukce šedotónové mapy hran
* První derivace původního obrázku (např. Sobelův filtr)
* Druhá derivace původního obrázku (např. Laplaceův filtr)
* Konstrukce binární mapy hran
* Vytvoření binárního obrázku (např. prahování)
* 1 představuje hranové pixely
* 0 představuje ostatní pixely
* Problémy s šumem
* Před zvýrazněním hran (high-pass filtr) by měl být šum redukován vyhlazením (low-pas filtr)
* Kombinace vícero směrů
* Často jsou detekovány hrany v několika směrech a výsledky jsou kombinovány (např. Sobelův filtr)
* Používají se různé techniky: maximum, součet (průměr), odmocnina ze součtu čtverců atd.
* Post-processing šedotónové mapy hran
* Ztenčení hran na šířku 1 pixelu (např. Canny)
* Konstrukce binární mapy hran
* Prahování nebo hysterezní prahování (dvojité prahování) šedotónové mapy hran pro získání pouze relevantních hran.
:::
**Problém - Hranice v prahované mapě hran nejsou souvislé!**
* Řešení 1 - Proložení křivkou (Curve fitting)
* Předpokladáme že objekty na obrázku jsou jednoduché, okrajová mapa neobsahuje větve.
* Iterativní přizpůsobení koncového bodu
* ![](https://i.imgur.com/hdjUOV4.png =200x)
* Proložení polygonem
* Proložení polynomem
* Bezierův polynom nebo spline
* ![](https://i.imgur.com/Uled7om.png =100x)
* Řešení 2 - Heuristické spojování hrany
* Předpokladáme že objekty na obrázku nejsou příliš složité.
* Hraniční body jsou propojeny čarami pomocí určitého heuristického algoritmu
* Následně jsou vymazány vícenásobné spoje a větve a hraniční fragmenty spojeny tzv. „mosty“
* ![](https://i.imgur.com/QQlfDWv.png =250x) ![](https://i.imgur.com/NIGkj7q.png =250x)
* Řešení 3 - Houghova transformace
* Předpokladáme že objekty na obrázku nejsou příliš složité.
* Hledáme známé tvary (např. čáry, kruhy, čtverce atd.)
* ![](https://i.imgur.com/Syq2YMj.png =400x)
### Segmentace textur
::: success
* Rozdělení obrazu do oblastí na základě charakteristik textury.
* Metoda 1 (Rosenfeld et al.)
* Míra textury je definována a vypočítána pro všechny pixely (v určitém okolí daného pixelu).
* Textura je tedy převedena na amplitudu a poté je použita jedna z metod segmentace amplitudy
* Nevýhoda - hranice textur jsou rozmazané.
* Metoda 2 (Thompson)
* Jsou detekovány přechody mezi oblastmi s různou texturou čímž se vytvoří okrajová mapa.
* Okrajová mapa je zpracována podobně jako segmentace pomocí detekce hran
* Nevýhoda - okraje nejsou souvislé.
![](https://i.imgur.com/5HuaV13.png =500x)
:::
### Metody shlukování
:::success
* Metody založené na analýze shluků.
* U každého pixelu obrázku je vypočítán vektor $x = [x_1 ,...,x_N]$ $N$ různých měření (vlastností) (obvykle $N$ je asi 10).
* Měří se různé uživatelsky definované charakteristiky.
* Poté se provede shluková analýza v $N$-rozměrném prostoru, tj. ty pixely, které tvoří shluk v N-rozměrném prostoru, jsou segmentovány do jedné oblasti.
* Výhoda - Snadné
* Nevýhoda - Pomalé
:::
### Srovnávání se vzorem
:::success
* Hledání šablony (vzoru) v obrázku výpočtem korelace mezi vzorem a hledanými daty obrázku.
* Vyhodnoťí se kritérium shody pro každé umístění a otočení vzoru na obrázku.
* Lokální maxima tohoto kritéria překračující přednastavený práh představují umístění vzoru v obraze.
* Nevýhody:
* Velmi časově náročné, zvláště u velkých vzorů.
* Citlivé na geometrické zkreslení obrazu.
:::
## Popis objektů
### Proč popisovat obrázky/objekty?
:::success
**Popisovače – deskriptory**
* Popisovač je funkce, která pro daný obraz, oblast obrazu (často odpovídající nalezenému objektu), nebo hranici objektu vrátí popis vlastnosti nebo atributu
* Popisem může být
* Číslo
* Vektor hodnot
* Řetězec
* Graf
* A další
* Úrovně
* Globální deskriptory
* Popis celého obrazu
* Lokální deskriptory
* Extrakce zajímavých rysů z obrazu
* Rohy, lokální struktury, apod.
* Není nutná segmentace
* Deskriptory objektů
* Nutná segmentace
* Citlivé na okluzi, šum a vzorkování
* Popis tvaru, textury, barvy, apod.
:::
:::info
* Obrázky nebo předměty je třeba popsat, aby bylo možné provést následnou klasifikační fázi.
* Obvykle se počítají ty atributy, které jsou potřebné pro klasifikaci.
* Alternativně lze popis použít pro vyhledávání podobných obrázků nebo předmětů ve velké sbírce.
* Vyhledávání se provádí na základě podobnosti popisů (podpisů), které jsou stručné a indexované pro zvýšení rychlosti.
* K jejich popisu není nutná žádná a předchozí znalost obrázků nebo předmětů.
* Preferujeme deskriptory, které jsou invariantní vůči translaci, měřítku, rotaci a ideálně i zkreslení.
* Existují také standardizované sady deskriptorů, např. MPEG-7
:::
### Analýza atributů
:::success
* Analýza intenzity (střední a maximální intenzita, rozptyl intenzity atd.)
* Analýza histogramu (centrální momenty, uniformita, entropie atd.)
* Analýza frekvencí (Fourierova spektrální analýza)
* Analýza barev
* Analýza textury
:::
### Atributy objektů
:::info
**Ohraničující obdélník (Bounding box)**
* Nejmenší ohraničující obdélník ve 2D (nebo ohraničující kvádr ve 3D) (
* ve 2D: obdélník o minimální ploše, který obsahuje daný objekt
* ve 3D: rovnoběžnostěn o minimálním objemu, který obsahuje daný objekt
* Rozlišujeme
* Obrazově orientovaný ohraničující rámeček (orientovaný podél os obrázku)
* Objektově orientovaný ohraničovací rámeček (orientovaný podél hlavní osy objektu)
* ![](https://i.imgur.com/YLvF3fR.png =300x)
* Lze spočítat
* Rozměry a velikost ohraničujícího rámečku (plochu nebo objem)
* Poměr velikosti rámečku k velikosti objektu
:::
:::info
**Průměr**
* Orientace ohraničovacího rámečku určuje také měření průměru
* Maximální a minimální průměr lze intuitivně definovat jako nejdelší a nejkratší šířku ohraničovacího rámečku respektině.
:::
:::info
**Kruhovost**
* Parametr udávající (od 0 do 1) jak moc je daný objekt blízký ideálnímu kruhu
* $\displaystyle Circularity(R) = 4\pi \frac{Area(R)}{Perimeter^2(R)}$
:::
:::info
**Konvexní obal**
* Nejmenší polygon, který obsahuje všechny pixely regionu $R$
* Využití k výpočtu hustoty (poměr obsahu objektu k obsahu jeho konvexního obalu)
:::
:::info
**Moment setrvačnosti**
* Míra setrvačnosti tělesa při otáčivém pohybu
* Na nalezený objekt, tj. množinu jeho pixelů R (ne nutně souvislého) se díváme jako na rozložení hmotnosti v objektu
* Můžeme spočítat jeho těžiště (centroid) a tzv. centrální momenty z nichž lze spočítat natočení objektu
* ![](https://i.imgur.com/xPpRS3B.png =200x)
:::
:::info
**Feretův průměr**
* Umožňuje měření průměru v libovolném směru (pro libovolný úhel)
* Je definován jako délka projekce objektu v daném směru
* Rovná vzdálenosti mezi dvěma rovnoběžnými čarami (s daným sklonem), které jsou kolmé k hranicím objektu z opačných stran
* ![](https://i.imgur.com/OBmsLNY.png =200x)
:::
:::info
**Hranice**
* Obvykle reprezentována jako zakódovaný řetězec bodů
* Je uložena pouze absolutní poloha prvního bodu a poté jsou uloženy pouze směry z jednoho bodu do druhého - Tzv. Freemanův kód (Freeman 1961)
* ![](https://i.imgur.com/mRFcIOR.png =100x) ![](https://i.imgur.com/QAvOtq9.png =200x)
* Má své vlastní vlastnosti, které lze také vypočítat.
* Křivost - definována jako zlomek mezi počtem hraničních pixelů, kde hranice výrazně mění svůj směr, a celkovým počtem hraničních pixelů.
* Členité okraje s vysokým zakřivením (úzké výstupky, úzké zálivy atd.) jsou často následkem prahování.
* Aby se tomuto efektu zabránilo, je užitečné použít morfologické transformace po prahování (např. otevření/zavření).
* Pozor, po morfologickém zpracování se u objektů změní i další parametry (nejen hranice, ale i např. obvod)!
:::
:::info
**Souřadnice**
* Souřadnice rohu obrazově orientovaného ohraničujícího obdélníku (např. levý dolní roh ve 2D)
* Souřadnice jednoho z hraničních bodů (např. nejspodnější levý hraniční bod ve 2D)
* Geometrický střed objektu
* Průměr všech souřadnic pixelů/voxelů objektu, tj. součet všech souřadnic pixelů/voxelů objektu dělený počtem pixelů/voxelů objektu
* Těžiště objektu (centroid)
* Vážený průměr všech souřadnic pixelů/voxelů objektu s váhami danými intenzitami, tj. součet všech souřadnic pixelů/voxelů objektu vynásobený jejich intenzitami dělený součet intenzit všech pixelů/voxelů objektu)
:::
:::info
**Prostorová orientace**
* Směr podlouhlého předmětu
- Směr delší strany minimálního ohraničujícího obdélníku
* Lze rozlišit obrazově objektově orientovaný ohraničující obdelník
* Lze vypočítat minimální poloměr a maximální poloměr (vzhledem ke středu objektu a hranici objektu), jejich úhly a také poměr těchto dvou délek a/nebo úhlů.
* Orientaci lze spočítat z centrálních momentů druhého řádu
* Měření orientace pomocí momentů je obecně velmi přesné
:::
:::info
**Průměrná a maximální intenzita**
* Průměrná a maximální hodnota přes všechny intenzity pixelů/voxelů objektu
* Lze vypočítat rozptyl intenzit jako směrodatnou odchylku těchto hodnot
:::
:::info
**Velikost (plocha nebo objem)**
* Počet pixelů/voxelů objektu vynásobený velikostí pixelů/voxelů
* Vznikají artefakty způsobené hraniční pixelací
* ![](https://i.imgur.com/l83odGw.png =400x)
:::
:::info
**Podlouhlost (elongatedness/eccentricity)**
* Podlouhlost objektu lze spočítat přímo z centrálních momentů druhého řádu
:::
:::info
**Obvod nebo povrch**
* Počet hraničních pixelů/voxelů vynásobený konstantou (např. šířkou čtvercového pixelu ve 2D)
* Generování hraničního řetězce (Freemanův kód) ve 2D a výpočet součtu
* Součet horizontálních/vertikálních kroků násobených konstantou (např. 1) plus součet diagonálních kroků násobených jinou konstantou (např. $\sqrt{2}$)
* Vznikají artefakty způsobené hraniční pixelací
:::
:::info
**Profily neboli projekce**
* Projekce počtu jedničkových pixelů podél dané osy
* Je možné je použít pro analýzu struktury dokumentů
* Často se provádí podél hlavní osy
* ![](https://i.imgur.com/PlIhT75.png =300x)
:::
:::info
**Topologické vlastnosti**
* Mezi důležité vlastnosti objektů patří i jejich topologické vlastnosti, například počet souvislých komponent $N_C$ nebo počet souvislých děr $N_H$
* Eulerovo číslo $N_E$ udává rozdíl mezi počtem souvislých komponent a počtem jejich děr
* ![](https://i.imgur.com/pK1pp4Q.png =400x)
:::
### Atributy textur
* Nejsou vázány na výsledek segmentace (region $R$), ale lze je použít i například před segmentací textur
* Typicky kombinují informaci z lokálního okolí
* Například pomocí matice současného výskytu (co-occurrence matrix – Haralick 1973)
* Lokální binární vzory (local binary patterns – Ojala 1996)
:::info
**Matice současného výskytu**
* Počítá jak časté jsou výskyty stejných hodnot v zadaném směru $\Delta x$, $\Delta y$
* Před výpočtem se často provádí kvantizace kvůli snížení počtu úrovní
:::
:::info
**Haralickovy rysy**
* Nad maticí současného výskytu po normalizaci se počítají různé statistiky/charakteristiky
* Např. různé momenty, míra korelace hodnot, apod.
* ![](https://i.imgur.com/oxSVQ2Y.png =500x)
:::
:::info
**Lokální binární vzory**
* Základní myšlenka spočívá v nahrazení pixelu na dané pozici 8-bitovým číslem, které udává výsledek porovnání dané hodnoty s hodnotami v osmi okolí
* Deskriptor zobecněn i pro větší okolí
* V praxi dosahuje často velmi dobrých výsledků (je invariantní k nerovnoměrnému osvětlení)
* Byl rozšířen i na rotační nezávislost
* ![](https://i.imgur.com/dRNUlZ6.png =500x)
:::
### Lokální detekce vlastností + popisy
:::success
* Kromě globálních prvků (jako jsou Haralickovy) lze počítat i lokální prvky = zajímavé/dominantní body v obrázku.
* To lze provést např. detekcí lokálních maxim a minim v pyramidě HPF napříč stupnicemi.
* Každému zajímavému bodu jsou přiřazeny jeho souřadnice a další charakteristiky (např. síla, orientace atd.)
* Nejedná ani o segmentaci (obrázek není rozdělen na oblasti), ani o detekci objektů (objekty nejsou extrahovány, pouze jejich rohy a další dominantní body, ale bez znalosti toho, které body patří ke kterému objektu)
* Lokální extrakce rysů je však více než jen globální analýza obrazu a je dobrým kompromisem, pokud není třeba extrahovat objekty nebo je těžké je extrahovat.
:::
## Klasifikace objektů
:::success
* Klasifikační krok se pokouší zařadit obrázek nebo objekty detekované během kroku segmentace do několika tříd.
* Vlastnosti jednotlivých tříd musí být známy předem.
* Počet tříd je také obvykle znám předem – je odvozen od specifikace problému.
* Obrázky/objekty jsou obvykle klasifikovány podle jejich popisů, které jsou porovnávány s popisy jednotlivých tříd.
:::
### Přístupy ke klasifikačním krokům
1. Formální popis je konstruován (známý algoritmus).
* Pokud lze napsat formální popis, lze klasifikátor celkem snadno realizovat pomocí vhodného programovacího jazyka.
* Formální popis složitějších tříd je často psán přesně pomocí formálních gramatik (formálních jazyků), predikátové logiky nebo jiných matematických nástrojů.
2. Klasifikátor je trénován na sadě příkladů (učení pod dohledem).
* Počítač se krok za krokem učí, který vstup (který atributový vektor) odpovídá které třídě.
* Nejčastějším přístupem ke klasifikaci založeném na učení na sadě příkladů jsou neuronové sítě nebo přístup pomocí vektorových strojů.
3. Klasifikátor není vyškolen (učení bez dozoru).
* Klastrová analýza je typicky aplikována na body ve vícerozměrném prostoru, kde osy prostoru odpovídají měřeným atributům obrázku/objektu a každý bod představuje jeden obrázek/objekt.
:::
:::info
**Učení pod dohledem (Supervised Learning)**
* **Lineární klasifikátory**
* Body (atributové vektory) ve vícerozměrném prostoru atributů jsou rozděleny do shluků pouze pomocí nadrovin (hyperplane), žádné jiné hranice tříd nejsou povoleny.
* ![](https://i.imgur.com/zsrmvOo.png =200x)
* **Support Vector Machine (SVM)**
* Cílem je najít takovou nadrovinu, která má největší okraje
* ![](https://i.imgur.com/gY4FvPD.png =420x)
* je povolen n-rozměrný prostor transformovat nelineárně, tak že konečná hranice není nadrovina
* **Klasifikátory k-nejbližších sousedů (k-NN)**
* Neznámému vstupu je přiřazena stejná třída jako většině jeho nejbližších k sousedů (které patří do trénovací datové sady se známými třídami)
:::
:::info
**Učení bez dozoru (Unsupervised Learning)**
* **Hierarchické shlukování** (shlukování založené na konektivitě)
* Podobně rostoucím regionům
* Začne každým objektem/obrázekem patřím do jiné třídy
* Sloučí ty nejbližší
* Následně se iterativně uvolňuje kritérium blízkosti (nebo naopak, jako rozdělení regionů)
* Vytváří celou hierarchii klastrů:
* ![](https://i.imgur.com/f8nEkne.png =400x)
* **K-Means** (shlukování založené na centroidech)
* Shluky jsou reprezentovány centrálním vektorem, který nemusí být nutně součástí souboru dat
* Počet shluků pevně stanoven na $k$, K-Means shlukování je optimalizační problém:
* Nalezni $k$ středů shluků a přiřaď objekty nejbližšímu středu shluku tak, že součet čtverečních vzdáleností od středu shluku je minimalizován.
* Samotný optimalizační problém je NP-těžký, takže běžný přístup je hledat pouze přibližná řešení, typicky se používá následující iterativní algoritmus:
* ![](https://i.imgur.com/UOW0fhW.png)
* **Shlukování založené na distribuci**
* Předpokládá, že body ve shluku jsou rozmístěny podle určitého známého rozdělení, typicky Gaussova rozdělení
* Pomocí optimalizační procedury přizpůsobí známou distribuci datům tak, aby vytvořily shluky:
* ![](https://i.imgur.com/Pf7dueU.png =200x)
:::
### Měření kvality klasifikace
* Je třeba Ground Truth (GT)
* ![](https://i.imgur.com/F4cSdae.png)
#### Získání Ground Truth (GT)
:::success
* GT není známá, je určeno odborníky
* Obvykle pouze pro určitou část obrazových dat
* Velmi subjektivní, odhady se u komplikovaných nebo rozmazaných/zašuměných snímků mohou mezi odborníky výrazně lišit
* Za účelem snížení chyb v GT může být zapojeno několik odborníků a jejich GT sloučeny (většinové hlasování)
* GT je známá, je určena z předchozích znalostí
* Získávají se objekty známých vlastností (standardizované testovací objekty, fantomy lidských orgánů v lékařském zobrazování atd.)
* GT lze snadno určit, protože máme k dispozici obraz i skutečný předmět, který jsme získali (můžeme se ho dotýkat, měřit ho, počítat jeho vlastnosti atd.)
* GT je přesně a úplně známá pro velký soubor dat
* Vstupní objekty i jejich obrázky jsou simulovány, tj. používáme syntetické testovací objekty v paměti počítače (digitální fantomy)
* Můžeme generovat velké datové sady společně s GT, bez lidské práce!
:::
#### Kontrola kvality Ground Truth (GT)
:::success
* Výsledky segmentace
* GT = správná binární maska
* Kvalita (přesnost) algoritmu lze měřit na základě korelačních koeficientů (překrytí vypočítané a GT masky) např. Jaccardův index podobnosti nebo Diceův koeficient
* Výsledky měření (pozice, délka, velikost/plocha/objem)
* GT = správná hodnota měření
* Chyba = rozdíl mezi naměřenou hodnotou a GT
* Přesnost lze měřit na základě rozložení chyb (histogram)
* Výsledky klasifikace
* GT = správná třída pro každý pixel/voxel/objekt/obrázek
* Kvalita algoritmu lze měřit na základě poměrů TP/FP/TN/FN
* Statistické výsledky
* GT = správná míra výskytu (v procentech) pro každou třídu
* Přesnost lze měřit na základě srovnání hodnot v procentech
:::
## Mapa vzdáleností
- Každému bodu popředí přiřadíme jeho vzdálenost (v dané metrice) k nejbližšímu bodu pozadí
- Význam popředí a pozadí lze zaměnit (vzdálenosti počítáme pro body pozadí) a případně kombinovat do jednoho obrazu pomocí různého znaménka
- ![](https://i.imgur.com/Lp36nIQ.png =350x)
- ![](https://i.imgur.com/4KfTW3L.png =250x)
> [color=#666666] **Algoritmus pro $D_4$ a $D_8$**
> * Nutné pouze 2 průchody
> * Zleva doprava a shora dolů (dopředný)
> * Zprava doleva a zdola nahoru (zpětný)
> * Aktualizace vzdálenosti na základě již navštívených pixelů
> ![](https://i.imgur.com/Y2k2LRP.png =400x)
> ![](https://i.imgur.com/1N2rMyM.png =400x)
* Popsaný dvouprůchodový algoritmus lze použít pro každou regulární metriku
* Regulární vzdálenost je možné propagovat inkrementálně
* Euklidovská metrika není regulární
:::info
**Využití**
* Oddělení dotýkajících se objektů
* Výpočet morfologických operátorů
* Výpočet geometrických reprezentací a měr (např. kostry, Voroného diagramy, osy souměrností, apod.)
* Navigace robotů
* Porovnávání vzorů
:::
### Časté metriky vzdálenosti
* Euklidovská metrika $D_E$ ![](https://i.imgur.com/bEbBEgZ.png =70x)
* Šachovnicová metrika $D_8$ ![](https://i.imgur.com/a5Zytcc.png =70x)
* Taxikářská metrika $D_4$ ![](https://i.imgur.com/tvq9GiC.png =70x)
![](https://i.imgur.com/8pWJgbR.png =200x)
### Voroného diagramy
- Každému objektu je přiřazena taková oblast definičního oboru, že všechny body v této oblasti mají menší vzdálenost k přiřazenému objektu než k jakémukoli jinému objektu
- Lze spočítat aplikací algoritmu záplava (MM) na mapu vzdáleností
- ![](https://i.imgur.com/NxHcMR1.png =500x)
- Dilatace s různými aproximacemi disku pomocí prahování mapy vzdáleností
- ![](https://i.imgur.com/Zp70CPR.png =450x)
### Porovnávání vzorů
- Vzory v obraze lze vyhledávat pomocí křížové-korelace (odpovídá konvoluci s překlopením vzoru $P$)
- ![](https://i.imgur.com/sX1Urz4.png =500x)
- Normalizovaný součet vzdáleností (matching score) pixelů vzoru $P$ od objektů v obraze
- ![](https://i.imgur.com/YZDFv2c.png =500x)
## Matematická morfologie
* Transformace
* Binární
* Šedotónové
* Transformace fungují v lokálním sousedství každého pixelů (podobně jako konvoluce) definovaném tzv. strukturním prvkem.
* Strukturní prvek může být čtvercový, křížový nebo jakýkoli jiný tvar s definovaným počátkem (referenční bod).
* Referenční bod nemusí patřit do masky definované elementem
* ![](https://i.imgur.com/BpBfLYq.png)
### Dilatace
::: success
* Nahradí centrální pixel maximem jeho sousedů.
:::
### Eroze
::: success
* Nahradí centrální pixel minimem jeho sousedů.
:::
### Uzavření
::: success
* Dilatace následovaná erozí.
* Spojuje husté aglomerace lokálních maxim dohromady, vyplňuje malé dírky a vyhlazuje hranice.
:::
### Otevření
::: success
* Eroze následovaná dilatací.
* Odstraňuje jednotlivá lokální maxima, tenké čáry a rozděluje objekty spojené úzkou cestou.
:::
> [color=#666666] **Příklad:**
> a. Originál
> b. Po 2 cyklech eroze
> c. Po 4 cyklech eroze
> d. Po 7 cylech eroze - separováno
> e. po 4 cyklech dilatace z obrázku d.
> f. po 7 cyklech dilatace (logika prevence spojení objektů)
> g. po 9 cyklech dilatace s omezením na vlastnosti původních okraju
>![](https://i.imgur.com/mRE5xa9.png =500x)
### Hit-or-miss
:::success
* Skládá se ze dvou disjunktních množin se stejným počátkem
* ![](https://i.imgur.com/ZiEA5vn.png =300x)
* Vejde se první část SE do vyšetřované množiny na dané pozici a současně druhá část SE ji zcela mine? Pokud ano, tak ulož tuto pozici
* ![](https://i.imgur.com/vTv6swZ.png =400x)
* HMT se často používá k nalezení (odstranění) konkrétní konfigurace pixelů
* Vytváření kostry (skeletonizing)
* ![](https://i.imgur.com/15WZiH7.png =250x)
* Ztenčování (thinning)
* ![](https://i.imgur.com/eTD3l6U.png =250x)
* Scvrkávání
* ![](https://i.imgur.com/kR2rr0V.png =250x)
* Příklady:
* ![](https://i.imgur.com/jNGPiB5.png =400x)
* ![](https://i.imgur.com/1AutOoo.png =400x)
:::
### Bílý top-hat (WTH)
::: success
* Definován jako rozdíl mezi původním obrázkem a jeho otevřením
* Extrahuje světlé skvrny (lokální maxima) nezávisle na jejich intenzitě, bere v úvahu pouze tvar
* Lze použít pro korekci nerovnoměrného osvětlení (tmavé pozadí)
:::
### Černý top-hat (BTH)
::: success
* Definován jako rozdíl mezi uzavřením a původním obrázkem
* Komplementární operátor k bílému top-hatu
* Extrahuje tmavé skvrny (lokální minima) nezávisle na jejich intenzitě, bere v úvahu pouze tvar
* Lze použít pro korekci nerovnoměrného osvětlení (světlé pozadí)
:::
> [color=#666666] **Příklad:**
> ![](https://i.imgur.com/14W7Oot.png =500x)
### Watershed
::: success
* Simulace zvyšování hladiny vody krok za krokem.
* Šedotónový obraz je považován za topografický povrch s údolími a vodních předělů
* spočítáme rozdělení pomocí stavby přehrad mezi údolími během procesu zaplavení.
:::
![](https://i.imgur.com/yneIZMf.png)
::: success
* Vyhlazení obrazu (obvykle Gaussův filtr), velikost jádra závisí na velikosti objektu a také na šumu.
* Určení maximální intenzity (MaxI) a minimální intenzity (MinI) celého snímku.
* Určení tzv. markerů, tedy zárodků budoucích objektů. Lze provést např. pomocí minimálního filtru.
* Binární obrázek (BinImg) = prázdný obrázek (nuly)
* Pro CurI = MinI až MaxI provedeme růst oblasti ze markerů (nebo již existujících oblastí BinImg), aby byly zahrnuty všechny pixely s intenzitou nižší nebo rovnou CurI. Regiony nesmí splývat!
* BinImg nyní definuje území objektů. Počet objektů se rovná počtu markerů.
:::
:::info
* Obvykle se používá na gradient (Sobelův filtr) za účelem nalezení hranic objektů
* Může fungovat bez markerů, v tomto případě jsou markery všechny lokální minima na obrázku (v sousedství 3x3)
* Zaplavení lze provést v opačném směru pro invertované obrázky (anti-watershed)
* Markery lze určit ručně nebo automaticky pomocí lepšího přístupu než minimální filtr, např. pomocí transformace vzdálenosti
* Obraz je prahován (dvouúrovňové prahování) a jsou určeny hranice
* Nalezne se nejkratší vzdálenost každého pixelu k nejbližšímu hraničnímu bodu.
* Ty pixely, které mají velkou vzdálenost k hranici (větší než předem definovaný práh) jsou brány jako markery.
:::