边缘检测类算法(2) (2008-06-06 19:52:52)

hegangben
2025-07-14 / 0 评论 / 0 阅读 / 正在检测是否收录...

/// /// 按 Sobel 算子进行边缘检测

///

/// 位图流

///

public Bitmap Sobel(Bitmap b)

{

Matrix3x3 m = new Matrix3x3();

// -1 -2 -1

// 0 0 0

// 1 2 1

m.Init(0);

m.TopLeft = m.TopRight = -1;

m.BottomLeft = m.BottomRight = 1;

m.TopMid = -2;

m.BottomMid = 2;

Bitmap b1 = m.Convolute((Bitmap)b.Clone());

// -1 0 1

// -2 0 2

// -1 0 1

m.Init(0);

m.TopLeft = m.BottomLeft = -1;

m.TopRight = m.BottomRight = 1;

m.MidLeft = -2;

m.MidRight = 2;

Bitmap b2 = m.Convolute((Bitmap)b.Clone());

// 0 1 2

// -1 0 1

// -2 -1 0

m.Init(0);

m.TopMid = m.MidRight = 1;

m.MidLeft = m.BottomMid = -1;

m.TopRight = 2;

m.BottomLeft = -2;

Bitmap b3 = m.Convolute((Bitmap)b.Clone());

// -2 -1 0

// -1 0 1

// 0 1 2

m.Init(0);

m.TopMid = m.MidLeft = -1;

m.MidRight = m.BottomMid = 1;

m.TopLeft = -2;

m.BottomRight = 2;

Bitmap b4 = m.Convolute((Bitmap)b.Clone());

// 梯度运算

b = Gradient(Gradient(b1, b2), Gradient(b3, b4));

b1.Dispose(); b2.Dispose(); b3.Dispose(); b4.Dispose();

return b;

} // end of Sobel

///

/// 按 Prewitt 算子进行边缘检测

///

/// 位图流

///

public Bitmap Prewitt(Bitmap b)

{

Matrix3x3 m = new Matrix3x3();

// -1 -1 -1

// 0 0 0

// 1 1 1

m.Init(0);

m.TopLeft = m.TopMid = m.TopRight = -1;

m.BottomLeft = m.BottomMid = m.BottomRight = 1;

Bitmap b1 = m.Convolute((Bitmap)b.Clone());

// -1 0 1

// -1 0 1

// -1 0 1

m.Init(0);

m.TopLeft = m.MidLeft = m.BottomLeft = -1;

m.TopRight = m.MidRight = m.BottomRight = 1;

Bitmap b2 = m.Convolute((Bitmap)b.Clone());

// -1 -1 0

// -1 0 1

// 0 1 1

m.Init(0);

m.TopLeft = m.MidLeft = m.TopMid = -1;

m.BottomMid = m.BottomRight = m.MidRight = 1;

Bitmap b3 = m.Convolute((Bitmap)b.Clone());

// 0 1 1

// -1 0 1

// -1 -1 0

m.Init(0);

m.TopMid = m.TopRight = m.MidRight = 1;

m.MidLeft = m.BottomLeft = m.BottomMid = -1;

Bitmap b4 = m.Convolute((Bitmap)b.Clone());

// 梯度运算

b = Gradient(Gradient(b1, b2), Gradient(b3, b4));

b1.Dispose(); b2.Dispose(); b3.Dispose(); b4.Dispose();

return b;

} // end of Prewitt

分享:

0

评论 (0)

取消