Example #1
0
        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ść;
                }
            }
        }
Example #2
0
        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();
                    }
                }
            }
        }