Advertisement
globalbus

sobel

Mar 20th, 2012
581
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.75 KB | None | 0 0
  1.         public static Bitmap SobelFilter(Bitmap original)
  2.         {
  3.             int[][] Gx = new int[][] { //maska po X
  4.                 new int[] {-1,0,1},
  5.                 new int[] {-2,0,2},
  6.                 new int[] {-1,0,1},
  7.             };
  8.             int[][] Gy = new int[][] { //maska po Y
  9.                 new int[] {1,2,1},
  10.                 new int[] {0,0,0},
  11.                 new int[] {-1,-2,-1},
  12.             };
  13.             Bitmap output = new Bitmap(original);
  14.             FastBitmap temp = new FastBitmap(output); //FastBitmap - szybsze obrabianie pikseli
  15.             FastBitmap input = new FastBitmap(original);
  16.             temp.LockImage();
  17.             input.LockImage();
  18.  
  19.             for (int i = 1; i < original.Height - 1; i++) //pętla po wierszach
  20.             {
  21.                 for (int j = 1; j < original.Width - 1; j++)   //pętla po kolumnach (już konkretny pixel)
  22.                 {
  23.                     double new_x = 0, new_y = 0;
  24.                     double c;
  25.                     for (int hw = -1; hw < 2; hw++) //po macierzy
  26.                     {
  27.                         for (int wi = -1; wi < 2; wi++)
  28.                         {
  29.                             c = input.GetPixel(j + wi, i + hw).B;
  30.                             new_x += Gx[hw + 1][ wi + 1] * c;
  31.                             new_y += Gy[hw + 1][ wi + 1] * c;
  32.                         }
  33.                     }
  34.                     int value = Convert.ToInt32(Math.Sqrt(new_x * new_x + new_y * new_y))%255;
  35.                     Color tempcolor = Color.FromArgb(value, value, value);
  36.                     temp.SetPixel(j, i, tempcolor);
  37.                 }
  38.             }
  39.             temp.UnlockImage();
  40.             input.UnlockImage();
  41.             return output;
  42.         }//
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement