首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 23-09-22 20:42
  • 3839
  • 8378
blog.csdn.net

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

源代码基于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方向


演示代码如下:

  1. #include
  2. #include
  3. #include
  4. using namespace std;
  5. using namespace cv;
  6. int main(int argc, char** argv) {
  7. Mat src, gray_src, dst;
  8. src = imread("D:/vcprojects/images/carlines.png");
  9. if (!src.data) {
  10. printf("could not load image... ");
  11. return -1;
  12. }
  13. char input_title[] = "input image";
  14. char output_title[] = "Basic Gradient Image";
  15. namedWindow(input_title, CV_WINDOW_AUTOSIZE);
  16. namedWindow(output_title, CV_WINDOW_AUTOSIZE);
  17. imshow(input_title, src);
  18. cvtColor(src, gray_src, CV_BGR2GRAY);
  19. // calculate basic gradient same as morphologyEx() in opencv
  20. Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5), Point(-1, -1));
  21. Mat erode_ouput, dilate_output;
  22. erode(gray_src, erode_ouput, kernel, Point(-1, -1));
  23. dilate(gray_src, dilate_output, kernel, Point(-1, -1));
  24. // calculate basic gradient
  25. subtract(dilate_output, erode_ouput, dst, Mat());
  26. imshow(output_title, dst);
  27. // calculate internal gradient
  28. Mat internalGradientImg;
  29. subtract(gray_src, erode_ouput, internalGradientImg, Mat());
  30. imshow("Internal Gradient", internalGradientImg);
  31. // calculate external gradient
  32. Mat externalGradientImg;
  33. subtract(dilate_output, gray_src, externalGradientImg, Mat());
  34. imshow("External Gradient", externalGradientImg);
  35. // directional gradient
  36. Mat hse = getStructuringElement(MORPH_RECT, Size(src.cols/16, 1), Point(-1, -1));
  37. Mat vse = getStructuringElement(MORPH_RECT, Size(1, src.rows/16), Point(-1, -1));
  38. Mat erode_direct, dilate_direct;
  39. Mat binImg, xdirectImg, ydirectImg;
  40. // 二值化方法
  41. threshold(gray_src, binImg, 0, 255, CV_THRESH_OTSU | CV_THRESH_BINARY);
  42. // X direction
  43. erode(binImg, erode_direct, hse, Point(-1, -1));
  44. dilate(binImg, dilate_direct, hse, Point(-1, -1));
  45. subtract(dilate_direct, erode_direct, xdirectImg, Mat());
  46. imshow("X directional gradient", xdirectImg);
  47. // Y direction
  48. erode(binImg, erode_direct, vse, Point(-1, -1));
  49. dilate(binImg, dilate_direct, vse, Point(-1, -1));
  50. subtract(dilate_direct, erode_direct, ydirectImg, Mat());
  51. imshow("Y directional gradient", ydirectImg);
  52. waitKey(0);
  53. return 0;
  54. }
欢迎加入图像处理学习群,里面高手林立!

文章知识点与官方知识档案匹配,可进一步学习相关知识
OpenCV技能树图像增强和滤波梯度20473 人正在系统学习中
注:本文转载自blog.csdn.net的gloomyfish的文章"http://blog.csdn.net/jia20003/article/details/52903385"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top