开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 21160|回复: 3
收起左侧

[C#图文教程] OpenCvSharp的学习之旅 lesson06----ExpansionAndCorrosion

[复制链接]
发表于 2019-9-2 20:08:58 | 显示全部楼层 |阅读模式   江苏省常州市
本帖最后由 qingshanlushui 于 2019-9-2 20:11 编辑

lesson06----膨胀与腐蚀
接下来....文字/线条的提取......指定形状的提取.....直方图(待定)

在膨胀与腐蚀的基础上,有形态学开操作:先腐蚀后膨胀(可以去掉图像中小的对象)形态学闭操作:先膨胀后腐蚀(可以填充图像小的‘洞’,纯色如果包含小的污渍可以去掉污渍)
形态学梯度:膨胀减去腐蚀
形态学顶帽:是原图像与开操作之间的差值图像
形态学黑帽:闭操作图像与源图像的差值图像

本套学习心得,虽不是什么高瞻远瞩,但依旧禁止任何形式的转载or复制(含非商业),如需任何形式的转载or复制,还请论坛留言通知我一下下....

一/基本概念


  1. ⑴ 图像形态学处理的概念
  2. 数字图像处理中的形态学处理是指将数字形态学作为工具从图像中提取对于表达和描绘区域形状有用处的图像分量,比如边界、骨架以及凸壳,还包括用于预处理或后处理的形态学过滤、细化和修剪等。图像形态学处理中我们感兴趣的主要是二值图像。
  3. 在二值图像中,所有黑色像素的集合是图像完整的形态学描述,二值图像的各个分量是Z2的元素。假定二值图像A和形态学处理的结构元素B是定义在笛卡儿网格上的集合,网格中值为1的点是集合的元素,当结构元素的原点移到点(x,y)时,记为Sxy,为简单起见,结构元素为3x3,且全都为1,在这种限制下,决定输出结果的是逻辑运算。

  4. ⑵ 二值图像的逻辑运算
  5. 逻辑运算尽管本质上很简单,但对于实现以形态学为基础额图像处理算法是一种有力的补充手段。在图像处理中用到的主要逻辑运算是:与、或和非(求补),它们可以互相组合形成其他逻辑运算。

  6. ⑶ 膨胀和腐蚀
  7. 膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的。
  8. ① 膨胀
  9. 是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的。A被B膨胀是所有位移z的集合,这样, 和A至少有一个元素是重叠的。我们可以把上式改写为:
  10. 结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的。
  11. ⑴ 用结构元素B,扫描图像A的每一个像素
  12. ⑵ 用结构元素与其覆盖的二值图像做“与”操作
  13. ⑶ 如果都为0,结果图像的该像素为0。否则为1

  14. ② 腐蚀
  15. 对Z中的集合A和B,B对A进行腐蚀的整个过程如下:
  16. ⑴ 用结构元素B,扫描图像A的每一个像素
  17. ⑵ 用结构元素与其覆盖的二值图像做“与”操作
  18. ⑶ 如果都为1,结果图像的该像素为1。否则为0
  19. 腐蚀处理的结果是使原来的二值图像减小一圈。
复制代码


参考文档:https://wenku.baidu.com/view/1923d18fcc22bcd126ff0ccc.html

二/基本膨胀与腐蚀




  1.         static Mat zx61;
  2.         /// <summary>
  3.         /// 图像膨胀与腐蚀
  4.         /// 腐蚀就是变粗,膨胀是变细
  5.         /// </summary>
  6.         public static void ExpansionAndCorrosion(string path)
  7.         {
  8.             int elementSize = 0;//初始化
  9.             int maxSize = 21; //滑动效果最大值
  10.             using (zx61 = new Mat(path, ImreadModes.AnyColor ))
  11.             using (Mat zx6161 = new Mat(zx61.Size(), zx61.Type()))
  12.             {
  13.                 //CvTrackbarCallback2 :窗口动态调整
  14.                 CvTrackbarCallback2 cvCallback = new CvTrackbarCallback2(CallBackDome);
  15.                 Cv2.ImShow("zx61", zx61);
  16.                 zx61.CopyTo(zx6161);
  17.                 Cv2.ImShow("zx6161", zx6161);

  18.                 //滑动条
  19.                 CvTrackbar cvt = new CvTrackbar("Bar :", "zx6161", elementSize, maxSize, cvCallback, zx6161);

  20.                 Cv2.WaitKey();
  21.             }

  22.         }

  23.         private static void CallBackDome(int size, object userdate)
  24.         {

  25.             //不用using 释放掉就不能处理了
  26.             Mat zx616 = (Mat)userdate;
  27.             size = size * 2 + 1; //要为奇数
  28.             Mat zx61616 = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(size, size), new Point(-1, -1));
  29.             //膨胀
  30.             Cv2.Dilate(zx61, zx616, zx61616, new Point(-1, -1), 1);
  31.             //腐蚀
  32.             //Cv2.Erode(zx61, zx616, zx61616, new Point(-1, -1), 1);
  33.             //Cv2.ImShow("zx6161", zx616);
  34.             new Window("zx6161", WindowMode.AutoSize, zx616);
  35.         }
复制代码
601.jpg


腐蚀就是变粗,膨胀是变细


三/形态学黑帽



  1. /// <summary>
  2.         /// 形态学黑帽:闭操作图像与源图像的差值图像
  3.         /// </summary>
  4.         public static void MorphologyBlackHAT(string path)
  5.         {
  6.             using (Mat zx61 = new Mat(path, ImreadModes.AnyColor | ImreadModes.AnyDepth))
  7.             using (Mat zx6161 = new Mat())
  8.             {

  9.                 //:定义结构元素
  10.                 InputArray kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(15, 15), new Point(-1, -1));
  11.                 //顶帽操作,也可省略变量前缀名
  12.                 Cv2.MorphologyEx( zx61,  zx6161, op: MorphTypes.BlackHat, element: kernel, anchor: new Point(-1, -1));

  13.                 using (new Window("zx61", WindowMode.AutoSize, zx61))
  14.                 using (new Window("zx6161", WindowMode.AutoSize, zx6161))
  15.                 {
  16.                     Cv2.WaitKey();
  17.                 }
  18.             }
  19.         }
复制代码


603.jpg



四/形态学顶帽


  1. /// <summary>
  2.         /// 形态学顶帽:是原图像与开操作之间的差值图像
  3.         /// </summary>
  4.          public static void MorphologyTopHAT(string path)
  5.         {
  6.             using (Mat zx61 = new Mat(path, ImreadModes.AnyColor | ImreadModes.AnyDepth))
  7.             using (Mat zx6161 = new Mat())
  8.             {

  9.                 //:定义结构元素
  10.                 InputArray kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(25, 25), new Point(-1, -1));
  11.                 //顶帽操作,也可省略变量前缀名
  12.                 Cv2.MorphologyEx( zx61,  zx6161, op: MorphTypes.TopHat, element: kernel, anchor: new Point(-1, -1));

  13.                 using (new Window("zx61", WindowMode.AutoSize, zx61))
  14.                 using (new Window("zx6161", WindowMode.AutoSize, zx6161))
  15.                 {
  16.                     Cv2.WaitKey();
  17.                 }
  18.             }
  19.         }
复制代码
602.jpg



五/其余api



               //:定义结构元素
                InputArray kernel = Cv2.GetStructuringElement(MorphShapes.Rect, new Size(15, 15), new Point(-1, -1));
                //形态学梯度操作,也可省变量前缀名
                Cv2.MorphologyEx( zx61,  zx6161, op: MorphTypes.Gradient, element: kernel, anchor: new Point(-1, -1));

                //闭操作,也可省变量前缀名
                Cv2.MorphologyEx(zx61,  zx6161, op: MorphTypes.Close, element: kernel, anchor: new Point(-1, -1));


                //开操作,也可省变量前缀名
                Cv2.MorphologyEx(zx61,zx6161, op: MorphTypes.Open, element: kernel, anchor: new Point(-1, -1));






本套学习心得,虽不是什么高瞻远瞩,但依旧禁止任何形式的转载or复制(含非商业),如需任何形式的转载or复制,还请论坛留言通知我一下下....








评分

参与人数 1好评 +1 精币 +66 收起 理由
老郭 + 1 + 66 感谢发布原创作品,精易因你更精彩!

查看全部评分

结帖率:44% (4/9)

签到天数: 8 天

发表于 2022-9-25 22:20:58 | 显示全部楼层   四川省成都市
感谢分享 受益匪浅
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2022-1-7 22:11:35 | 显示全部楼层   天津市天津市
感谢分享感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/5)
发表于 2019-9-3 08:05:29 | 显示全部楼层   广东省梅州市
感谢分享感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表