Mainsko uenje Digitalna slika 2 Regioni Algoritam oznaavanja

  • Slides: 40
Download presentation
Mašinsko učenje Digitalna slika 2

Mašinsko učenje Digitalna slika 2

Regioni

Regioni

Algoritam označavanja regiona Iskoristiti algoritam prvi u dubinu

Algoritam označavanja regiona Iskoristiti algoritam prvi u dubinu

Algoritam označavanja regiona public static List<Raster. Region> region. Labeling(byte[, ] slika) { List<Raster. Region>

Algoritam označavanja regiona public static List<Raster. Region> region. Labeling(byte[, ] slika) { List<Raster. Region> regions = new List<Raster. Region>(); int w = slika. Get. Length(1); int h = slika. Get. Length(0); byte[, ] ret. Val = new byte[h, w]; int[] ii = {0, 1, 1, 1, 0, -1, -1}; int[] jj = {1, 1, 0, -1, -1, 0, 1 }; int n = ii. Length; byte reg. Num = 0; for (int y = 1; y < h-1; y++) { for (int x = 1; x < w-1; x++) { if (slika[y, x] == 0) { reg. Num++; byte rr = (byte)(reg. Num*50); if( rr== 0) rr = 1; slika[y, x] = rr; List<Point> front = new List<Point>(); Point pt = new Point(x, y); Raster. Region region = new Raster. Region(); region. reg. Id = reg. Num; region. points. Add(pt); regions. Add(region); front. Add(pt); while(front. Count>0){ Point p = front[0]; front. Remove. At(0); for (int t = 0; t < n; t++) { Point point = new Point(p. X + jj[t], p. Y + ii[t]); if (point. X > -1 && point. X < w && point. Y > -1 && point. Y < h) { byte pp = slika[point. Y, point. X]; if (pp == 0) { slika[point. Y, point. X] = slika[y, x]; region. points. Add(point); front. Add(point); } } } } return regions; }

Algoritam označavanja regiona public static List<Raster. Region> region. Labeling(byte[, ] slika) { List<Raster. Region>

Algoritam označavanja regiona public static List<Raster. Region> region. Labeling(byte[, ] slika) { List<Raster. Region> regions = new List<Raster. Region>(); int w = slika. Get. Length(1); int h = slika. Get. Length(0); byte[, ] ret. Val = new byte[h, w]; int[] ii = {0, 1, 1, 1, 0, -1, -1}; int[] jj = {1, 1, 0, -1, -1, 0, 1 }; int n = ii. Length; byte reg. Num = 0; for (int y = 1; y < h-1; y++) { List<Raster. Region> regions = new List<Raster. Region>(); for (int x = 1; x < w-1; x++) { int w = slika. Get. Length(1); if (slika[y, x] == 0) int h = slika. Get. Length(0); { reg. Num++; byte[, ] ret. Val = new byte[h, w]; byte rr = (byte)(reg. Num*50); int[] ii = {0, 1, 1, 1, 0, -1, -1}; if( rr== 0) rr = 1; int[] jj = {1, 1, 0, -1, -1, 0, 1 }; slika[y, x] = rr; int n = ii. Length; List<Point> front = new List<Point>(); Point pt = new Point(x, y); byte reg. Num = 0; Raster. Region region = new Raster. Region(); region. reg. Id = reg. Num; region. points. Add(pt); regions. Add(region); front. Add(pt); while(front. Count>0){ Point p = front[0]; front. Remove. At(0); for (int t = 0; t < n; t++) { Point point = new Point(p. X + jj[t], p. Y + ii[t]); if (point. X > -1 && point. X < w && point. Y > -1 && point. Y < h) { byte pp = slika[point. Y, point. X]; if (pp == 0) { slika[point. Y, point. X] = slika[y, x]; region. points. Add(point); front. Add(point); } } } } return regions; }

Algoritam označavanja regiona for (int y = 1; y < h-1; y++) { for

Algoritam označavanja regiona for (int y = 1; y < h-1; y++) { for (int x = 1; x < w-1; x++) { if (slika[y, x] == 0) public static List<Raster. Region> region. Labeling(byte[, ] slika) { List<Raster. Region> regions = new List<Raster. Region>(); int w = slika. Get. Length(1); int h = slika. Get. Length(0); byte[, ] ret. Val = new byte[h, w]; int[] ii = {0, 1, 1, 1, 0, -1, -1}; int[] jj = {1, 1, 0, -1, -1, 0, 1 }; int n = ii. Length; byte reg. Num = 0; for (int y = 1; y < h-1; y++) { for (int x = 1; x < w-1; x++) { if (slika[y, x] == 0) { reg. Num++; byte rr = (byte)(reg. Num*50); if( rr== 0) rr = 1; slika[y, x] = rr; List<Point> front = new List<Point>(); Point pt = new Point(x, y); Raster. Region region = new Raster. Region(); region. reg. Id = reg. Num; region. points. Add(pt); regions. Add(region); front. Add(pt); while(front. Count>0){ Point p = front[0]; front. Remove. At(0); for (int t = 0; t < n; t++) { Point point = new Point(p. X + jj[t], p. Y + ii[t]); if (point. X > -1 && point. X < w && point. Y > -1 && point. Y < h) { byte pp = slika[point. Y, point. X]; if (pp == 0) { slika[point. Y, point. X] = slika[y, x]; region. points. Add(point); front. Add(point); } } } } return regions; }

Algoritam označavanja regiona slika[y, x] = rr; List<Point> front = new List<Point>(); Point pt

Algoritam označavanja regiona slika[y, x] = rr; List<Point> front = new List<Point>(); Point pt = new Point(x, y); Raster. Region region = new Raster. Region(); region. reg. Id = reg. Num; region. points. Add(pt); regions. Add(region); front. Add(pt); public static List<Raster. Region> region. Labeling(byte[, ] slika) { List<Raster. Region> regions = new List<Raster. Region>(); int w = slika. Get. Length(1); int h = slika. Get. Length(0); byte[, ] ret. Val = new byte[h, w]; int[] ii = {0, 1, 1, 1, 0, -1, -1}; int[] jj = {1, 1, 0, -1, -1, 0, 1 }; int n = ii. Length; byte reg. Num = 0; for (int y = 1; y < h-1; y++) { for (int x = 1; x < w-1; x++) { if (slika[y, x] == 0) { reg. Num++; byte rr = (byte)(reg. Num*50); if( rr== 0) rr = 1; slika[y, x] = rr; List<Point> front = new List<Point>(); Point pt = new Point(x, y); Raster. Region region = new Raster. Region(); region. reg. Id = reg. Num; region. points. Add(pt); regions. Add(region); front. Add(pt); while(front. Count>0){ Point p = front[0]; front. Remove. At(0); for (int t = 0; t < n; t++) { Point point = new Point(p. X + jj[t], p. Y + ii[t]); if (point. X > -1 && point. X < w && point. Y > -1 && point. Y < h) { byte pp = slika[point. Y, point. X]; if (pp == 0) { slika[point. Y, point. X] = slika[y, x]; region. points. Add(point); front. Add(point); } } } } return regions; }

Algoritam označavanja regiona while(front. Count>0){ Point p = front[0]; front. Remove. At(0); for (int

Algoritam označavanja regiona while(front. Count>0){ Point p = front[0]; front. Remove. At(0); for (int t = 0; t < n; t++) { Point point = new Point(p. X + jj[t], p. Y + ii[t]); if (point. X > -1 && point. X < w && point. Y > -1 && point. Y < h) { byte pp = slika[point. Y, point. X]; if (pp == 0) { slika[point. Y, point. X] = slika[y, x]; region. points. Add(point); front. Add(point); } } public static List<Raster. Region> region. Labeling(byte[, ] slika) { List<Raster. Region> regions = new List<Raster. Region>(); int w = slika. Get. Length(1); int h = slika. Get. Length(0); byte[, ] ret. Val = new byte[h, w]; int[] ii = {0, 1, 1, 1, 0, -1, -1}; int[] jj = {1, 1, 0, -1, -1, 0, 1 }; int n = ii. Length; byte reg. Num = 0; for (int y = 1; y < h-1; y++) { for (int x = 1; x < w-1; x++) { if (slika[y, x] == 0) { reg. Num++; byte rr = (byte)(reg. Num*50); if( rr== 0) rr = 1; slika[y, x] = rr; List<Point> front = new List<Point>(); Point pt = new Point(x, y); Raster. Region region = new Raster. Region(); region. reg. Id = reg. Num; region. points. Add(pt); regions. Add(region); front. Add(pt); while(front. Count>0){ Point p = front[0]; front. Remove. At(0); for (int t = 0; t < n; t++) { Point point = new Point(p. X + jj[t], p. Y + ii[t]); if (point. X > -1 && point. X < w && point. Y > -1 && point. Y < h) { byte pp = slika[point. Y, point. X]; if (pp == 0) { slika[point. Y, point. X] = slika[y, x]; region. points. Add(point); front. Add(point); } } } } return regions; }

Šta ako su regini kao na slici?

Šta ako su regini kao na slici?

Osobine regiona Površina Obim Konveksni omotač

Osobine regiona Površina Obim Konveksni omotač

Osobine regiona Momenti Sopstvene vrednosti odnosno sopstveni vektor matrice C određuje orijentaciju i ekscentricitet

Osobine regiona Momenti Sopstvene vrednosti odnosno sopstveni vektor matrice C određuje orijentaciju i ekscentricitet

Osobine regiona Momenti

Osobine regiona Momenti

Detekcija osobina § Obeležja ili osobine slike: interesantni-važni lokalni oblici § Detekcija osobina predstavlja

Detekcija osobina § Obeležja ili osobine slike: interesantni-važni lokalni oblici § Detekcija osobina predstavlja VAŽAN korak u prepoznavanju oblika na slici (metoda bazirana na osobinama) §Primeri osobina: §Ivice §Linije, krive i geometrijski oblici (kružnice, lukovi. . . ) §Uglovi, izolovani regioni §Domenski specifični oblici

Detekcija ivica § Prewitt, Sobel, § Roberts operatori §Laplasian §Canny detektori ivica

Detekcija ivica § Prewitt, Sobel, § Roberts operatori §Laplasian §Canny detektori ivica

Detekcija ivica Idea (kontinualni prostor) • Detekcija “velikih” lokalnih promena intenziteta Digitalne slike: umesto

Detekcija ivica Idea (kontinualni prostor) • Detekcija “velikih” lokalnih promena intenziteta Digitalne slike: umesto parcijalnih izvoda koriste se aproksimacije izvoda razlike Prewitt Sobel

Konvolucija Kontinualni prostor Diskretni prostor

Konvolucija Kontinualni prostor Diskretni prostor

Detekcija ivica Idea (kontinualni prostor) NIZ MASKA KONVOLUCIJA 54 -1 50 0 58 -1

Detekcija ivica Idea (kontinualni prostor) NIZ MASKA KONVOLUCIJA 54 -1 50 0 58 -1 58 112 1 200 0 150 -1 1 150 0 68 -1 68 180 175 170 1 0 -25 -1 -25 1 0 -10 1

250 200 150 100 50 0 160 0 1 2 3 4 5 6

250 200 150 100 50 0 160 0 1 2 3 4 5 6 7 8 140 120 100 80 60 40 20 0 -20 -40 0 1 2 3 4 5 6

http: //community. arm. com/groups/arm-mali-graphics/blog/2014/05/30/fast-fourier-transformation-vectorization-on-arm-mali-gpus

http: //community. arm. com/groups/arm-mali-graphics/blog/2014/05/30/fast-fourier-transformation-vectorization-on-arm-mali-gpus

Detekcija ivica int[, ] maska. A = {{-1, 0, 1 }, { -2, 0,

Detekcija ivica int[, ] maska. A = {{-1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 }}; int[, ] maska. B = {{-1, -2, -1 }, { 0, 0, 0 }, { 1, 2, 1 }}; for (int y = 1; y < h - 1; y++) { for (int x = 1; x < w-1; x++) { int sum. A = 0; int sum. B = 0; for(int yy=-1; yy<2; yy++) for (int xx = -1; xx < 2; xx++) { sum. A += maska. A[yy+1, xx+1] * (int)slika[y + yy, x + xx]; sum. B += maska. B[yy+1, xx+1] * (int)slika[y + yy, x + xx]; } double s = sum. A*sum. A+sum. B*sum. B; nslika[y, x] = (byte)(Math. Sqrt(s)); } }

Detekcija ivica

Detekcija ivica

Hough transformacija Detekcija linija • Algoritam za izdvajanje oblika sa slike: – linije –

Hough transformacija Detekcija linija • Algoritam za izdvajanje oblika sa slike: – linije – krugovi – proizvoljni drugi oblici • Koristi se kao tehnika u – analizi slike – digitalnoj obradi slika – computer vision

Hough transformacija Detekcija linija Prostor digitalne rasterske slike Parametarski prostor

Hough transformacija Detekcija linija Prostor digitalne rasterske slike Parametarski prostor

Hough transformacija Detekcija linija Linija = region koji se sastoji od niza tačaka Tačka

Hough transformacija Detekcija linija Linija = region koji se sastoji od niza tačaka Tačka = dva parametra na osnovu kojih je moguće odrediti liniju Prostor digitalne rasterske slike Parametarski prostor

Hough transformacija Detekcija linija Prostor digitalne rasterske slike Parametarski prostor

Hough transformacija Detekcija linija Prostor digitalne rasterske slike Parametarski prostor

Hough transformacija Detekcija linija Ovakav model nije pogodan za VERTIKALNE linije

Hough transformacija Detekcija linija Ovakav model nije pogodan za VERTIKALNE linije

Hough transformacija Detekcija linija Predstavljanje linije preko POLARNIH koordinata

Hough transformacija Detekcija linija Predstavljanje linije preko POLARNIH koordinata

Hough transformacija Detekcija linija Predstavljanje linije preko POLARNIH koordinata

Hough transformacija Detekcija linija Predstavljanje linije preko POLARNIH koordinata

Hough transformacija Detekcija linija Predstavljanje linije preko POLARNIH koordinata

Hough transformacija Detekcija linija Predstavljanje linije preko POLARNIH koordinata

Hough transformacija Detekcija linija Prostor digitalne rasterske slike Parametarski prostor

Hough transformacija Detekcija linija Prostor digitalne rasterske slike Parametarski prostor

Hough transformacija Detekcija linija

Hough transformacija Detekcija linija

Hough transformacija Detekcija linija Slika šahovske table nakom izdvajanja ivica i segmentacije.

Hough transformacija Detekcija linija Slika šahovske table nakom izdvajanja ivica i segmentacije.

Hough transformacija Detekcija linija Parametarski prostor (Hough prostor)

Hough transformacija Detekcija linija Parametarski prostor (Hough prostor)

Hough transformacija Detekcija linija

Hough transformacija Detekcija linija

Hough transformacija Detekcija linija

Hough transformacija Detekcija linija

Hough transformacija Detekcija linija

Hough transformacija Detekcija linija

Hough transformacija Algoritam (korak 1): kreiranje Hough prostora public void add. Point(int x, int

Hough transformacija Algoritam (korak 1): kreiranje Hough prostora public void add. Point(int x, int y) { for (int t = 0; t < max. Theta-1; t++) { double r = ((x - center. X) * cos. Cache[t]) + ((y - center. Y) * sin. Cache[t]); r += hough. Height; if (r < 0 || r >= double. Height) continue; hough. Array[t, (int)r]++; } num. Points++; }

Hough transformacija Algoritam (korak 2): traženje lokalnih i globalnog maksimuma Hough. Line max. Line

Hough transformacija Algoritam (korak 2): traženje lokalnih i globalnog maksimuma Hough. Line max. Line = null; int max = int. Min. Value; for (int t = 0; t < max. Theta; t++) { for (int r = 0; r < double. Height; r++) { if (hough. Array[t, r] > max) { max = hough. Array[t, r]; double theta = t * theta. Step; max. Line = new Hough. Line(theta, r); } } }

Hough transformacija Algoritam (korak 2): traženje lokalnih i globalnog maksimuma

Hough transformacija Algoritam (korak 2): traženje lokalnih i globalnog maksimuma

Hough transformacija Algoritam

Hough transformacija Algoritam