Advertisement
Guest User

srbija

a guest
Dec 18th, 2014
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.54 KB | None | 0 0
  1. private void btnObeleziKandidate_Click(object sender, EventArgs e)
  2. {
  3. Bitmap bmp = imageEditorDisplay1.mapa.bmp;
  4. byte[,] oSlika = ImageUtil.bitmapToByteMatrix(bmp);
  5. byte[,] slika = ImageUtil.matrixToBinary(oSlika, 200);
  6.  
  7. int w = slika.GetLength(1);
  8. int h = slika.GetLength(0);
  9.  
  10. kandidati = ImageUtil.regionLabeling(slika);
  11. foreach (RasterRegion reg in kandidati)
  12. {
  13. reg.odrediMomente();
  14. }
  15.  
  16. // ovde spojiti tacke i kukice njima odgovarajucim slovima
  17. kandidati = SpojiTackeIKukice(kandidati);
  18.  
  19. foreach (RasterRegion reg in kandidati)
  20. {
  21. reg.odrediMomente();
  22. }
  23.  
  24. // ovde sloziti slova u redove i kolone
  25. String[] linije = tbTrenningSet.Text.Replace("\r", "").Split('\n');
  26. String slova = tbTrenningSet.Text.Replace("\n", "").Replace("\r", "");
  27. int rr = 0;
  28. List<RasterRegion> slozeniKandidati = new List<RasterRegion>();
  29. for (int i = 0; i < linije.Length; i++)
  30. {
  31. String linija = linije[i];
  32. int N = linija.Length;
  33. List<RasterRegion> red = new List<RasterRegion>();
  34. for (int j = 0; j < N; j++)
  35. {
  36. red.Add(kandidati[rr]);
  37. rr++;
  38. }
  39. red.Sort(new DigitalImage.util.RasterRegion.RComparer());
  40. foreach (RasterRegion regS in red)
  41. slozeniKandidati.Add(regS);
  42. }
  43. kandidati = slozeniKandidati;
  44.  
  45. int regId = 0;
  46. int redBr = 0;
  47. foreach (RasterRegion reg in kandidati)
  48. {
  49. List<Tacka> tacke = new List<Tacka>();
  50. tacke.Add(new Tacka(reg.minX - 1, reg.minY - 1));
  51. tacke.Add(new Tacka(reg.maxX + 1, reg.minY - 1));
  52. tacke.Add(new Tacka(reg.maxX + 1, reg.maxY + 1));
  53. tacke.Add(new Tacka(reg.minX - 1, reg.maxY + 1));
  54. Poligon rec = new Poligon(tacke, Color.FromArgb(10, Color.Green));
  55. imageEditorDisplay1.selectedIndexer.add(rec);
  56. reg.Tag = "" + slova[regId];
  57. if (!alfabet.ContainsKey(reg.Tag))
  58. {
  59. alfabet.Add(reg.Tag, redBr);
  60. alfabetInv.Add(redBr, reg.Tag);
  61. redBr++;
  62. }
  63.  
  64. Labela lbl = new Labela(reg.minX - 1, reg.minY - 1);
  65. lbl.boja = Color.Red;
  66. lbl.labela = reg.Tag;
  67. imageEditorDisplay1.selectedIndexer.add(lbl);
  68. regId++;
  69. }
  70. imageEditorDisplay1.FitImage();
  71. imageEditorDisplay1.Refresh();
  72. }
  73.  
  74. double[, ,] obucavajuciSkup = null;
  75. int brojUzoraka = 0;
  76. private void btnTrainingSet_Click(object sender, EventArgs e)
  77. {
  78. brojUzoraka = kandidati.Count;
  79. obucavajuciSkup = new double[brojUzoraka, 2, 64];
  80. Size size = new Size(64, 64);
  81. for (int uzorak = 0; uzorak < brojUzoraka; uzorak++)
  82. {
  83. RasterRegion reg = kandidati[uzorak];
  84.  
  85. byte[,] regSlika = reg.odrediNSliku(); // ispravi region da stoji uspravno
  86. byte[,] nSlika = ImageUtil.resizeImage(regSlika, size); // resize na 64x64
  87. double[] ulaz = pripremiSlikuZaVNM(nSlika); // kreiraj vektor od 64 elementa na osnovu 64x64 slike
  88. int index = alfabet[reg.Tag]; // nadji koji je index (u izlaznom sloju) obelezeni region
  89.  
  90. // formiranje obucavajuceg skupa
  91. // - na ulaze neuronske mreze dovodi se kreirani vektor od 64 elementa
  92. for (int k = 0; k < ulaz.Length; k++)
  93. {
  94. obucavajuciSkup[uzorak, 0, k] = ulaz[k];
  95. }
  96.  
  97. // - na izlaz koji odgovara indeksu postaviti 1, na ostale 0
  98. for (int ii = 0; ii < alfabet.Count; ii++)
  99. {
  100. if (ii == index)
  101. obucavajuciSkup[uzorak, 1, ii] = 1;
  102. else
  103. obucavajuciSkup[uzorak, 1, ii] = 0;
  104. }
  105. }
  106.  
  107. MessageBox.Show("Obucavajuci skup formiran! ");
  108. }
  109.  
  110. private void btnTraining_Click(object sender, EventArgs e)
  111. {
  112. if (bp != null)
  113. {
  114. brojUzoraka = obucavajuciSkup.GetLength(0) + bp.obucavajuciSkup.GetLength(0);
  115. double[, ,] novi = new double[brojUzoraka, 2, 64];
  116. for (int i = 0; i < brojUzoraka; i++)
  117. {
  118. if (i < obucavajuciSkup.GetLength(0))
  119. {
  120. for (int j = 0; j < obucavajuciSkup.GetLength(1); j++)
  121. {
  122. for (int k = 0; k < obucavajuciSkup.GetLength(2); k++)
  123. {
  124. novi[i, j, k] = obucavajuciSkup[i, j, k];
  125. }
  126. }
  127. }
  128. else
  129. {
  130. for (int j = 0; j < bp.obucavajuciSkup.GetLength(1); j++)
  131. {
  132. for (int k = 0; k < bp.obucavajuciSkup.GetLength(2); k++)
  133. {
  134. novi[i, j, k] = bp.obucavajuciSkup[i - obucavajuciSkup.GetLength(0), j, k];
  135. }
  136. }
  137. }
  138. }
  139.  
  140. obucavajuciSkup = novi;
  141. }
  142. bp = new BackPropagation(obucavajuciSkup);
  143. bp.obuci();
  144.  
  145. Function f1 = new Function(Color.Red, bp.greske, Function.VBAR);
  146. List<Function> ff = new List<Function>();
  147. ff.Add(f1);
  148. FrmChart chart = new FrmChart(ff);
  149. chart.Show();
  150. }
  151. /// <summary>
  152. /// Funkcija sluzi za spajanje kukica iznad slova i tih slova u jedan region.
  153. /// </summary>
  154. /// <param name="regions"></param>
  155. /// <returns></returns>
  156. private List<RasterRegion> SpojiTackeIKukice(List<RasterRegion> regions)
  157. {
  158. // spojiti regione na takav nacin da
  159. // tacke iznad slova (npr. u i,j)
  160. // i kukice iznad slova (npr. u š,č,ć,ž)
  161. // ne budu zasebni regioni, već da pripadaju celom slovu
  162.  
  163.  
  164. //ris ASD (radi za sifru 1)
  165. //Kukice iznad slova
  166. List<RasterRegion> kukiceZaBrisanje = new List<RasterRegion>();
  167. foreach (RasterRegion kukica in regions)
  168. {
  169. foreach (RasterRegion slovo in regions)
  170. {
  171. //za kukice koje su iznad slova
  172. if (kukica.maxY < slovo.minY) //ako je kukica negde iznad slova
  173. {
  174. if (kukica.minX < slovo.maxX && kukica.maxX > slovo.minX) //ako se kukica bar jednim delom nalazi iznad bas tog slova
  175.  
  176. {
  177. int y_raz = slovo.minY - kukica.maxY; //rastojanje izmedju slova i kukice
  178. if (y_raz > 0 && y_raz < ((slovo.maxY - slovo.minY) * 0.40)) //ako to rastojanje nije vece od jedne trecine slova
  179. {
  180. slovo.points.AddRange(kukica.points); //slovo prosirujemo sa kukicom
  181. kukiceZaBrisanje.Add(kukica); //kukica ce biti kasnije obrisana
  182. slovo.minY = kukica.minY; //bez ovog doda tacke i ali ne promeni dimenziju, pa ne radi za 2 kukice
  183. }
  184. }
  185. }
  186.  
  187. }
  188. }
  189. foreach (RasterRegion kukica in kukiceZaBrisanje)
  190. {
  191. regions.Remove(kukica); //iz regiona brisemo kukice, a ostavljamo cela slova
  192. }
  193.  
  194. //Kukice iznad kukice iznad slova (u slucaju kada imamo 2 kukice iznad jednog slova)
  195. kukiceZaBrisanje.Clear();
  196. foreach (RasterRegion kukica in regions)
  197. {
  198. foreach (RasterRegion slovo in regions)
  199. {
  200. //za kukice koje su iznad slova
  201. if (kukica.maxY < slovo.minY) //ako je kukica negde iznad slova
  202. {
  203. if (kukica.minX < slovo.maxX && kukica.maxX > slovo.minX) //ako se kukica bar jednim delom nalazi iznad bas tog slova
  204. {
  205. int y_raz = slovo.minY - kukica.maxY; //rastojanje izmedju slova i kukice
  206. if (y_raz > 0 && y_raz < ((slovo.maxY - slovo.minY) * 0.25)) //ako to rastojanje nije vece od jedne trecine slova
  207. {
  208. slovo.points.AddRange(kukica.points); //slovo prosirujemo sa kukicom
  209. kukiceZaBrisanje.Add(kukica); //kukica ce biti kasnije obrisana
  210. }
  211. }
  212. }
  213.  
  214. }
  215. }
  216. foreach (RasterRegion kukica in kukiceZaBrisanje)
  217. {
  218. regions.Remove(kukica); //iz regiona brisemo kukice, a ostavljamo cela slova
  219. }
  220.  
  221. //Kukica ispod slova
  222. List<RasterRegion> kukiceZaBrisanje2 = new List<RasterRegion>();
  223. foreach (RasterRegion kukica in regions)
  224. {
  225. foreach (RasterRegion slovo in regions)
  226. {
  227. //za kukice koje su ispod slova
  228. if (kukica.maxY > slovo.minY) //ako je kukica negde ispod slova
  229. {
  230. if (kukica.minX < slovo.maxX && kukica.maxX > slovo.minX) //ako se kukica bar jednim delom nalazi iznad bas tog slova
  231. {
  232. int y_raz = kukica.minY - slovo.maxY; //rastojanje izmedju slova i kukice
  233. if (y_raz > 0 && y_raz < ((slovo.maxY - slovo.minY) * 0.35)) //ako to rastojanje nije vece od jedne trecine slova
  234. {
  235. slovo.points.AddRange(kukica.points); //slovo prosirujemo sa kukicom
  236. kukiceZaBrisanje2.Add(kukica); //kukica ce biti kasnije obrisana
  237. }
  238. }
  239. }
  240. }
  241. }
  242. foreach (RasterRegion kukica in kukiceZaBrisanje2)
  243. {
  244. regions.Remove(kukica); //iz regiona brisemo pojedinacne i ostavljamo samo cele
  245. }
  246. //****************************************************************************************************edited
  247. //Kukice iznad kukice iznad slova (u slucaju kada imamo 2 kukice iznad jednog slova)
  248. kukiceZaBrisanje.Clear();
  249. foreach (RasterRegion kukica in regions)
  250. {
  251. foreach (RasterRegion slovo in regions)
  252. {
  253. //za kukice koje su desno od slova
  254. //if (kukica.maxY < slovo.minY) //ako je kukica negde iznad slova
  255. //{
  256. if (kukica.maxY < slovo.maxY && kukica.maxY > slovo.minY) //ako se kukica bar jednim delom nalazi iznad bas tog slova
  257. {
  258. int x_raz = Math.Abs(kukica.maxX - slovo.maxX); //rastojanje izmedju slova i kukice
  259. if (x_raz < ((slovo.maxY - slovo.minY) * 0.30)) //ako to rastojanje nije vece od jedne trecine slova
  260. {
  261. slovo.points.AddRange(kukica.points); //slovo prosirujemo sa kukicom
  262. kukiceZaBrisanje.Add(kukica); //kukica ce biti kasnije obrisana
  263. }
  264. }
  265. //}
  266.  
  267. }
  268. }
  269. foreach (RasterRegion kukica in kukiceZaBrisanje)
  270. {
  271. regions.Remove(kukica); //iz regiona brisemo kukice, a ostavljamo cela slova
  272. }
  273. //****************************************************************************************************
  274. return regions;
  275. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement