深度学习《图像卷积》

2023-11-13

骚话一下:
今天是2020年10月1号,是祖国的71岁生日,也是传统节日中秋节,而我由于工作的安排身在海外不得回家,怀念祖国的乡土,倍加思念远方的亲人。
由于疫情,在这里哪里也去不了,只能好好学习,用学习来充实这八天假期。

本文完全是为了给CNN做铺垫。

一:图像卷积算法
至于卷积的含义,以及在连续数据的卷积和离散数据的卷积概念和公式我就不说了,不清楚的同学请自行百度,我就直接上过程,直接给出图像的卷积的计算过程。
数字图像是一个二维的离散信号,对数字图像做卷积操作其实就是利用卷积核(卷积模板)在图像上滑动,每每滑动到一个位置,就将图像点上的像素灰度值与对应的卷积核上的数值相乘,然后将所有相乘后的值相加作为卷积核中间像素对应的图像上像素的灰度值,并最终滑动完所有图像的过程。我截图一个微软研究院的视频的图分享出来。
在这里插入图片描述

除此之外,卷积核的选择有一些规则:
1)卷积核的大小一般是奇数,这样的话它是按照中间的像素点中心对称的,所以卷积核一般都是3x3,5x5或者7x7。有中心了,也有了半径的称呼,例如5x5大小的核的半径就是2。

2)卷积核所有的元素之和如果等于1,这是为了原始图像的能量(亮度)守恒。如果卷积核元素相加不为1的情况,那么能量就变化了。

3)如果滤波器矩阵所有元素之和大于1,那么滤波后的图像就会比原图像更亮,反之,如果小于1,那么得到的图像就会变暗。如果和为0,图像不会变黑,但也会非常暗。

4)对于滤波后的结构,可能会出现负数或者大于255的数值。对这种情况,我们将他们直接截断到0和255之间即可。对于负数,也可以取绝对值。

二:图像卷积的实例操作
对于图像用不同的kernel卷积,可以得到图像的不同特征,下面举几个例子。
以一个图片为例。我么分别用不同的卷积核进行操作,以此得到不同的图片特征。
简单起见,我就只用了3*3的不同核来演示。
在这里插入图片描述

1) 单位核:
0 0 0
0 1 0
0 0 0
这个卷积核跟原图像进行卷积后,其实并没有对图像的位置有什么变化,因此,这个核的作用就好比是数学上的1,矩阵中的单位矩阵一样。
在这里插入图片描述

可以看到,跟原图像没区别。

2) 平滑均值滤波核
1/9 1/9 1/9
1/9 1/9 1/9
1/9 1/9 1/9
这个核的作用就是每一个像素点周围的像素平局值来取代该像素值,这样的话就对图像有一个平滑的作用。
在这里插入图片描述

有一些模糊的样子了。

3) 高斯平滑
1/16 2/16 1/16
2/16 4/16 2/16
1/16 2/16 1/16
高斯平滑水平和垂直方向呈现高斯分布,更突出了中心点在像素平滑后的权重,相比于均值滤波而言,有着更好的平滑效果。
在这里插入图片描述

4) 图像锐化
-1 -1 -1
-1 9 -1
-1 -1 -1

这个核就是将本中心像素增强,把周围像素降低,这样更能凸显图像的边缘。
在这里插入图片描述

还可以用以下的核
0 -1 0
-1 5 -1
0 -1 0
在这里插入图片描述

5) 垂直梯度核
1 0 -1
1 0 -1
1 0 -1
在这里插入图片描述

6) 水平梯度核
1 1 1
0 0 0
-1 -1 -1
在这里插入图片描述

7) Sobel边缘检测
Soble与上述卷积核不同之处在于,Soble更强调了和边缘相邻的像素点对边缘的影响。
水平方向:
1 0 -1
2 0 -2
1 0 -1
在这里插入图片描述

垂直方向:
1 2 1
0 0 0
-1 -2 -1
在这里插入图片描述

8) Laplacian卷积核
可以在垂直和水平方向都检测出边缘,效果比较好
-1 -1 -1
-1 8 -1
-1 -1 -1
在这里插入图片描述

或者是下面的核
0 -1 0
-1 4 -1
0 -1 0
在这里插入图片描述

