Это очень простой детектор краев. Подходит для двоичных изображений. Он просто вычисляет разницу между горизонтальными и вертикальными пикселями, например, image.pos [1,1] = image.pos [1,1] - image.pos [1,2] и то же самое для вертикальных разностей. Имейте в виду, что вам также необходимо нормализовать его в диапазоне значений 0..255.
Но! если вам просто нужна программа, используйте Adobe Photoshop.
Код написан на C #.
public void SimpleEdgeDetection()
{
BitmapData data = Util.SetImageToProcess(image);
if (image.PixelFormat != PixelFormat.Format8bppIndexed)
return;
unsafe
{
byte* ptr1 = (byte *)data.Scan0;
byte* ptr2;
int offset = data.Stride - data.Width;
int height = data.Height - 1;
int px;
for (int y = 0; y < height; y++)
{
ptr2 = (byte*)ptr1 + data.Stride;
for (int x = 0; x < data.Width; x++, ptr1++, ptr2++)
{
px = Math.Abs(ptr1[0] - ptr1[1]) + Math.Abs(ptr1[0] - ptr2[0]);
if (px > Util.MaxGrayLevel) px = Util.MaxGrayLevel;
ptr1[0] = (byte)px;
}
ptr1 += offset;
}
}
image.UnlockBits(data);
}
Метод из класса Util
static public BitmapData SetImageToProcess(Bitmap image)
{
if (image != null)
return image.LockBits(
new Rectangle(0, 0, image.Width, image.Height),
ImageLockMode.ReadWrite,
image.PixelFormat);
return null;
}
Если вам нужно больше объяснений или алгоритмов, просто спросите больше информации, не будучи настолько общими.