让代码更简单

C#图像算法膨胀算法实现

重要:本文最后更新于2020-03-19 08:38:27,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

前面已经讲过C#实现图像灰度化二值化的算法,今天讲C#图像算法膨胀算法实现。正好前面已经讲过膨胀算法原理,应该理解起来不是很难。我在网上看到一位网友写的膨胀算法,结构清晰,方便阅读,摘抄下来分享给大家学习。

C#图像算法膨胀算法实现

C#图像算法膨胀算法实现

实现效果如上图所示,左边是二值化后的图像,右边是其膨胀后的图像。膨胀结构体如下图所示,占据三个像素的垂直镜像的L。

膨胀结构体

C#代码

复制
/// <summary>
/// 膨胀算法
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
private Bitmap GetPengZhangImage(Bitmap image)
{
List<Point> setList = new List<Point>();

Bitmap result = image.Clone() as Bitmap;

for (int i = 0; i < result.Width; i++)
{
for (int j = 0; j < result.Height; j++)
{
// 如果应该设置为黑色的
if (SetPixelPengZhang(result, i, j))
{
setList.Add(new Point(i, j));
}
}
}
//膨胀运算
int x, y;
foreach (var item in setList)
{
x = item.X;
y = item.Y;

result.SetPixel(x - 1, y, Color.Black);
result.SetPixel(x, y - 1, Color.Black);
}
return result;
}

// 判断这个点应不应该设置为黑色
protected bool SetPixelPengZhang(Bitmap image, int i, int j)
{
Color c = image.GetPixel(i, j);

if (i != 0 && j != 0)
{
if (image.GetPixel(i, j).ToArgb() == Color.Black.ToArgb())
{
return true;
}
else return false;
}
else return false;
}

注意:这里的膨胀是将黑色区域变大膨胀,不是白色区域,如需白色区域膨胀,可以使用膨胀算法的逆运算腐蚀算法,或者先将二值化图像翻转(黑白颠倒),膨胀后再次翻转。

此代码仅供学习膨胀算法使用,因其存在效率问题,不建议项目中使用。

感觉很棒!可以赞赏支持我哟~

0 打赏
感谢 1人打赏10元

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