Vandenskyros transformacija

**Vandenskyros transformacija** – vaizdų segmentavimo algoritmas, imituojantis vandenskyros linijų radimą pagal vietovės reljefą.

Praktiškai vandenskyros transformacija paprastai naudojama ne pačiam vaizdui, o jo gradientui. Tačiau kartais naudojama ir vaizdo atstumo funkcija.

## Neformalus požiūris
Žiūrint neformaliai, vaizdas, kuriam taikoma vandenskyros transformacija, atitinka vietovės reljefą. Vandenskyros linijų jame gali būti ieškoma dviem pagrindiniais būdais. Istoriškai pirmu būdu imituojamas lietaus lašų tekėjimas nuo bet kurio vaizdo taško žemyn (link atitinkamo lokalinio minimumo). Tokiu atveju taškai, nuo kurių vanduo teka link to paties lokalaus minimumo, vadinami baseinu, o baseinų ribos – vandenskyros linijomis. Pagal kitą interpretaciją laikoma, kad reljefas nardinamas į vandenį, kuris gali prasiskverbti į paviršių per lokalinius minimumus. Tokiu atveju vandenskyros linijos atskiria skirtingų minimumų užtvindomus baseinus. Laikoma, kad pastaroji interpretacija leidžia algoritmą realizuoti paprasčiau.

## Tolydusis atvejis
Tolydžiu atveju vandenskyros transformacija apibrėžiama pagal atstumo funkcijas. Viena iš tokių atstumo funkcijų yra topografinis atstumas, kuris yra apibrėžiamas kaip mažiausias (infimumo prasme) gradiento kreivinis integralas per galimus kelius nuo vieno taško iki kito:

: T_{f}(p, q) = \inf_{\gamma \in D, \gamma(0)=p, \gamma(1)=q} \int_{\gamma}{\lVert \nabla f(\gamma(s)) \rVert} ds,

kur *p* ir *q* – atitinkami taškai, *f* – tolydi, bent du kartus diferencijuojama funkcija, apibrėžta srityje *D*.

Tada, jei {*m<sub>k</sub>*} yra funkcijos lokalių minimumų aibė, kurios indeksai *k* sudaro aibę *I*, minimumo baseinas apibrėžiamas kaip

