Lényege: valamilyen szempont szerint homogén csoportok képzése a pixelekből. Amit már ismerünk:

Hasonló dokumentumok
Egy (k) küszöb esetén [0, 1] intenzitástartományt feltételezve (v 2 v 2 ):

Az objektum leírására szolgálnak. Mire jók? Sokszor maga a jellemző az érdekes: Tömörítés. Objektumok csoportosítására

Él: a képfüggvény hirtelen változása. Típusai. Felvételeken zajos formában jelennek meg. Lépcsős

Szürke árnyalat: R=G=B. OPENCV: BGR Mátrix típus: CV_8UC3 Pont típus: img.at<vec3b>(i, j) Tartomány: R, G, B [0, 255]

Szürke árnyalat: R=G=B. OPENCV: BGR Mátrix típus: CV_8UC3 Pont típus: img.at<vec3b>(i, j) Tartomány: R, G, B [0, 255]

7. Régió alapú szegmentálás

Minták automatikus osztályba sorolása a mintát leíró jellemzők alapján. Típusok: felügyelt és felügyelet nélküli tanuló eljárások

Példák jellemzőkre: - minden pixelérték egy jellemző pl. neurális hálózat esetében csak kis képekre, nem invariáns sem a megvilágításra, sem a geom.

Érdekes informatika feladatok

Kiegészítő előadás. Vizsgabemutató Matlab. Dr. Kallós Gábor, Dr. Szörényi Miklós, Fehérvári Arnold. Széchenyi István Egyetem

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

A színkezelés alapjai a GIMP programban

10. Koordinátageometria

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

BME MOGI Gépészeti informatika 15.

Képfeldolgozás haladóknak Lovag Tamás Novák Gábor 2011

8. feladatsor. Kisérettségi feladatsorok matematikából. 8. feladatsor. I. rész

Tájékoztató. Használható segédeszköz: -

Lin.Alg.Zh.1 feladatok

Lin.Alg.Zh.1 feladatok

Pontfelhő létrehozás és használat Regard3D és CloudCompare nyílt forráskódú szoftverekkel. dr. Siki Zoltán

117. AA Megoldó Alfréd AA 117.

Gráfelméleti feladatok. c f

Struktúra nélküli adatszerkezetek

Matematika III előadás

Feladat azonosítója: webc1_01_map

4. Fuzzy relációk. Gépi intelligencia I. Fodor János NIMGI1MIEM BMF NIK IMRI

Programozási segédlet

Bevezetés a programozásba. 9. Előadás: Rekordok

8. Előadás. Megyesi László: Lineáris algebra, , oldal. 8. előadás Mátrix rangja, Homogén lineáris egyenletrendszer

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

MATLAB. 3. gyakorlat. Mátrixműveletek, címzések

rank(a) == rank([a b])

Lineáris algebra. (közgazdászoknak)

Feladatok a Gazdasági matematika II. tárgy gyakorlataihoz

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

Felügyelt önálló tanulás - Analízis III.

Stíluslapok használata (CSS)