诶?挺有意思的啊,于是我有尝试了一些其他的核,也没有什么名字
-1 2 -1
2 0 2
-1 2 -1
哈哈,得到了蜡笔画图像:
在这里插入图片描述

再玩一个
-1 0 -1
0 4 0
-1 0 -1
在这里插入图片描述

三:代码过程

im = imread('D:/software/octave/doc/CNN/timg.jpg');
#im = double(im);
#a=[[0 -1 0]; [-1 4 -1]; [0 -1 0]];
#a=[[1/9 1/9 1/9]; [1/9 1/9 1/9]; [1/9 1/9 1/9]];
#a=[[-1 -1 -1]; [-1 9 -1]; [-1 -1 -1]];
#a=[[1 0 -1]; [1 0 -1]; [1 0 -1]];
#a=[[1 1 1]; [0 0 0]; [-1 -1 -1]];
#a=[[1 0 -1]; [2 0 -2]; [1 0 -1]];
#a=[[1 2 1]; [0 0 0]; [-1 -2 -1]];

#a=[[-1 -1 -1]; [-1 8 -1]; [-1 -1 -1]];
#a=[[0 -1 0]; [-1 4 -1]; [0 -1 0]];
#a=[[-1 2 -1]; [2 0 2]; [-1 2 -1]];

a=[[-1 2 -1]; [2 0 2]; [-1 2 -1]];

result = imfilter(im,a);

figure();
imshow(result,'InitialMagnification','fit');
hold on;

大家完全可以自己尝试协议诶新的卷积核,也可以是5*5的卷积核,自己随意写数值,发现很多有意思的特性。

本文完全是为了给下一篇的CNN做铺垫。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习《图像卷积》 的相关文章

