形态学操作

形态学(Mathematical Morphology)是图像处理中重要的方法,专注于从图像中提取结构信息和形态特征。主要应用于二值图像,通过基本的形态学操作对图像进行变换和处理。
基本操作
腐蚀(Erosion**):通过结构元素(核)缩小图像中亮度较高区域的边界,用于去除小物体或
者连接物体。
膨胀(Dilation**)
:通过结构元素扩展图像中亮度较高区域的边界,增加物体的大小或者连接
相邻物体。
组合操作
开运算(Opening**)先进行腐蚀后再进行膨胀,用于去除小物体同时保留大物体的特征。
闭运算(Closing**)
先进行膨胀后再进行腐蚀,可以填充小的空洞同时保留大的物体。
高级操作
形态学梯度(Morphological Gradient**)膨胀图像减去腐蚀图像,用于检测图像中的边 界。
顶帽运算(Top Hat**)
原始图像减去开运算的结果,用于提取图像中的小物体或细节。
黑帽运算(Black Hat**)闭运算的结果减去原始图像,用于提取图像中的大物体或背景。
应用领域
视觉检测:边缘检测、形状分析和对象分割。
文字识别(OCR**)
:预处理文本图像以提高字符识别准确性

医学图像处理增强和分割医学图像中的细胞结构和器官轮廓等。
结构元**-**核:
在形态学操作中,结构元(kernel)是一个核心组件,决定了形态学操作的形状和大小。结构元通常是
一个小矩阵,用于在图像中扫描并执行形态学操作。
精确定义形态学操作: 结构元定义了形态学操作的形状和大小,使我们能够针对特定的图像特征进行精确的处理。
多样性和灵活性: 结构元可以有不同的形状和大小,如矩形、椭圆和十字形。
局部处理: 结构元通过局部扫描图像进行操作,这种局部处理方式能够在保持全局特征的同时,细 致地处理图像的局部细节。
核(kernel)其实就是一个小区域,通常为3*3、5*5、7*7大小,有着其自己的结构,比如矩形结构、椭圆结构、十字形结构。
Mat getStructuringElement(int shape, Size ksize, Point anchor = Point(-1, -1));
参数说明:
返回值:指定大小和形状的结构元素-核。
shape:指定结构元素的形状。常用的形状类型包括:
MORPH_RECT :矩形结构元素,所有元素值均为 1。适合处理规则形状的对象。
MORPH_ELLIPSE :椭圆形结构元素,适合处理圆形或椭圆形对象
MORPH_CROSS :十字形结构元素,适合处理线状结构
常用的形状类型及对应的整形值
MORPH_RECT = 0 (矩形结构元)
MORPH_CROSS = 1 (十字形结构元)
MORPH_ELLIPSE = 2 (椭圆结构元)
ksize: Size 类型,表示结构元素的大小。

anchor(可选):结构元素的锚点,即参考点,表示结构元素在图像上的应用位置。
腐蚀
腐蚀操作是一种形态学操作,用于图像处理,特别是二值图像的处理。其主要作用是收缩或细化图像中的前景部分,通过去除边界点实现噪声去除和元素分割等功能。
腐蚀操作步骤

  1. 将结构元的中心与图像中的一个像素对齐。
  2. 将结构元中值为1的区域与被覆盖的图像区域对应的像素值相乘,取这些像素值中的最小值。
  3. 结构元中心对应的像素点的像素值为此最小值。
  4. 移动结构元到下一个像素,重复上述步骤,直到处理完所有像素。
    结果是二值化图像中的白色部分被压缩,使图像中的前景部分"变瘦"。
    应用:
    去除噪声:腐蚀操作可以消除图像中的小噪声点。
    细化形状:使图像中的前景部分变瘦,突出结构细节。
    元素分割:通过腐蚀操作,可以将连在一起的对象分割开。
    腐蚀操作通过在二值图像上滑动结构元,并在每个位置计算最小值,来收缩前景部分。这一操作能够去除噪声、分割元和细化形状。
    void erode(InputArray src,
    OutputArray dst,
    InputArray kernel,
    Point anchor = Point(-1, -1),
    int iterations = 1,
    int borderType = BORDER_CONSTANT,
    const Scalar& borderValue = morphologyDefaultBorderValue()
    );
    参数说明
    src :需要进行腐蚀操作。可以是单通道或多通道图像。
    dst:腐蚀操作后的输出图像,类型与尺寸与输入图像相同。
    kernel :腐蚀操作中使用的结构元(或核)。
    anchor :结构元中锚点的位置。默认值为 Point(-1, -1) ,表示锚点位于结构元的中心。
    iterations (可选):腐蚀操作的迭代次数,默认值为****1
    borderType*(可选)*:边界填充类型,处理图像边界时指定填充方式。默认值为
    BORDER_CONSTANT 。

