图像处理之形态学梯度计算

源代码基于OpenCV实现,原因是太懒了,不想再用Java从头写了!

一:概念介绍

形态学操作膨胀与腐蚀图像形态学中最基本的两个形态学操作、常常被组合起来一起使用实现一些复杂的图像形态学操作,计算图像的形态学梯度是形态学重要操作之一是有膨胀和腐蚀基础操作适当的组合形成。可以计算的梯度常见如下四种:

基本梯度

基本梯度是用膨胀后的图像减去腐蚀后的图像得到差值图像,称为梯度图像也是OpenCV中支持的计算形态学梯度的方法,而此方法得到梯度有被称为基本梯度。

内部梯度

是用原图像减去腐蚀之后的图像得到差值图像,称为图像的内部梯度

外部梯度

图像膨胀之后再减去原来的图像得到的差值图像,称为图像的外部梯度。

方向梯度

方向梯度是使用X方向与Y方向的直线作为结构元素之后得到图像梯度,X的结构元素分布膨胀与腐蚀得到图像之后求差值得到称为X方向梯度,用Y方向直线做结构分别膨胀与腐蚀之后得到图像求差值之后称为Y方向梯度。

二:主要API介绍

OpenCV中腐蚀与膨胀操作的API分别为:

erode() // 腐蚀 第一个参数是输入图像、第二个参数是输出图像、第三个参数结构元素、第四个表示锚点位置,默认情况下Point(-1, -1),膨胀跟腐蚀的输入参数一样。

dilate() // 膨胀

使用的结构元素通过如下的API创建:

getStructuringElement()创建结构元素,第一个参数是结构元素形状、第二个参数大小一定要是奇数。

第三个参数表示中心位置,默认Point(-1, -1)

两张图像相减的API如下:

subtract()第一个与第二个参数为输入图像Src1和Src2第三个参数是得到的计算后图像dst

计算公式是Dst = saturate(Src1 - Src2)

三:运行效果

XY方向

演示代码如下:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>using namespace std;
using namespace cv;int main(int argc, char** argv) {Mat src, gray_src, dst;src = imread("D:/vcprojects/images/carlines.png");if (!src.data) {printf("could not load image...\n");return -1;}char input_title[] = "input image";char output_title[] = "Basic Gradient Image";namedWindow(input_title, CV_WINDOW_AUTOSIZE);namedWindow(output_title, CV_WINDOW_AUTOSIZE);imshow(input_title, src);cvtColor(src, gray_src, CV_BGR2GRAY);// calculate basic gradient same as morphologyEx() in opencvMat kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));Mat erode_ouput, dilate_output;erode(gray_src, erode_ouput, kernel, Point(-1, -1));dilate(gray_src, dilate_output, kernel, Point(-1, -1));// calculate basic gradientsubtract(dilate_output, erode_ouput, dst, Mat());imshow(output_title, dst);// calculate internal gradientMat internalGradientImg;subtract(gray_src, erode_ouput, internalGradientImg, Mat());imshow("Internal Gradient", internalGradientImg);// calculate external gradientMat externalGradientImg;subtract(dilate_output, gray_src, externalGradientImg, Mat());imshow("External Gradient", externalGradientImg);// directional gradientMat hse = getStructuringElement(MORPH_RECT, Size(src.cols/16, 1), Point(-1, -1));Mat vse = getStructuringElement(MORPH_RECT, Size(1, src.rows/16), Point(-1, -1));Mat erode_direct, dilate_direct;Mat binImg, xdirectImg, ydirectImg;// 二值化方法threshold(gray_src, binImg, 0, 255, CV_THRESH_OTSU | CV_THRESH_BINARY);// X directionerode(binImg, erode_direct, hse, Point(-1, -1));dilate(binImg, dilate_direct, hse, Point(-1, -1));subtract(dilate_direct, erode_direct, xdirectImg, Mat());imshow("X directional gradient", xdirectImg);// Y directionerode(binImg, erode_direct, vse, Point(-1, -1));dilate(binImg, dilate_direct, vse, Point(-1, -1));subtract(dilate_direct, erode_direct, ydirectImg, Mat());imshow("Y directional gradient", ydirectImg);waitKey(0);return 0;
}

欢迎加入图像处理学习群,里面高手林立!