随机推荐

  • Linux wget下载指定目录及重命名

    Linux系统wget下载指定目录及重命名 假设目录为 happy page 假设下载网址为 http www baidu com 假设下载文件的原始文件名为 baidu html 1 指定下载目录 wget P happy page ht
  • PCL-获取点云体素中的所有点的索引的方法

    使用 octree 将点云体素化之后 获取体素中所有点的方法 即OctreeContainerBase中的三个方法的介绍 getPointIndex getPointIndicesVector getPointIndices 这三个方法都是
  • R语言tidyr包的详解

    tidyr用于数据处理 可以实现数据长格式和宽格式之间的相互转换 这里所指的长格式数据就是一个观测对象由多行组成 而宽数据格式则是一个观测仅由一行组成 除此之外 tidyr还可以对数据进行拆分和合并 同时也能够对缺失值进行简单的处理 tid
  • oracle(内置函数)

    1 转换函数 to char to number to date 例子 to number 转成数值型 select to number 22 23 from dual 2 to char 转成字符型 select to char 22 哈
  • Criss-Cross Attention for Semantic Segmentation论文及代码分析

    先附上论文及代码 该工作于2019年发表于ICCV会议 1 Introduction 由于固定的几何结构 传统的FCN受限于局部的感受野 只能提供短程的上下文信息 这对于提升分割任务的精度起到相反的影响 为了弥补FCN的缺陷 ASPP和PP
  • JAVA环境变量的配置及常用工具说明

    首先 到官网www eclipse com下载并安装最新版本的JDK 其次 找到设置位置 我的电脑 右键 属性 高级系统设置 高级 默认 环境变量 系统变量 新建系统变量JAVA HOME和CLASSPATH 变量名 JAVA HOME 变
  • 汉诺塔问题(C语言)

    汉诺塔问题 文章目录 汉诺塔问题 汉诺塔是什么 一 怎么解决汉诺塔问题 1 1 操作规则 1 2 函数递归 递归的两个必要条件 例题 斐波那契数列 二 解题步骤 2 1 代码如下 示例 2 2 图解 2 n 1 在这里插入图片描述 2 3
  • 微信小程序上线发布流程

    最近花了一天左右的时间学习了下微信小程序的开发 试着练习一把的心态 搞了一个很简单的页面 就当是学习总结吧 学习要点还是挺多的 通过查看官方接口文档 熟悉微信小程序开发工具 工程架构 相比传统页面开发类似 微信小程序也是由js文件 页面布局
  • Qt自定义Delegate实现QTableWidget整行选中圆角矩形高亮效果

    问题背景 参照一个现有的Linux桌面应用 尽可能的模仿它的UI 其中有一个UI效果就是列表整行选中后是一个圆角矩形高亮效果 如下图所示 参考代码 先放代码 实现的思路就是用代理来重绘我们想要的效果 include
  • Socks5代理:跨界电商与游戏产业的爬虫利器与出海战略助推器

    一 Socks5代理 跨界电商与游戏产业的爬虫利器 跨界电商 跨界电商是不同行业或领域之间进行合作的电商模式 企业在拓展全球市场时 需要收集不同领域的市场情报和竞争数据 Socks5代理作为爬虫利器 能够高效稳定地实现数据采集 游戏产业 游
  • Java mail发送相关问题

    一 邮件附件变成bin格式 Java 发送邮件时 邮件附件变成 bin后缀的文件 如下图 出现这个问题 博主查阅了其他博主的文章 大致是附件名称过长或附件名称携带中文 博主代码中采用的是中文加UUID的一个拼接 如下 生成随机的UUID S
  • 【AI实战】llama.cpp 量化部署 llama-33B

    AI实战 llama cpp 量化部署 llama 33B llama cpp 量化介绍 环境配置 安装 llama cpp 拉取 llama cpp 仓库代码 编译llama cpp 生成量化版本模型 模型准备 将上述 pth模型权重转换
  • 大神之路-起始篇

    欢迎关注 WeiyiGeek 公众号 点击 下方卡片 即可关注我哟 设为 星标 每天带你 基础入门 到 进阶实践 再到 放弃学习 涉及 网络安全运维 应用开发 物联网IOT 学习路径 个人感悟 等知识 花开堪折直须折 莫待无花空折枝 作者主
  • 静态路由和动态路由

    display ip routing table 查看全局路由表 路由表匹配规则 最长掩码匹配规则 路由器总是现在最精确 最优的路由项来进行数据转发 路由信息的来源 设备自动发现 直连路由 手动配置 静态路由 通过动态协议生成 动态路由 路
  • HTTP协议 (四) 缓存

    HTTP协议 四 缓存 之前写过一个篇 HTTP协议详解 这次继续介绍HTTP协议中的缓存机制 HTTP协议提供了非常强大的缓存机制 了解这些缓存机制 对提高网站的性能非常有帮助 本文介绍浏览器和Web服务器之间如何处理 浏览器缓存 以及控
  • 【软件开发】从单机到分布式

    从单机到分布式 1 单台服务器应用 问题 由于流量越来越大出现服务器性能问题 2 应用服务器和数据库服务器分离 对架构增加了一台服务器 应用和数据库分别部署到不同的服务器上 对于开发和测试没有任何影响 只需要应用服务器新增一个远程调用数据库
  • python读写文件函数_Python文件读写功能概述,python,函数,总结

    1 python读取csv文件 usr bin python coding UTF 8 df pd read csv filepath usecols func name para value df t df fillna value 对空
  • 文章上传漏洞绕过方式(以php语言为例)

    一 文件上传漏洞原因 由于网站要求 需要用户上传文件 图片 例如头像 保存简单文件上传下载 访问 如果我们将文件上传至web服务器上 并且可以访问到 那么就可以利用小马 对服务器进行操作 或者了解一些信息 因此在上传位置 代码会对上传文件进
  • 解决本地redis连接工具无法连接上宝塔面板的redis

    宝塔安装Redis步奏比较简单 这里我就不讲了 下面来开启一下外网访问 一 第一步需要放开对应安全组中Redis端口 具体端口放开可参考对应服务器厂商的说明文档 二 在宝塔中放行Redis端口 三 修改Redis配置文件将protected
  • 深度学习《图像卷积》

    骚话一下 今天是2020年10月1号 是祖国的71岁生日 也是传统节日中秋节 而我由于工作的安排身在海外不得回家 怀念祖国的乡土 倍加思念远方的亲人 由于疫情 在这里哪里也去不了 只能好好学习 用学习来充实这八天假期 本文完全是为了给CNN