图像的形态学梯度运算(基本梯度、外部梯度、内部梯度、X方向梯度、Y方向梯度)的概念、作用以及相关的OpenCV示例代码

博主承接图像处理开发需求,微信/QQ 2487872782
图像处理技术交流QQ群: 27189160

大家看这篇博文前可以先看一看下面这篇博文,下面这篇博文是这篇博文的基础:
详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作

图像形态学腐蚀可以将细小的噪声区域去除,但是会将图像主要区域的面积缩小,造成主要区域的形状发生改变;图像形态学膨胀可以扩充每一个区域的面积,填充较小的空洞,但是会增加噪声的面积。
根据两者的特性将图像腐蚀和膨胀适当的结合,便可以既去除图像中的噪声,又不缩小图像中主要区域的面积;既填充了较小的空洞,又不增加噪声所占的面积。
将图像的腐蚀和膨胀结合产了以下这些运算:
图像的开运算、图像的闭运算、图像的形态学梯度运算、图像的顶帽运算、图像的黑帽运算、图像的击中击不中变换。

本篇博文先介绍图像的形态学梯度运算。

图像腐蚀后图像整体就会缩小,而膨胀就会扩大,用膨胀后的图像减去源图像或腐蚀后的图像,或者用源图像减去腐蚀后的图像,都会去除图像前景色中间的部分得到一个图像的轮廓,这些减法运算就是形态学梯度运算。

原图像膨胀后的图像和腐蚀后图像间的差值图像叫做形态学基本梯度。
膨胀后的图像和原图像间的差值图像叫做形态学外部梯度。
原图像和腐蚀后图像间的差值图像叫做形态学内部梯度。

当kernel核矩阵为全1的行向量时,得到的梯度图称为X方向的梯度图;
当kernel核矩阵为全1的列向量时,得到的梯度图称为Y方向的梯度图。

我们可以利用OpenCV的函数morphologyEx()求得图像形态学的基本梯度。
至于外部梯度、内部梯度、X方向的梯度图、Y方向的梯度图我们可以根据上面的定义较为轻松的计算得到。

求图像的形态学梯度的Python示例代码如下:
代码中用到的图像下载链接:https://pan.baidu.com/s/1_Z7LOoE5S9i7AJcNMk9Gpg?pwd=rhbo

# 博主微信/QQ 2487872782
# 有问题可以联系博主交流
# 有图像处理开发需求请联系博主
# 图像处理技术交流QQ群 271891601

# !/usr/bin/env python
# -*- coding: utf-8 -*-
# OpenCV的版本为4.1

import numpy as np
import cv2 as cv
import sys

img = cv.imread('F:/material/images/P0048-morphological_gradient.jpg')

if img is None:
    print('Failed to read img')
    sys.exit()
cv.imshow('src_img', img)

kernal_1 = cv.getStructuringElement(cv.MORPH_RECT, (5, 5))
imgGradientBasic = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernal_1)
cv.imshow('imgGradientBasic', imgGradientBasic)
imgGradientExternal = cv.dilate(img,  kernal_1)-img
cv.imshow('imgGradientExternal', imgGradientExternal)
imgGradientInternal = img - cv.erode(img, kernal_1)
cv.imshow('imgGradientInternal', imgGradientInternal)

kernal_2 = np.ones((5, 1), np.uint8)
imgGradientX = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernal_2)
cv.imshow('imgGradientX', imgGradientX)

kernal_3 = np.ones((1, 5), np.uint8)
imgGradientY = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernal_3)
cv.imshow('imgGradientY', imgGradientY)

cv.waitKey()

运行结果如下图所示:
在这里插入图片描述
从上面的运行结果可以看出,图像的形态学梯度是可以用来求图像的轮廓的。
并且基本梯度的两条轮廓最粗,外部梯度的两条轮廓距离比内部梯度的两条轮廓距离宽。
在这里插入图片描述
以上运行结果为X方向上的形态学梯度和Y方向上的形态学梯度,结合图像的膨胀操作和腐蚀操作的定义,我们容易想到以上结果的合理性。

扩展阅读:
详解图像形态学操作之图形的腐蚀和膨胀的概念和运算过程,并利用OpenCV的函数erode()和函数dilate()对图像进行腐蚀和膨胀操作
图像的形态学开操作(开运算)和闭操作(闭运算)的概念和作用,并用OpenCV的函数morphologyEx()实现对图像的开闭操作
图像形态学操作之顶帽操作(TopHat)与黑帽操作(BlackHat)
详解图像形态学中的击中击不中变换操作(HMT),并提醒大家OpenCV4中的击中击不中变换操作是有问题的
博主承接图像处理开发需求,微信/QQ 2487872782
图像处理技术交流QQ群: 27189160

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值