1. Západočeská univerzita v Plzni
Fakulta aplikovaných věd
Katedra kybernetiky
Bakalářská práce:
Vypracoval: Tomáš Přinda
Vedoucí práce: Ing. Tomáš Ryba
Plzeň, 2010
2. Cíle práce
Otestování metody graph cut pro
segmentaci obrazu
Nastudování potřebné teorie
Implementace metody ve vhodném prostředí
Otestování metody pro různé parametry
Zhodnocení dosažených výsledků
Využití metody pro segmentaci
lékařských dat
3. Segmentace
Rozdělení obrazu na části, které mají
souvislost z objekty reálného světa, oddělení
od pozadí
4. Graph cut – základní rysy
Umožňuje interaktivní
segmentaci - seedy
Hranový i oblastní přístup
Použití pro 2D, 3D, nD data
Základní metoda neposkytuje
Využití předchozí znalosti tvaru
Využití texturních vlastností
objektu
5. Graph cut - popis algoritmu
Označení seedů
Převedení obrázku
na orientovaný graf
Ohodnocení hran
grafu
Výpočet minimálního
řezu v grafu
Min. řez odděluje
objekt od pozadí
6. Implementace
Hledání min. řezu
Dinicův alg. + alg. Tří Indů
Implementace v Matlabu
Pohodlná práce s obrázky, mnoho funkcí
Nižší rychlost
Testovací sada obrázků
Obsahuje ruční segmentace
=> možnost porovnání
Otestování metody pro 2,3%
různé parametry, zhodnocení
7. Problém s rychlostí 1
Obrázek 150x100px – cca 45min
Příčiny
Pomalý běh Matlabu
Složitost algoritmu O(n3)
Řešení
Implementace algoritmu v C / C++
Využití paralelního programování – CUDA
○ 60 obrázků 1024x1024px za 1s
8. Problém s rychlostí 2
Implementace efektivnějšího Označení seedů
algoritmu např. Boykov–Kolmogorov
Teoretická složitost horší, ale lepší Převedení obrázku
na orientovaný graf
výsledky
Ohodnocení hran
grafu
Využil jsem a přizpůsobil jeho
hotovou implementaci Výpočet minimálního
řezu v grafu
Změna pouze „jádra“ metody, ohodnocení
hran stejné => téměř stejné výsledky Min. řez odděluje
V C++ objekt od pozadí
Obrázek 150x100px – 0,2s
9. Závěr
Uplatnění v lékařství k segmentaci 3D
snímků (CT, MR) a následnou tvorbou
počítačového modelu
Budoucí práce
Tvorba počítačových modelů tkání
Otestování modifikovaných metod
10.
11. Výhody metody graph cut
Interaktivita
Jedná se spíše o vlastnost
Umožňuje uživatelský zásah a přesnější
definování požadavků
Oprava špatné segmentace => lepší
výsledky (nepočítá se celé znovu)
Využití pro vícedimenzionální data
3D – lékařství – segmentace CT, MR
Hranový i oblastní přístup
Modifikované metody – tvar, textura
12. Nevýhody metody graph cut
Velká složitost => malá rychlost
Využití paralelního programování
Obtížnější nastavení parametrů
Často nutné provést segmentaci pro různé
nastavení parametrů
V praxi většinou velmi podobná data =>
nastavení pouze jednou
Segmentaci by měl provádět expert
(segmentace nádoru – zná jen doktor)
13. Jiné modely objektu a
pozadí
Váhová funkce C(L) = λR(L) + B(L)
L ... Vektor, který představuje danou segmentaci
R(L) … představuje vlastnosti oblastí (region)
B(L) ... představuje vlastnosti hranic (boundary)
R(L) = ΣRp(Lp)
Rp(obj) = - ln P(ip|O)
Rp(bgd) = - ln P(ip|B)
Model objektu (pozadí) – ppst. rozdělení
Určení ze seedů – určitý vzorek objektu (pozadí)
Segementace podobných obrázků => předchozí
určení rozdělení
14. Jiné modely objektu a
pozadí
1. Dle histogramu
Ze zadaných seedů vypočtení histogramu,
znormování
Nevýhoda – malé množství seedů => „zubatá“
funkce => neodpovídá opravdovému
rozložení
2. Vyhlazený histogram
Více odpovídá rozložení skut. objektu a
pozadí
15. Jiné modely objektu a pozadí
3. Normální rozdělení
pravděpodobnosti
Vhodné pouze pro
poměrně jednoduché
obrázky
4. Součet více Gaussovo 0.02
P(Ip|O)-true
křivek 0.015
P(Ip|B)-true
P(Ip|O) P(Ip|B)
5. Jiné pravděpodobnostní 0.01
rozdělení (beta, 0.005
logaritmicko normální) 0
0 50 100 150 200 250 300
hodnota jasu
Editor's Notes
Dobrý den, jmenuji se Tomáš Přinda, vedoucím mé bakalářské práce byl Ing. Tomáš Ryba a název mé práce zní Využití teorie grafů pro segmentaci, algoritmus tří indů.
Hlavními cíly mé práce bylo „Otestování ...“, které spočívalo nejprve v nastudování potřebné teorie, v následné „implementaci metody ve vhodném programovacím jazyce“ otestování metody pro různé parametry na vhodných datech a nakonec zhodnocení dosažených výsledků.Dalším cílem bylo prozkoumání vhodnosti této metody pro segmentaci lékařských dat.
Než začnu metodu popisovat, asi by bylo dobré říci, co je segmentace obrazu. Uloha segmentace obrazu spočívá v rozdělení obrazu na části, které mají souvislost z objekty reálného světa a jejich oddělení od pozadí. Segmentace je většinou pouze částí určité úlohy z praxe a po jejím provedení může následovat zkoumání tvaru objektů s následnou klasifikací, vytvoření 3D objektů z trojrozměrných dat, nebo určení jejich objemu u 3D apod. Segmentačních metod existuje mnoho, v této práci jsem se zaměřil na metodu graph cut.
Její základní rysy jsou:Možnost interaktivní segmetnace – princip je ukázán na obrázku a spočívá v označení požadovaného objektu a pozadí několika body, které nazýváme seedy.Metoda využívá hranový i oblastní přístup k segmentaci. Velkou výhodou této metody je dále možnost využití i pro trojrozměrné obrázky, čehož se dá využít např. pro segmentaci lékařských snímků získaných pomocí počítačové tomografie, nebo magnetické rezonance. Základní metoda neposkytuje využití předchozí znalosti tvaru segmentovaného objektu a využití texturních vlastností obrázku, nicméně existují metody modifikované, které tyto vlastnosti poskytují.
Na tomto slidu můžete vidět popis jednotlivých kroků metody. V pravé části pak vidět příklad kroků metody na obrázku o rorměrech 3x3px.Nejprve je nutné provést manuální označení seedů, jak můžeme vidět na prvním obrázku.Následně daný obrázek převedeme na graf, s tím že šedivé body představují jednotlivé pixely, kromě těchto vrcholů jsou jsou v grafu přítomny 2 speciální uzly, zdroj a stok.Dále určitým algoritmem (konkrétně Dinicovým algoritmem s využ. Alg. Tří Indů) určíme minimální řez v grafu, na obrázku je znázorněn zeleně, tento řez pak odděluje objekt od pozadí.
Jak už jsem zmínil, hledání minimálního řezu provádím pomocí Dinicova algoritmu s využitím alg. Tří Indů. Celou implementaci jsem provedl v prostředí Matlab, z důvodu velkého množství nástrojů které poskytuje, např. Pohodlná práce s obrázky, rychlé vykreslování závislostí apod. Nevýhodou však byla velmi pomalá rychlost o které se zmíním v následující části prezentace.Pro testování metody jsem využil sadu obrázků, která poskytovala ručně provedené segmentace, měl jsem tedy možnost porovnání dosažených výsledků implementované metody s ruční segmentací. V celé práci tedy porovnání provádím na takovýchto obrázkách, kde černé a bílé části označují správně provedenou segmentaci a červené a modré části chybně provedenou segmentaci.Metodu jsem otestoval pro různé nastavení parametrů a provedl zhodnocení, které je uvedeno v dokumentaci.
Jak už jsem uvedl, po implmentaci jsem měl problém s rychlostí běhu programu. Segmentace obrázku o rozměrech 150x100px trvala kolem 45min. Příčiny byly pomalý běh Matlabu, a poměrně vysoká složitost algoritmu pro hledání minimálního řezu.Řešení tohoto problému by mohlo být přepsání algoritmu do kompilovného jazyka (C / C++). Toho by mohlo být docíleno využitím Matlab to C Compileru, tuto možnost jsem však podrobně nezkoumal. Pokud by ani rychlost algoritmu implmentovaného v C++ nebyla dostatečná, bylo by možné využít možností paralelního programování, např. využití technologie CUDA, která umožňuje provádět výpočty na grafických kartách Nvidia. Dle článku ze kterého jsem čerpal dokáže tato implementaci provést segmentaci 60 obrázků o rozměrech 1024x1024px za 1s.
Dalšího zrychlení by mohlo být docíleno využímím efektivnějíšího algoritmu. Tím by mohl být např. Boykovovův-Kolmogorovovův algoritmus. Ten má sice horší teoretickou složitost, jak je uvedeno v článku, který tento algoritmus uvádí, při použití pro segmentaci obrazu dosahuje lepších výsledků.Hotovou implementaci tohoto algoritmu jsem také využil v mé implmentaci. Z obrázku je vidět, že se jedná pouze o změnu algoritmu pro výpočet minimálního řezu. ostatní části metody zůstávají zachovány, především ohodnocení hran, díky tomu dosahovala tato implementace a moje implementace téměř stejných výsledků. V diagramu mám dále částečně označen i krok převedení obrázku na orientovaný graf. Graf je konstruován stejný, je pouze reprezentovaný jiným způsobem.Tento algoritmus je implementovaný v C++, díky knihovně MEX je však možné jej používat v Matlabu a tak nepřijít o jeho výhody. Program se tím neuvěřitelně zrychlyl a segmentace obrázku stejné velikosti trvala 0,2s namísto původních 45min.
Závěrem bych rád řekl, že tato metoda nalézá uplatnění v lékařství k segmentaci především trojrozměrných snímků získaných magnetickou rezonancí, případně počítačovou tomografií. S následným využitím pro tvorbu počítačových modelů různých tkání a orgánů.Tímto směrem by se také mohlá práce dále vyvíjet.
nejprve – vysvětlení co je myšleno modelem objektu, pozadíK tomu uvedu váhovou funkciL ... Vektor o velikosti počtu pixelů – představuje segmentaciCo je R(L), B(L) – tou se nebudeme zabývatR(L) ... Součet Rp přes všechny pixely, Rp – penalizace přiřazení jako objekt, pozadíTyto penalizace z ppstí, že objekt, reps. Pozadí má hodnotu jasu ipModelem objektu jsou chápána tyto ppstní rozděleníJelikož ze seedů máme k dispozici určitý vzorek obj. a pozadí, model můžeme určit z nich.Pokud by úlohou byla segmentace velmi podobných obrázků, jak tomu v praxi často bývá, bylo by možné rozdělení určit pouze jednou a používat ho pro všechny segmentované obrázky.
Pravděpodobnostní rozdělení je tedy možné určit z histogramu sestrojeného ze seedů.Nevýhodou této metody je že při zvolení malého množství seedů může být funkce velmi zubatá a nemusí odpovídat pravdivému rozložení jasů v objektu a pozadí.To bychom mohl vyřešit jakýmsi vyhlazením histogram. To pak více odpovídá rozložení skutečného objektu a pozadí.Další možností by bylo využít normálního rozdělení pravděpodobnosti. Pro složitější obrázky pak využití součtu více gaussovo křivek, což by pravědpodobně stačilo pro většinou aplikačních úloh, připadně využít ještě jiného pravěpodobnostního rozložení.
Pravděpodobnostní rozdělení je tedy možné určit z histogramu sestrojeného ze seedů.Nevýhodou této metody je že při zvolení malého množství seedů může být funkce velmi zubatá a nemusí odpovídat pravdivému rozložení jasů v objektu a pozadí.To bychom mohl vyřešit jakýmsi vyhlazením histogram. To pak více odpovídá rozložení skutečného objektu a pozadí.Další možností by bylo využít normálního rozdělení pravděpodobnosti. Pro složitější obrázky pak využití součtu více gaussovo křivek, což by pravědpodobně stačilo pro většinou aplikačních úloh, připadně využít ještě jiného pravěpodobnostního rozložení.