Witam,
mam mały problem z przetwarzaniem pliku graficznego. Chcę zastosować filtr 3x3 (obojętne wartości macierzy) ale coś nie działa poprawnie (otrzymuje albo obraz czarny albo bardzo rozjaśniony, filtry w ogóle nie działają).
Kod(same dodawanie maski + edycja obrazu):
double[,] mask = new double[,] {{-1,-1,-1},
{-1, 9,-1},
{-1,-1,-1}};
int[] result = new int[3]; //tablica kolorów RGB result[0]=R, result[1]=G, result[2]=B
double factor = 1.0;
double bias = 0.0;
Bitmap img = new Bitmap(pictureBox1.Image);
for (int a = 1; a < newBitmap.Width-1; a++) //przechodze po szerokosci obrazka
{
for (int b = 1; b < newBitmap.Height-1; b++)//przechodze po wysokosci obrazka
{
double red = 0.0;
double green = 0.0;
double blue = 0.0;
Color originalColor2 = newBitmap.GetPixel(a, b); //przechwytuje kolor pixela
for (int x = 0; x < 3; x++) //czytam macierz po "x"
{
for (int y = 0; y < 3; y++) //czytam macierz po "y"
{
red += originalColor2.R * mask[x,y];
green += originalColor2.G * mask[x,y];
blue += originalColor2.B * mask[x,y];
}
}
result[0] = Math.Min(Math.Max((int)(factor * red + bias), 0), 255); //sprawdzam czy mieszczę sie w zakresie <0.255>
result[1] = Math.Min(Math.Max((int)(factor * green + bias), 0), 255); //sprawdzam czy mieszczę sie w zakresie <0.255>
result[2] = Math.Min(Math.Max((int)(factor * blue + bias), 0), 255); //sprawdzam czy mieszczę sie w zakresie <0.255>
Color newColor2 = Color.FromArgb(result[0], result[1], result[2]); //tworzę nowy kolor
img.SetPixel(a, b, newColor2); // ustawiam nową wartość pixela
pictureBox3.Image = img; //wyswietlam obraz
}
}
nie wiem gdzie może być ewentualny błąd (oparłem się na informacjach i kodzie ze strony http://www.algorytm.org/przetwarzanie-obrazow/filtrowanie-obrazow.html) (VisualStudio2013 c#)
Proszę o pomoc.