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); }
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)); }