当前位置: 首页 > news >正文

OpenCV 卷积运算和卷积核

卷积运算和卷积核

图像运算中经常会碰到卷积运算这个讲法, 初看不知道具体含义, 其实非常简单, 工作原理如下:

  1. 首先提供一个小的矩阵, 一般是3*3, 或者是 5*5 或者是 7*7, 一般是方形矩阵, 维度为奇数, 这样中心点可以作为锚点, 矩阵中的元素取值多为很小的整数(或正或负或零), 该矩阵被叫做 kernel 或卷积核.
  2. 图像中每个点的最终取值, 需要和 kernel矩阵做个运算才能得到该点的最终取值, 计算过程为: 先将卷积核的锚点对中图像上要计算的点, 这样核矩阵和图像上一小块区域会重叠, 我们将重叠部分各个点做乘法运算, 并将乘积相加作为计算点的最终取值.
  3. 很显然, 卷积运算其实就是对原图像各点进行了加权平均, 卷积核上各点数值相当于权重, 一般图像往往具备各方同性特征, 所以我们一般选择核中心点作为锚点, 同时选择奇数维度的矩阵, 这样的矩阵中心点就非常明确.

卷积核的构建

OpenCV中的结构化元素专指数值为0和1的卷积核矩阵, 当然卷积核矩阵并不要要求数值一定是1或1.

  1. 手工构建: 卷积核就是个矩阵, 所以我们可以先创建一个Mat, 然后手工设定各位置取值就可以.
  2. 构建全为1元素的矩阵, 下面两个写法等价.
Mat element1 = Mat.Ones(3, 3, MatType.CV_8UC1);
Mat element2 = Cv2.GetStructuringElement(MorphShapes.Rect, new OpenCvSharp.Size(3, 3));[  1,   1,   1,   1,   1;1,   1,   1,   1,   1;1,   1,   1,   1,   1;1,   1,   1,   1,   1;1,   1,   1,   1,   1]
  1. 构建是十字线为1的矩阵, 其他元素都为0
Mat element3 = Cv2.GetStructuringElement(MorphShapes.Cross, new OpenCvSharp.Size(3, 3));[  0,   0,   1,   0,   0;0,   0,   1,   0,   0;1,   1,   1,   1,   1;0,   0,   1,   0,   0;0,   0,   1,   0,   0]
  1. 构建是椭圆形矩阵, 椭圆形区域内的元素为1, 其他元素都为0
Mat element4 = Cv2.GetStructuringElement(MorphShapes.Cross, new OpenCvSharp.Size(5, 5));[  0,   0,   1,   0,   0;0,   0,   1,   0,   0;1,   1,   1,   1,   1;0,   0,   1,   0,   0;0,   0,   1,   0,   0]

参考

https://zhuanlan.zhihu.com/p/273475106https://blog.csdn.net/Vermont_/article/details/108424547

相关文章:

  • 抖音如何推广引流?抖音推广引流的经验与工具分享
  • 使用Navicat将SQL server数据库导入mysql数据库
  • Notion AI会员订阅付费
  • 实验三 循环结构程序设计(Python)
  • 美国费米实验室SQMS启动“量子车库”计划!30+顶尖机构积极参与
  • opencv(5): 滤波器
  • 捷报连连!怿星科技荣获北京市科学技术进步奖一等奖
  • 2023年中国羽绒制品需求现状、市场规模及细分产品规模分析[图]
  • LeetCode【76】最小覆盖子串
  • 搜索引擎ElasticSearch分布式搜索和分析引擎学习,SpringBoot整合ES个人心得
  • 《深度学习500问》外链笔记
  • 运维小技能:centos安装宝塔
  • 手写消息队列(基于RabbitMQ)
  • DCDC同步降压控制器SCT82A30\SCT82630
  • 印刷企业实施MES管理系统需要哪些硬件设施
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【译】理解JavaScript:new 关键字
  • Gradle 5.0 正式版发布
  • Java IO学习笔记一
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • nginx 负载服务器优化
  • Spark RDD学习: aggregate函数
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • VuePress 静态网站生成
  • Zsh 开发指南(第十四篇 文件读写)
  • 分享几个不错的工具
  • 探索 JS 中的模块化
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • ​secrets --- 生成管理密码的安全随机数​
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #etcd#安装时出错
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (04)odoo视图操作
  • (09)Hive——CTE 公共表达式
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (六)Hibernate的二级缓存
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)h264中avc和flv数据的解析
  • *Django中的Ajax 纯js的书写样式1
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET CORE 第一节 创建基本的 asp.net core
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [2010-8-30]
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [Android] Android ActivityManager
  • [BSGS算法]纯水斐波那契数列
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复