public unsafe Image ThresholdUM(float thresh)
{
Bitmap b = new Bitmap(_image);
BitmapData bData = b.LockBits(new Rectangle(0, 0, _image.Width, _image.Height), ImageLockMode.ReadWrite, b.PixelFormat);
byte bitsPerPixel = GetBitsPerPixel(bData.PixelFormat);
int size = bData.Stride * bData.Height;
byte* scan0 = (byte *)bData.Scan0.ToPointer();
int colWidth = bData.Width * bitsPerPixel / 8;
for (int i = 0; i < bData.Height; ++i)
{
for (int j = 0; j < bData.Width; ++j)
{
byte* data = scan0 + i*bData.Stride+j*bitsPerPixel / 8;
double magnitude = Math.Sqrt(Math.Pow(data[0], 2) + Math.Pow(data[1], 2) + Math.Pow(data[2], 2));
if (magnitude < thresh)
{
data[0] = 0;
data[1] = 0;
data[2] = 0;
}
else
{
data[0] = 255;
data[1] = 255;
data[2] = 255;
}
}
}
b.UnlockBits(bData);
return b;
}