【Emgu CV教程】9.5、形态学常用操作之形态学梯度

文章目录


一、相关概念

1.什么叫形态学梯度

形态学梯度,就是用膨胀的原始图像减去腐蚀的原始图像,所以它的特性就是去除前景物体的内部区域,只得到前景物体的白色轮廓。一般的用处就是获取二值化图形内物体的轮廓。

2.形态学梯度的函数

Emgu CV中,形态学梯度的函数定义如下:

csharp 复制代码
public static void MorphologyEx(
	IInputArray src,  // 输入图像
	IOutputArray dst, // 输入图像
	MorphOp Gradient, // 操作方式,形态学梯度是MorphOp.Gradient
	IInputArray kernel, // 结构元素大小
	Point anchor, // 锚点位置,默认为中心new Point(-1, -1)
	int iterations, // 膨胀操作迭代次数
	BorderType borderType, // 边界填充方式,一般取默认
	MCvScalar borderValue // 边界值,使用时一般写成new MCvScalar()
)

二、演示

1.原始素材

原始素材srcMat如下图:

2.代码

Emgu CV形态学梯度运算演示代码如下:

csharp 复制代码
Mat tempMat = srcMat.Clone();
Mat gray = new Mat();
Mat dstMat = new Mat();
int kernelX = Convert.ToInt16(TextBoxX.Text.Trim().ToString()); // structuring element结构元素 或者 kernel 内核的X值,水平方向
int kernelY = Convert.ToInt16(TextBoxY.Text.Trim().ToString()); // structuring element结构元素 或者 kernel 内核的X值,垂直方向
int iterations = Convert.ToInt16(TextBoxIterations.Text.Trim().ToString()); // 需要执行运算的次数

// 要转成灰度图
CvInvoke.CvtColor(tempMat, gray, ColorConversion.Bgr2Gray);

// 定义结构元素,其中元素的形状是矩形,size大小由两个文本框决定,默认锚点new Point(-1,-1)是指在中心
Mat element = CvInvoke.GetStructuringElement(ElementShape.Rectangle, new System.Drawing.Size(kernelX, kernelY), new System.Drawing.Point(-1, -1));

// 闭运算,其中锚点位置new Point(-1, -1)代表中心
CvInvoke.MorphologyEx(gray, dstMat, MorphOp.Gradient, element, new System.Drawing.Point(-1, -1), iterations, BorderType.Default, new MCvScalar());
CvInvoke.Imshow("Gray, " + gray.Size.ToString(), gray);
CvInvoke.Imshow("Close, " + dstMat.Size.ToString(), dstMat);

注意哈,结构元素的内核要对水平方向和垂直方向分别定义。

3.运行结果

假设kernelX = 3,kernelY = 3,iterations = 1, 形态学梯度运算结果如下所示:

如果仅仅是需要获取物体轮廓,结构元素是 3 * 3 大小就足够了。如果 kernelX = 1,kernelY =1,iterations = 1, 其灰度图和形态学梯度运算结果如下所示:

为什么形态学梯度图是黑色呢,其实很简单:结构元素内核是 1 * 1,所以膨胀后的图像和腐蚀后的图像是相同的,再相减当然结果都是0了 如果假设kernelX = 19,kernelY =1,iterations = 1 ,输出的图像是这样:

结果很好理解:

  1. 以垂直的直线为例,因为kernelX = 19,水平方向膨胀的多,腐蚀的也多;kernelY =1,垂直方向膨胀和腐蚀的结果是相同的。所以形态学梯度计算的结果就是垂直轮廓变得更宽。
  2. 以水平直线为例,因为kernelX = 19,水平方向膨胀-腐蚀,水平方向轮廓会多出来19个像素;kernelY =1,垂直方向膨胀和腐蚀的结果是相同的。所以形态学梯度计算的结果就是水平轮廓消失了,或者说只剩两端各19个像素那么长。

原创不易,请勿抄袭。共同进步,相互学习。

相关推荐
TAN-90°-28 分钟前
Deep Learning for Computer Vision——Attention and Transformers
人工智能·深度学习·神经网络·机器学习·计算机视觉·cnn·机器翻译
OpenBayes1 小时前
Qwen3.8-27B-FP8 降低大模型部署门槛,开启高效多模态智能体验;MiniMax H3-1K 发布千段视频测试数据集,全面评估 AI 视频生成能力
人工智能·深度学习·计算机视觉·自然语言处理·语音识别·多模态大模型
梦想的颜色2 小时前
ComfyUI 深度硬核科普:节点式 AI 生成框架完整实战(安装、原理、使用场景、避坑)
人工智能·机器学习·计算机视觉·aigc·comfyui·ai视频·图生视频
动物园猫3 小时前
草莓成熟度目标检测数据集:3类别、2,000张图像 | 目标检测
人工智能·目标检测·计算机视觉
leonkay13 小时前
C# 特性(Attribute)——【1】基础讲解
开发语言·青少年编程·面试·c#·.net·个人开发
CSDN_RTKLIB13 小时前
数据库七大符号表
c#
leonkay14 小时前
C# 特性(Attribute)——【2】工业设备参数框架设计
经验分享·面试·架构·c#·学习方法·设计
2501_9065651215 小时前
小创 · 智能助手
开发语言·c#
AI浩17 小时前
关于 Qwen3.8-Next 架构的设计:评估、效率与训练稳定性
人工智能·计算机视觉·自然语言处理
jay神19 小时前
一文讲清楚YOLOv26模型
人工智能·深度学习·yolo·机器学习·计算机视觉