3. Szűrés képtérben. Kató Zoltán. Képfeldolgozás és Számítógépes Grafika tanszék SZTE (

7. fejezet: Mutatók és tömbök

8. OSZTÁLY ; ; ; 1; 3; ; ;.

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

tétel: különböző típusú adatokat csoportosít, ezeket egyetlen adatként kezeli, de hozzáférhetünk az elemeihez is

MEMO (Middle European Mathematical Olympiad) Szoldatics József, Dunakeszi

Képszegmentáló eljárások. Orvosi képdiagnosztika 2018 ősz

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

Felvételi tematika INFORMATIKA

GPU Lab. 14. fejezet. OpenCL textúra használat. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Bevezetés a programozásba I.

Adatszerkezetek II. 1. előadás

Java II. I A Java programozási nyelv alapelemei

22. GRÁFOK ÁBRÁZOLÁSA

Diszkréten mintavételezett függvények

C# osztályok. Krizsán Zoltán

Programozás alapjai II. (7. ea) C++ Speciális adatszerkezetek. Tömbök. Kiegészítő anyag: speciális adatszerkezetek

Éldetektálás, szegmentálás (folytatás) Orvosi képdiagnosztika 11_2 ea

Algoritmizálás és adatmodellezés 2. előadás

First Prev Next Last Go Back Full Screen Close Quit

Speciális adatszerkezetek. Programozás alapjai II. (8. ea) C++ Tömbök. Tömbök/2. N dimenziós tömb. Nagyméretű ritka tömbök

Java II. I A Java programozási nyelv alapelemei

Készítette:

Kérdés Lista. A Magyarországon alkalmazott rajzlapoknál mekkora az oldalak aránya?

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI EMELT SZINT Paraméter

Excel VIII. Visual Basic programozás alapok 2. Vektorműveletek Visual Basic nyelven

Sergyán Szabolcs szeptember 21.

Matematikai programok

Programozás alapjai II. (7. ea) C++

Programozás alapjai C nyelv 10. gyakorlat. Standard függvények. Union

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Függvények ábrázolása

Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök Gyakorló feladatok V 1.0 ÓE-NIK-AII,

1. Parciális függvény, parciális derivált (ismétlés)

10. gyakorlat Struktúrák, uniók, típusdefiníciók

Plakátok, részecskerendszerek. Szécsi László

KÉPFELDOLGOZÁS. 10. gyakorlat: Morfológiai műveletek, alakjellemzők

Közösség detektálás gráfokban

Matematikai programok

OOP #14 (referencia-elv)

Kétváltozós függvények differenciálszámítása

Láthatósági kérdések

A médiatechnológia alapjai

Digitális képek szegmentálása. 5. Textúra. Kató Zoltán.

Kiegészítő előadás. Vizsgabemutató VBA. Dr. Kallós Gábor, Fehérvári Arnold, Pusztai Pál Krankovits Melinda. Széchenyi István Egyetem

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

függvény grafikonja milyen transzformációkkal származtatható az f0 : R R, f0(

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK KÖZÉP SZINT Függvények

3. Gyakorlat Ismerkedés a Java nyelvvel

Algoritmusok bonyolultsága

10. gyakorlat Tömb, mint függvény argumentum

Mintapélda1 Hányféleképpen állhatnak sorba egy bolt pénztáránál a vásárlók, ha 3-an, 4-en, 5-en, k-an vannak?

BME MOGI Gépészeti informatika 5.

Programozás C nyelven 5. ELŐADÁS. Sapientia EMTE

Pontműveletek. Sergyán Szabolcs Óbudai Egyetem Neumann János Informatikai Kar február 20.

BME MOGI Gépészeti informatika 7.

Bevezetés a QGIS program használatába Összeálította dr. Siki Zoltán

6. Függvények. 1. Az alábbi függvények közül melyik szigorúan monoton növekvő a 0;1 intervallumban?

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

Infobionika ROBOTIKA. X. Előadás. Robot manipulátorok II. Direkt és inverz kinematika. Készült a HEFOP P /1.0 projekt keretében

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 31. Széchenyi István Egyetem, Gy r

Átírás:

Lényege: valamilyen szempont szerint homogén csoportok képzése a pixelekből. Amit már ismerünk: Küszöbölés, vágás, sávkijelölés hátránya: az azonos csoportba sorolt pixelek nem feltétlenül alkotnak összefüggő halmazt.

Tekintsük a képet egy domborzati térképként.

Képzeljük el, hogy a (környezettől erősen eltérő) lokális minimumhelyeknél feltört a víz. Az üregek folyamatosan töltődnek fel vízzel. Ahol a különböző forrásokból származó víz összefolyna, ott gátat képzünk (szegmensek határai).

Töltsd le a sejteket tartalmazó képet, és olvasd be színesben. https://arato.inf.unideb.hu/szeghalmy.szilvia/kepfeld/img/sejtek.bmp Állíts elő két maszkot, az egyiken a sötétlila, a másikon a sötétbarna sejtek legyenek sötétbarna HSV tartomány: (0, 10, 0) -tól (30, 255, 150) -ig sötétlila HSV tartomány : (80, 10, 0) -tól (170, 255, 150) -ig (javasolt a cvtconvert és az inrange használta) Hozz létre egy képet a markereknek (a "feltörő források") A kép típusa: CV_32S, mérete az eredeti képével azonos Kezdetben minden pixel fekete. A sötétbarna pixeleket állítsd be 128-as értékre. (javasolt: marker.setto( 128, barna_maszk) ) A sötétlila pixeleket állítsd be 255-ös értékre. (Más pozitív érték is lehet, de ezek jól láthatóan eltérnek, ha megjeleníted a képet 255-tel szorozva.) Hajtsd végre a watershed trf-et. watershed(színes_bemeneti_kep, marker_kep); A marker képet convertált CV_8UC1-re vagy rajzold át a 128-as, ill. 255-ös értékű pontokat egy új képre és jelenítsd meg. (javasolt az első megoldás: marker_kep.convertto( uj_kep, CV_8U, 1.0))

Töltsd le a következő képet és olvasd be színesben: https://arato.inf.unideb.hu/szeghalmy.szilvia/kepfeld/img/skate.jpg Állítsd elő a lokális minimumhelyeket tartalmazó maszkot Alakíts szürkeskálássá a képet. Készíts egy s s méretű, CV_8U típusú mátrixot, melynek minden pontja 1, kivéve a középpontja, mely 0. ( s értéke szabályozza a lokális mininum helyek közti távolságot, kb. 5, 7) Erodáld a képet a mátrixszal: erode( a_szurkeskalas_kep, a_cel_kep, a_matrix); lokalis_minimum = a_szurkeskalas_kep < a_cel_kep; //megj: homogén részre nem reagál Hozz létre egy képet a markereknek (a "feltörő források") A kép típusa: CV_32S, mérete az eredeti képével azonos Kezdetben minden pixel fekete. Az összes lokális minimum értéket állítsd egynél nagyobb, egymástól különböző értékre. (pl. bejárod a lokalis_minimum képet, és ha találsz egy előtérpontot, akkor növelsz egy nulláról induló számlálót. A növelt számláló értékét állítod be a markerkép adott pontjában értéknek. Hajtsd végre a watershed trf-et. watershed(színes_bemeneti_kep, marker_kep);

Hozz létre egy szegmens struktúrát / osztályt struct Segment{ vector<cv::point> pts; float feature; //lehet több is int idx; //egy szegmens indexe ; Készíts függvényt, mely összegyűjti a watershed trf. eredményképe alapján a szegmenseket. A numlabel a lokális minimumhelyek száma (watershed trf-nél meghatároztad) void collectsegments(cv::mat_<int> markers, vector<segment>& segments, int numlabel){ A segments vektor méretezd át numlabel-re. Járd be a markerképet m jelölje az aktuális pont markerkép értékét Ha m eleme a [0, numlabel-1] tartománynak akkor a segmens vektor m. eleméhez add hozzá az aktuális pontot //segments[m].push_back( Point(aktualis_pont_koordinatai) );

Készíts függvényt, mely beállítja az előbb begyűjtött szegmensek jellemzőit A numlabel a lokális minimumhelyek száma (watershed trf-nél meghatároztad, ismered) Ha rgb képet akarsz majd átadni, akkor az img-t alakítsd szürkeskálásra cvtconvert( img, gray, COLOR_BGR2GRAY ); void setsegmentsfeatures(const cv::mat img, vector<segment>& segments) { //járd be a szegmens vektort (sima for ciklus) az aktuális szegmes tulajdonságait állítsd be: idx értéke legyen a vektorban elfoglalt helye (ciklusváltozó) feature értéke legyen a szegmens pontjainak átlagos szürkeségi értéke a pts vektor pontjai és az img alapján meghatározhatod

Készíts függvényt, mely meghatározza a hasonló szegmenseket. (ez a fajta megoldás az egymástól távol álló szegmenseket is hasonlónak tudja tekinteni) Az eredmény egy hasonlósági mátrix. 1-es áll egy mezőben, ha az adott sornak megfelelő indexű szegmens hasonlít az adott oszlopban álló szegmensre. A tárolás a felső háromszögben történjen (vagy legyen szimmetrikus) void segmentsformerge(vector<segment>& segments, cv::mat& mergemat, int threshold) { Hozd létre csupa nullával feltöltve a hasonlósági mátrixot (mergemat) mérete a segmensek számával azonos Járd be a szegmenseket ( i = 0; ) Járd be az i-től nagyobb sorszámú szegmenseket ( j = i+1; ) Ha a két szegmens feature értékének eltérése a megadott küszöbérték (threshold) alatt van, akkor a mátrix (i, j). eleme legyen 1-es értékű.

Ha szeretnéd, hogy egymástól távoli szegmensek ne kapcsolódhassanak közvetlenül, akkor a marker képen távolítsd el a határoló vonalakat void dilatemarkers(cv::mat_<int>& markers){ Járd be a mátrixot Ha -1-et értéket találsz, írd felül egy nem -1 értékű szomszédjával. Hozz létre egy szomszédsági mátrixot (szimmetrikus / felső háromszög), ez alapján lehet majd törölni az előző mergemat-ból a nem kívánt elemeket. void neigboursegments(mat_<int> markers, cv::mat& neigbourmat, int numseg) { neigbourmat = Mat::zeros(cv::Size(numSeg, numseg), CV_8UC1); //járd be a marker képet (vigyázz, hogy majd a szomszéd is beférjen a tartományba) //A marker értékek a szegmensek indexével azonosak a korábbi feltöltés miatt jelölje s1 az (i, j) és s2 a (i, j+1) pont markerét Ha egyik sem -1, akkor jelöld a s1. és s2. szegmenst szomszédosnak * neigbourmat.at<uchar>(s1, s2) = neigbourmat.at<uchar>(s2, s1) = 1; Ugyanezeket a lépéseket tedd meg a (i, j) és (i+1, j) pontokra is. *(a dilatemarkers-nél választott szomszédoktól függően maradhat-1-es érték) akkor

Szegmens összeolvasztás, ha a pontosorzatokkal nem foglalkozunk void mergesegments(vector<segment>& segments, cv::mat_<uchar> mergemat) { Járd be a mergemat mátrix FELSŐ háromszög részét ( for( i = 0; ) for (j = i+1 ) ha a mergemat aktuális eleme nem nulla, akkor a j. szegmens indexét állítsd át az i. szegmens indexére. Szegmens összeolvasztás, ha a szegmensek pontjait is meg akarjuk kapni void mergesegments(vector<segment>& segments, cv::mat_<uchar> mergemat) { //ilyenkor visszafelé haladunk (hogy a már összevontat vonjuk később össze) for (int i = mergemat.rows-1; i >=0; --i) { for (int j = mergemat.cols - 1; j >= i + 1; --j) { ha a mergemat aktuális eleme nem nulla, akkor az i. szegmens pontjaihoz (pts) add hozzá a j. szegmens pontjait. //segments[i].insert( )) majd töröld a j. szegmensből a pontokat //segments[j].cleare();

Az alábbi függvény kirajzolja a szegmenseket void drawsegment(cv::inputoutputarray dest, const vector<segment>& segments) { vector<cv::vec3b> lookup( segments.size()); for (int i = 0; i < segments.size(); ++i) lookup[i] = cv::vec3b(rand() % 250 + 50, rand() % 255, rand() % 255); cv::mat& destmat = dest.getmatref(); for (auto s : segments) { if (s.pts.size() > 0) { cv::vec3b color = lookup[s.idx]; for (auto p : s.pts) destmat.at<cv::vec3b>(p) = color;

És végül a függvény, ami az egészet összefogja: void hiersegment(const Mat_<cv::Vec3b> img, Mat_<int> markers, Mat& dest, int numseg, float threshold = 20.0, bool mergeonlyneighbour = false) { //körvonalak eltávolítása a marker képről (mergeonlyneighbour igaz értékénél fontos) dilatemarkers(markers); vector<segment> segments; collectsegments( markers, segments, numseg); setsegmentsfeatures(img, segments); cv::mat mergemat; segmentsformerge(segments, mergemat, threshold); if (mergeonlyneighbours) { //csak ha megcsináltad cv::mat neighbourmat; neigboursegments(markers, neighbourmat, numseg); mergemat &= neighbourmat; mergesegments(segments, mergemat); dest.create(markers.size(), CV_8UC3); drawsegment(dest, segments);

Eredeti Watershed (beépített) (gauss 3x3, sigma=2) markerek a lokális maximumhelyek (5x5) Hasonló szegmensek összevonása összevonás küszöbértéke 15 jellemző: átlagos intenzitás Hasonló, 4-szomszédság szerint kapcsolódó szegmensek összevonása után