Image source
wikipedia
Here Gx
and Gy are the two kernels and A is the original image.
At each point in
the image, the resulting gradient approximations can be combined to give the
gradient magnitude, using:
Image source :wikipedia
Code for sobel filter
namespace sobel
{
class sobel
{
Bitmap b, b1;
public Image apply(Image im)
{
int[,] gx = new int[,] { { -1, 0, 1 }, { -2, 0, 2 }, { -1, 0, 1 } }; // The matrix Gx
int[,] gy = new int[,] { { 1, 2, 1 }, { 0, 0, 0 }, { -1, -2, -1 } }; // The matrix Gy
b = (Bitmap)im;
Bitmap b1 = new Bitmap(im);
for (int i = 1; i < b.Height - 1; i++) // loop for the image pixels height
{
for (int j = 1; j < b.Width - 1; j++) // loop for image pixels width
{
float new_x = 0, new_y = 0;
float c;
for (int hw = -1; hw < 2; hw++) //loop for cov matrix
{
for (int wi = -1; wi < 2; wi++)
{
c =(b.GetPixel(j+wi,i+hw).B +b.GetPixel(j+wi,i+hw).R +b.GetPixel(j+ wi,i+hw).G)/3;
new_x += gx[hw + 1, wi + 1] * c;
new_y += gy[hw + 1, wi + 1] * c;
}
}
if (new_x * new_x + new_y * new_y > 128*128)
b1.SetPixel(j, i, Color.Black);
else
b1.SetPixel(j, i, Color.White);
}
}
return (Image)b1;
}
}
The class takes as input a grayscale image .The code to convert an image to grayscale is
given below if required .
public Image gray(Image Im)
{
Bitmap b = (Bitmap)Im;
for (int i = 1; i < b.Height ; i++) // loop for the image pixels height
{
for (int j = 1; j < b.Width ; j++) // loop for the image pixels width
{
Color col;
col = b.GetPixel(j,i );
b.SetPixel(j , i , Color.FromArgb((col.R + col.G + col.B) / 3, (col.R + col.G + col.B) / 3, (col.R + col.G + col.B) / 3));
}
}
return (Image)b;
}
http://www.eggheadcafe.com/tutorials/aspnet/c833c86a-677a-4ff3-b820-43126cbeb1a7/net-gdi-graphics-edge-d.aspx