Mainsko uenje Digitalna slika 2 Regioni Algoritam oznaavanja
- 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 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> 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 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 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, 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
- Digitalna slika
- Sta je digitalna slika
- Anatomia collo
- Linea semilunare
- Regioni polarizzate
- Bill of rights
- Con che confina la spagna
- Le regioni temperate
- Razvijeni i nerazvijeni regioni u svetu
- Divisione addome
- Regioni pseudoautosomiche
- Regioni inglesi
- Confini della spagna
- Mides sistemi
- Digitalna obrada zvuka
- Seferova funkcija
- Digitalna komora prijava
- Pravougaoni raster
- Digitalna obrada signala
- Biblioteka banja luka
- Digitalna obrada slike
- Digitalna elektronika ftn
- Digitalna komunikacija
- Digitalna pismenost test
- Digitalna knjižnica univerze v ljubljani
- Esmarchova preveza
- Digitalna kompresija
- Mnozenje oktalnih brojeva
- Prostorna rezolucija
- Digitalna komora ispit za agenta
- Digitalna slovenija
- Alfanumerički znakovi primjer
- Digitalna kompresija
- Blumova taksonomija glagoli
- Interline transfer
- Digitalna obrada slike
- Digitalna komora ispit za agenta
- Segmentacija slike
- Digitalna obrada slike
- Istorija kriptografije
- Webnstudy