Mainsko uenje Digitalna slika 2 Regioni Algoritam oznaavanja



![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>](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-4.jpg)
![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>](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-5.jpg)

![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](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-7.jpg)
![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](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-8.jpg)











![Detekcija ivica int[, ] maska. A = {{-1, 0, 1 }, { -2, 0, Detekcija ivica int[, ] maska. A = {{-1, 0, 1 }, { -2, 0,](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-20.jpg)




















- Slides: 40

Mašinsko učenje Digitalna slika 2

Regioni

Algoritam označavanja regiona Iskoristiti algoritam prvi u dubinu
![Algoritam označavanja regiona public static ListRaster Region region Labelingbyte slika ListRaster Region Algoritam označavanja regiona public static List<Raster. Region> region. Labeling(byte[, ] slika) { List<Raster. Region>](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-4.jpg)
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 ListRaster Region region Labelingbyte slika ListRaster Region Algoritam označavanja regiona public static List<Raster. Region> region. Labeling(byte[, ] slika) { List<Raster. Region>](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-5.jpg)
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 (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 slikay x rr ListPoint front new ListPoint Point pt Algoritam označavanja regiona slika[y, x] = rr; List<Point> front = new List<Point>(); Point pt](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-7.jpg)
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 whilefront Count0 Point p front0 front Remove At0 for int Algoritam označavanja regiona while(front. Count>0){ Point p = front[0]; front. Remove. At(0); for (int](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-8.jpg)
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?

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

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 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

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 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
![Detekcija ivica int maska A 1 0 1 2 0 Detekcija ivica int[, ] maska. A = {{-1, 0, 1 }, { -2, 0,](https://slidetodoc.com/presentation_image_h/874661aabd769f72c963c070766b5c9a/image-20.jpg)
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

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 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 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 Prostor digitalne rasterske slike Parametarski prostor

Hough transformacija Detekcija linija

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

Hough transformacija Detekcija linija Parametarski prostor (Hough prostor)

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 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 = 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