borderValue*(可选)*:在边界填充类型为 BORDER_CONSTANT 时,指定填充值。默认值为0。
膨胀
膨胀与腐蚀刚好相反,膨胀操作将与当前对象(前景)接触到的背景点合并到当前对象内,从而实现将图像 的边界点向外扩张。
膨胀操作

  1. 将结构元的中心与图像中的一个像素对齐。
  2. 结构元值为1的区域与被结构元覆盖的对应区域进行相乘,取这些像素值中的最大值。
  3. 最大值赋值给结构元中心对应的图像像素。
  4. 移动结构元到下一个像素,重复上述步骤,直到处理完所有像素。
    void cv::dilate ( InputArray src,
    OutputArray dst,
    InputArray kernel,
    Point anchor = Point(-1,-1),
    int iterations = 1,
    int borderType = BORDER_CONSTANT,
    const Scalar & borderValue = morphologyDefaultBorderValue()
    );
    dst:膨胀操作后的目标图像。输出图像与输入图像 src 类型和大小相同。
    src:输入的原始图像,需要进行膨胀操作的图像。
    kernel:膨胀操作时使用的结构元(或核)。
    anchor(可选):锚点是结构元的中心点。
    iterations(可选):膨胀操作的迭代次数,默认为 1 。-重复的次数
    borderType:指定图像边界的处理方式。

borderValue(可选):当使用 cv::BORDER_CONSTANT 时,用于设置填充的常量值,默认为 0 .
OpenCV****中的形态学运算
void cv::morphologyEx(InputArray src,
OutputArray dst,
int op,
InputArray kernel,
Point anchor = Point(-1, -1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar& borderValue =
morphologyDefaultBorderValue()
);
src:需要进行形态学运算的原始图像。
dst :形态学运算后的输出图像,与输入图像 src 类型和大小相同。
op :指定形态学操作的类型。常见的类型包括:

kernel:用于形态学运算的结构元素,可以通过 cv.getStructuringElement 函数生成。
anchor(可选):结构元素的锚点,即参考点。默认值为 (-1, -1) ,表示锚点位于结构元素的中
心。
iterations(可选):形态学运算的迭代次数,默认值为1。
borderType(可选):像素外插法,默认为 cv.BORDER_CONSTANT 。

borderValue(可选):边界像素的填充值,默认情况下为 0。
开运算
开运算是先将图像腐蚀,再对腐蚀的结果进行膨胀。开运算可以用于去噪、计数等。

  1. 去除小物体和噪声

  2. 平滑图像边界

  3. 提取大物体的主要特征

  4. 计数
    闭运算
    闭运算是先膨胀、后腐蚀的运算,它有助于关闭前景物体内部的小孔,或去除物体上的小黑点,同时保
    持物体的整体形状,还可以将不同的前景图像进行连接。
    1**、噪声消除**
    2**、孔洞填充**

3**、对象连接**
形态学梯度运算
通过对图像进行膨胀操作后减去腐蚀操作的结果,从而提取出原始图像中前景物体的边缘。
原理与步骤

  1. 膨胀操作(Dilation: 膨胀操作会扩展图像中前景(白色)像素的边界,使得前景区域变大。
  2. 腐蚀操作(Erosion: 腐蚀操作会收缩图像中前景(白色)像素的边界,使得前景区域变小。
  3. 边缘提取: 将膨胀操作后的图像减去腐蚀操作后的图像。

利用形态学梯度运算可以清晰地突出前景物体的轮廓,捕捉图像当中的边界信息。
礼帽运算
顶帽运算是一种形态学图像处理技术,其主要用于提取图像中的细微结构和亮斑区域,进而突出图像中的特定信息。它的基本原理是将原始图像减去其开运算(Opening)结果。
优点:
提取细微结构.
突出亮斑区域.

噪声信息提取.
黑帽运算
黑帽运算(Black-hat Transformation)是一种在形态学图像处理中常用的技术。
原理
黑帽运算将闭运算处理后的图像减去原始图像。
应用

  1. 提取细小暗斑
  2. 检测孔洞和缝隙

相关推荐
NAGNIP2 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
冬奇Lab3 小时前
一天一个开源项目(第36篇):EverMemOS - 跨 LLM 与平台的长时记忆 OS,让 Agent 会记忆更会推理
人工智能·开源·资讯
冬奇Lab3 小时前
OpenClaw 源码深度解析(一):Gateway——为什么需要一个"中枢"
人工智能·开源·源码阅读
AngelPP7 小时前
OpenClaw 架构深度解析:如何把 AI 助手搬到你的个人设备上
人工智能
宅小年7 小时前
Claude Code 换成了Kimi K2.5后,我再也回不去了
人工智能·ai编程·claude
九狼7 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
ZFSS7 小时前
Kimi Chat Completion API 申请及使用
前端·人工智能
天翼云开发者社区8 小时前
春节复工福利就位!天翼云息壤2500万Tokens免费送,全品类大模型一键畅玩!
人工智能·算力服务·息壤
知识浅谈8 小时前
教你如何用 Gemini 将课本图片一键转为精美 PPT
人工智能
Ray Liang9 小时前
被低估的量化版模型,小身材也能干大事
人工智能·ai·ai助手·mindx