开发者

using 3x3 Median filter in c#

Hello friends am trying to apply 3x3 median filter to fingerprint image of appxo 500x500. I am using pointers to acess the image data. But i realy cant figure out how to do it. I know the concept very well, but if u guyz help me out in code it will be great help. I searched on net, but i dint get any help. thank you

public void medianfilter(Bitmap image)
{ 
    Byte[,] rtemp = new Byte[3, 3];
    Byte[,] gtemp = new Byte[3, 3]; 
    Byte[,] btemp = new Byte[3, 3]; 
    BitmapData data = image.LockBits(new Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb); 
    int stride = data.Stride; 
    unsafe {
           byte* imgPtr = (byte*)(void*)(data.Scan0);
           int nOffset = stride - image.Width * 3;
           for (int i = 0; i < image.Width; i++)
           { 
               for (int j = 0; j < image.Height; j++)
               { 
                   for (int x = i; x < 3 + i; x++)
                   {
                       for (int y = j; y < 3 + j; y++) {
                           rtemp[x, y] = imgPtr[0];
                           gtemp[x, y] = imgPtr[1];
                           btemp[x, y] = imgPtr[2];
                           imgPtr += 3; } } imgPtr += nOffset;
      开发者_开发问答              }
               }
           }
     }


First of all you are not modifying the Bitmap at all!

You need to dereference the pointer before to apply the change and then you have to UNLOCK the bitmap...

Here's what I had in my old computer graphics course. Modify it as needed.

unsafe
{
    //Go to first pixel, the cast is important
    byte* p = (byte*)imageData.Scan0.ToPointer();

    //For each line
    for (int y = 0; y < bmp.Height; y++)
    {
         //For each pixel (bmp.Width * 3) because jpg has R, G, and B value if the bitmap has an alpha do a *4 multiplier
         for (int x = 0; x < bmp.Width * 3; x++)
         {
                //Invert from the original image
                *p = (byte)(255 - *p);
                //Go to next pointer
                p++;
          }
          //Move pointer to the right end of the line and then go down to a new line
          //Skip the unused space
          p += offset;
     }
}
bmp.UnlockBits(imageData);
bmp.Save(path);

Hope it helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