internal unsafe static ProstokątNaObrazie PobierzNaPodstawieCzestotliwosci(Bitmap zmiejszony, bool Odwrotnosc)
        {
            byte *obraz = ZmieńPoCzestotliwosciach(zmiejszony);

            Otsu.Progój(Odwrotnosc, zmiejszony.Size.WielkoścWPix(), obraz);

            var a = NaPodtawieMonohromatyka(zmiejszony, obraz);

            return(a);
        }
        internal unsafe static ProstokątNaObrazie WyrównianieŚwiatła(Bitmap zmiejszony, bool Odwrotnosc)
        {
            WyrównywanieObrazu wb = new WyrównywanieObrazu();

            wb.Naładuj(zmiejszony, zmiejszony.Size.Skaluj(0.5f));
            byte *obraz = wb.ZamianaWMonohromatyczny(zmiejszony);

            Otsu.Progój(Odwrotnosc, zmiejszony.Size.WielkoścWPix(), obraz);

            var a = NaPodtawieMonohromatyka(zmiejszony, obraz);

            return(a);
        }
Exemple #3
0
        public static unsafe bool *ProgójGradientowo(byte *Wejście, Size Rozmiar, bool Odwrotność = false)
        {
            int   X = Rozmiar.Width;
            int   Y = Rozmiar.Height;
            long  Suma = 0, SumaWag = 0;
            int   XP = X + 1;
            byte *PoczątekDziałania = Wejście + XP;
            int   IlośćPentli       = Rozmiar.Width * Rozmiar.Height;

            IlośćPentli -= XP * 2;
            for (int i = 0; i < IlośćPentli; i++, PoczątekDziałania++)
            {
                int RóżnicaX = PoczątekDziałania[-1] - PoczątekDziałania[1], RóźnicaY = PoczątekDziałania[-X] - PoczątekDziałania[X];
                RóżnicaX = RóżnicaX < 0 ? -RóżnicaX : RóżnicaX;
                RóźnicaY = RóźnicaY < 0 ? -RóźnicaY : RóźnicaY;
                int Waga = RóźnicaY < RóżnicaX ? RóżnicaX : RóźnicaY;
                Suma    += Waga * *PoczątekDziałania;
                SumaWag += Waga;
            }
            Suma /= SumaWag;
            return(Otsu.Progój(Odwrotność, X * Y, (int)Suma, Wejście));
        }