: B(m_{i}) = \{ x \in D | \forall k \in I / \{ i \} : f(m_{i}) + T_{f}(x, m_{i}) 

Savo ruožtu, vandenskyros linijos tokiu atveju apibrėžiamos kaip aibė taškų, kurie nepriklauso jokiam baseinui:

: W(f) = D / \bigcup_{i \in I}B(m_{i}).

Pati vandenskyros transformacija gali būti laikoma funkcija, kurios apibrėžimo sritis yra *D*:

: \lambda: D \to I \cup \{ W\}, ~ W \notin I.

Ji priskiria kiekvienam taškui, priklausančiam kuriam nors baseinui, atitinkamo baseino numerį, o kiekvienam taškui, priklausančiam vandenskyros linijai, numerį, nesutampantį su jokio baseino numeriu:

: \lambda(p) = \begin{cases} i, ~ p \in B(m_{i}), \\ W, ~ p \in W(f). \end{cases}

## Diskretusis atvejis

Diskrečiuoju atveju vandenskyros transformacijos radimas apsunkinamas dėl to, kad diskrečiame vaizde gali būti didelų vientisų plotų su pastoviomis pikselių reikšmėmis.

Pagal vieną iš apibrėžimų, vandenskyros transformacija atliekama imituojant nardinimą į vandenį. Tokiu atveju vaizdą apibrėžus funkcija *f*, kuri kiekvienam pikseliui grąžina jo reikšmę, baseinai randami rekursiškai:

:  X_{h} = \begin{cases} \{ p \in D | f(p) = h_{min} \}, ~ h = h_{min}, \\ MIN_{h} \cup IZ_{T_{h}}(X_{h-1}), ~ h > h_{min}. \end{cases}

Čia *MIN<sub>h</sub>* yra aibė lokalinių minimumų, kurių reikšmės yra *h*, *T<sub>h</sub>* – aibė pikselių, kurių reikšmės neviršija *h*, o *IZ* atitinka užtvindytą plotą:

: IZ_A(B) = \bigcup_{i=1}^{k}iz_{A}(B_{i}),

kur *iz* – geodezinė įtakos zona:

: iz_{A}(B_{i}) = \{ p \in A | \forall j \in [1; k] / \{ j \} : d_{A}(p, B_{i}) 

Kitaip tariant, jei *A* poaibis *B* yra sudarytas iš *k* sričių, tai kiekvieną jų atitinka geodezinė įtakos zona, sudaryta iš taškų, kurie yra arčiau šios srities, nei bet kurios iš likusių sričių.

## Algoritmai

Esama įvairių algoritmų, realizuojančių vandenskyros transformaciją.

Pagal Mejerio algoritmą prieš skaičiavimus yra duotas paveikslėlis ir pradiniai žymekliai su skirtingomis žymėmis. Visi gretimi žymekliams žymės neturintys pikseliai įtraukiami į prioritetinę eilę, kurioje prioritetas nustatomas pagal pikselio reikšmę (mažesnė reikšmė – aukštesnis prioritetas). Po to iš šios eilės vis imami pikseliai. Jei pažymėtų paimto pikselio kaimynų žymės sutampa, šiam pikseliui irgi priskiriama ta žymė ir į eilę įtraukiami nepažymėti jo kaimynai. Galiausiai visi vienam baseinui priklausantys pikseliai gauna tas pačias žymes, o vandenskyros linijoms priklausantys pikseliai lieka nepažymėti. Yra žinoma, kad šiuo algoritmu gaunamos vandenskyros linijos visada yra plonos (vieno pikselio pločio).

Pagal Vincento-Soilo algoritmą prieš skaičiavimą yra duotas tik pats paveikslėlis. Skaičiavimai jame atliekami dviem etapais. Pirmajame etape vaizdo pikseliai yra surikiuojami reikšmės didėjimo tvarka. Kitame etape vis imami mažiausią reikšmę turintys neapdoroti pikseliai. Jiems priskiriama pradinė žymė. Tokie pikseliai, turintys kaimynų, apdorotų ankstesniuose žingsniuose, rašomi į eilę. Po to iš šios eilės vis imami pikseliai, į ją dedant pradinę žymę turinčius jų kaimynus. Tie paimti iš eilės pikseliai, kurių neapdoroti kaimynai priklauso skirtingiems baseinams, priskiriami vandenskyros linijai, tuo tarpu turintys kaimynus tik iš vieno baseino, gauna jo žymę (pikseliai, kurių visi neapdoroti kaimynai priklauso vandenskyros linijai taip pat jai priskiriami, nors tokią žymę kitame žingsnyje leidžiama pakeisti į baseino žymę). Pikseliai, kurie ir po tokio apdorojimo turi pradinę žymę, laikomi naujais lokaliais minimumais ir gauna naują žymę. Nustatyta, kad tokio algoritmo laikinis sudėtingumas yra tiesinis.

Taip pat esama algoritmų, kurie atlieka vandenskyros transformaciją pagal topografinį atstumą.

Vandenskyros transformacijos radimas išlygiagretinamas dviem pagrindiniais būdais. Pagal vieną iš jų vaizdas yra skaidomas į dalis, kurios paskirstomos procesoriams ir apdorojamos, o tada gauti rezultatai suliejami. Pagal kitą procesoriams paskirstomos ne vaizdo dalys, o lokaliniai minimumai.

## Dažnesni patobulinimai

Kadangi vandenskyros transformacija paprastai randa daugiau plotų, negu iš tikro esama (kitaip tariant, stebima perteklinė segmentacija), naudojami įvairūs metodai randamų plotų kiekiui sumažinti. Vienas iš jų – žymekliais valdoma vandenskyros transformacija. Pagal šį metodą yra parenkami pikseliai, kurie priklauso objektams (objektų žymekliai) ir pikseliai, kurie priklauso fonui (fono žymekliai). Tada gradientinis vaizdas modifikuojamas taip, kad jame liktų tik ribos tarp žymeklių. Tam gali būti pritaikoma morfologinė rekonstrukcija.

## Šaltiniai

## Papildomam skaitymui
* Lamia Jaafar Belaid, Walid Mourou, „Image segmentation: a watershed transformation algorithm“, Image Analysis and Stereology, June 2009, vol. 28, p. 93-102, http://www.wise-t.com/ias/Magazine/2009/6/04_Belaid.pdf
* Corinne Vachier, Fernand Meyer, „The Viscous Watershed Transform“, Journal of Mathematical Imaging and Vision, 2005, Vol. 22, Nr. 2-3, p. 251–267, doi 10.1007/s10851-005-4893-3, http://www.springerlink.com/content/j6707201648617mj/
* Romaric Audigier, Roberto de Alencar Lotufo, „Watershed by Image Foresting Transform, Tie-Zone, and Theoretical Relationships with Other Watershed Definitions“, Proceedings of the 8th International Symposium on Mathematical Morphology (ISMM’07), 2007, Rio de Janeiro (RJ), Brazil, http://www.dca.fee.unicamp.br/~audigier/publications/2007ISMM_Audigier.pdf 
* Erlend Hodneland, Xue-Cheng Tai, Joachim Weickert, Nickolay V. Bukoreshtliev, Arvid Lundervold, Hans-Hermann Gerdes, „Level Set Methods for Watershed Image Segmentation“, Lecture Notes in Computer Science, vol. 4485/2010, p. 178–190 [ftp://ftp.math.ucla.edu/pub/camreport/cam06-67.pdf Juodraštis]
* Serge Beucher, C. Lantuejoul, „Use of watersheds in contour detection“ International Workshop on image processing, real-time edge and motion detection/estimation, Rennes, France, Sept. 1979. http://cmm.ensmp.fr/~beucher/publi/watershed.pdf