图像处理之形态学梯度计算相关推荐

  1. OpenCV与图像处理学习六——图像形态学操作:腐蚀、膨胀、开、闭运算、形态学梯度、顶帽和黑帽

    OpenCV与图像处理学习六--图像形态学操作:腐蚀.膨胀.开.闭运算.形态学梯度.顶帽和黑帽 四.图像形态学操作 4.1 腐蚀和膨胀 4.1.1 图像腐蚀 4.1.2 图像膨胀 4.2 开运算与闭运 ...

  2. Emgu CV4图像处理之膨胀和腐蚀、梯度计算、开闭运算14(C#)

    本文测试环境: win10  64位 vistual studio 2019 Emgu CV 4.6.0 环境配置准备: 1 新增控制台项目,.net framework为4.7.2 2  把win- ...

  3. 《OpenCV3编程入门》学习笔记6 图像处理(四)形态学滤波(2):开运算、闭运算、形态学梯度、顶帽、黑帽

    6.4 形态学滤波(2):开运算.闭运算.形态学梯度.顶帽.黑帽 高级形态学变换,基于腐蚀与膨胀,利用morphologyEx函数实现 6.4.1 开运算 1.腐蚀后膨胀的过程,数学表达式:dst=o ...

  4. [Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门.OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子.图像增强技术.图像分割等,后期结合深度学习研究图像识别 ...

  5. 【OpenCV入门教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/23184547 作者:毛星云(浅墨) ...

  6. 形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑

    说明 开运算:先腐蚀后膨胀的过程,可以用来消除小物体.在纤细点处分离物体.平滑较大物体的边界的同时并不明显改变其面积. 闭运算:先膨胀后腐蚀的过程,能够排除小型黑洞(黑色区域). 形态学梯度:膨胀图与 ...

  7. 图像形态学概要-腐蚀、膨胀、开运算、闭运算、形态学梯度(形态学边缘提取)、顶帽操作、黑帽操作

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 图像形态学中两种最基本的操作就是对图形的腐蚀和膨 ...

  8. OpenCV图像处理(十一)---图像梯度

    安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...

  9. Python图像处理:形态学操作

    来源:DeepHub IMBA本文约1400字,建议阅读5分钟 形态学的操作主要是去除影响图像形状和信息的噪声.形态学运算在图像分割中非常有用,可以得到无噪声的二值图像. 形态学方法 当图像经过预处理 ...

最新文章

  1. wikioi 1083 Cantor表
  2. Mysql与sqlite注意
  3. MongoDB图形化管理工具
  4. 它抢不走程序员的饭碗,但是会让一部分人瑟瑟发抖
  5. Codeforces Gym101257F:Islands II(求割点+思维)
  6. HDOJ 1171 Big Event in HDU
  7. net use 命令集合详解
  8. c#反混淆工具de4dot 一般混淆都可以解决
  9. python解析nginx配置文件_Nginx情景分析之配置文件解析
  10. linux系统交换空间,Linux中如何使用和管理交换空间
  11. 学生签到系统c代码_C语言之学生管理系统代码(完整)
  12. 蓝桥杯代码测评使用指南
  13. 适配器模式(Adapter Pattern)
  14. 组建Ad Hoc模式无线局域网
  15. python代替按键精灵 游戏内失灵_按键精灵是如何做到不被程序屏蔽的?python34中如何将命令行传递给python脚 节流参数转换为unicode字符串...
  16. 数据库系统原理(1)--绪论
  17. krpano plugin interface
  18. C语言 第六章 多重循环
  19. web服务器攻击的八种方式
  20. 软工网络15个人作业3(201521123007谭燕)

热门文章

  1. jQuery在asp.net中实现图片自动滚动
  2. jpa入门 ,引自csdn感觉写的很全面
  3. vue实践06-项目实践
  4. 向高端应用进军 杰和推高计算四路服务器
  5. ROS机器人程序设计(原书第2版)3.1.2 ROS节点启动时调用gdb调试器
  6. 【原创】brew 和 brew cask
  7. MyEclipse_8.5+flex_4+Blazeds配置
  8. 原生JS实现粘贴到剪贴板
  9. SAS接口互连完全指南
  10. 易观的大数据革命 分析师与机器人协同办公