private static void PobierzTabele(int[,] tabelaProgów, int ZmianaProgu, Size rozmiar, byte *obraz) { int RóżnicaŚredniej = Otsu.ZnajdywanieRóźnicyŚrednich(obraz, rozmiar) + ZmianaProgu; int x = tabelaProgów.GetLength(1), y = tabelaProgów.GetLength(0); int[] histogram = new int[256]; int MinmalnyPoziomProgu = (int)(RóżnicaŚredniej * MinimalnyPoziomProguFloat) + ZmianaProgu; int[,] tabhist = new int[x, y]; int DzielnikiX = rozmiar.Width / x; int DzielnikiY = rozmiar.Height / y; DzielnikiX += rozmiar.Width % DzielnikiX != 0 ? 1 : 0; DzielnikiY += rozmiar.Height % DzielnikiY != 0 ? 1 : 0; for (int i = 0; i < y; i++) { for (int j = 0; j < x; j++) { histogram = new int[256]; for (int ix = 0; ix < DzielnikiY; ix++) { byte *Miejsce = obraz + rozmiar.Width * (i * DzielnikiY + ix) + j * DzielnikiX; if (i * DzielnikiY + ix >= rozmiar.Height) { break; } for (int jx = 0; jx < DzielnikiX; jx++, Miejsce++) { if (j * DzielnikiX + jx >= rozmiar.Width) { break; } histogram[*Miejsce]++; } } int A, B, S; int Wartość = Otsu.ZnajdywanieRóźnicyŚrednich(histogram, out A, out S, out B) + ZmianaProgu; if (Wartość < MinmalnyPoziomProgu) { Wartość = MinmalnyPoziomProgu; } if (!Sprawdź2Modalność(A, S, B, histogram)) { Wartość = RóżnicaŚredniej; } tabelaProgów[i, j] = Wartość; } } }
private unsafe void testoweToolStripMenuItem_Click(object sender, EventArgs e) { FolderBrowserDialog fsb = new FolderBrowserDialog(); if (fsb.ShowDialog() == DialogResult.OK) { DirectoryInfo ds = new DirectoryInfo(fsb.SelectedPath); FileInfo[] fi = ds.GetFiles("*.jpg"); if (fsb.ShowDialog() == DialogResult.OK) { for (int i = 0; i < fi.Length; i++) { Bitmap f = new Bitmap(fi[i].FullName); f = new Bitmap(f, f.Size.Skaluj((float)1 / RozpoznawanieKuponu.StopieńZmiejszenia)); byte *Mon = OperacjeNaStrumieniu.PonierzMonohormatyczny(f); bool *Bin = ProgowanieAdaptacyjne.ProgowanieZRamką(Mon, f.Size, Otsu.ZnajdywanieRóźnicyŚrednich(Mon, f.Size), 6, -20, true); int * Mapa; //var Obszary= WstepnePrzygotowanie.ZnajdźOpszary(ref Bin, f.Size.Width, f.Size.Height,out Mapa); //Obszary.Sort(); //var Najwiekszy = Obszary[0]; //Zw = WstepnePrzygotowanie.PobierzObszar(Bin, Najwiekszy.Miejsce, f.Size); f = WstepnePrzygotowanie.WskaźnikNaObraz(Bin, f.Size); f.Save(fsb.SelectedPath + "\\" + i.ToString() + "zap.bmp"); //Marshal.FreeHGlobal((IntPtr)Zw); Marshal.FreeHGlobal((IntPtr)Bin); GC.Collect(); } } } }