CV00-04-卷积
卷积概念
由于不好进行文字描述(懒),我直接推荐一个博客图像卷积,讲解图像卷积的概念。
图像卷积操作(convolution),或称为核操作(kernel),是进行图像处理的一种常用手段,图像卷积操作的目的是利用像素点和其邻域像素之前的空间关系,通过加权求和的操作,实现模糊(blurring),锐化(sharpening),边缘检测(edge detection)等功能。图像卷积的计算过程就是卷积核按步长对图像局部像素块进行加权求和的过程。卷积核实质上是一个固定大小的权重数组,该数组中的锚点通常位于中心。
通常情况下,选取卷积核大小为1x1,3x3,5x5,7x7等。取奇数大小的目的是为了设置卷积核中心为锚点,方便卷积核和图像的对齐处理。设置卷积核大小对称的目的是为了在空间域中充分利用像素点和其领域像素间的关系。当然这不是必须的,如果需要针对某一轴进行处理,可以设置1x3或3x1大小。
————————————————
版权声明:本文为CSDN博主「编号1993」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012005313/article/details/84068337
举例
滑动平均
列表[1,4,7,5,8,6],我们对这个列表取滑动平均值,滑动窗口大小为3,权重0.2、0.5、0.3边界值采用固定值0。
那么这个这个操作就是一个卷积操作,卷积核大小是2x1,核是[0.2,0.5,0.3]。
卷积计算过程为[0x0.2+4x0.5+7x0.3,1x0.2+4x0.5+7x0.3,……,5x0.2+8x0.5+6x0.3,8x0.2+6x0.5+0x0.3]。
卷积计算结果为[4.1,4.3,5.8,6.3,6.8,4.6]。
可以看出,滑动平均可以借助临近像素点来修正锚点像素,达到平滑、滤波、去噪声等目的。
一阶导数和二阶导数
相邻2个点之间的差值(除以1相当于没有除)就是一阶导数,也就是f(x+1)-f(x),这也是个2x1的卷积核[-1,1]。
相邻2个一阶导数之间的差值(除以1相当于没有除)就是二阶导数,也就是f'(x)-f'(x-1)=(f(x+1)-f(x))-(f(x)-f(x-1)),也就是f(x+1)+f(x-1)-2f(x),这个是3x1的卷积核[1,-2,1]。
一阶导数对于像素变化比较敏感,可以检测到粗边缘。
二阶导数对于像素变化的趋势比较敏感,可以检测到细边缘。
Gaussian高斯滤波
卷积核服从高斯分布的卷积操作。本例采用7x7大小,X和Y方向sigma都为2的卷积核。
不同的是,第一个直接做二维卷积,第二个先做X方向的,再做一个Y方向的。两个结果是一样的。
"""
Gaussian Kernel
"""import cv2IMG = cv2.imread('lena.jpg', 1)
IMG_GAUSS1 = cv2.GaussianBlur(IMG, (7, 7), 2)
KERNEL_1D = cv2.getGaussianKernel(7, 2)
IMG_GAUSS2 = cv2.sepFilter2D(IMG, -1, KERNEL_1D, KERNEL_1D)cv2.imshow('image', IMG)
cv2.imshow('image_gauss1', IMG_GAUSS1)
cv2.imshow('image_gauss2', IMG_GAUSS2)
KEY = cv2.waitKey()
if KEY == 27:cv2.destroyAllWindows()pass
Median中值滤波
对于图像本身而言,中值滤波会使图像模糊。对于噪声,中值滤波可以降低椒盐噪声(图像上零散几个点的噪声)。本例中,采用的核大小是7,也就是从7x7的像素点选取中值来修正锚点像素。
import cv2IMG = cv2.imread('lena.jpg', 1)
IMG_MEDIAN = cv2.medianBlur(IMG, 7)cv2.imshow('image', IMG)
cv2.imshow('image_median', IMG_MEDIAN)
KEY = cv2.waitKey()
if KEY == 27:cv2.destroyAllWindows()pass
Sobel(一阶导数)
一阶导,按照X和Y方向分别求导。按照X方向一阶导检测到的粗边缘都是沿着Y方向的;按照Y方向一阶导检测到的粗边缘都是沿着X方向的。
import cv2
import numpy as npIMG = cv2.imread('lena.jpg', 1)
X_KERNEL = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])
Y_KERNEL = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])
IMG_X_SOBEL = cv2.filter2D(IMG, -1, X_KERNEL)
IMG_Y_SOBEL = cv2.filter2D(IMG, -1, Y_KERNEL)cv2.imshow('image', IMG)
cv2.imshow('image_x_sobel', IMG_X_SOBEL)
cv2.imshow('image_y_sobel', IMG_Y_SOBEL)
KEY = cv2.waitKey()
if KEY == 27:cv2.destroyAllWindows()pass
Laplacian(二阶导数)
二阶导数检测细边缘。
import cv2
import numpy as npIMG = cv2.imread('lena.jpg', 1)
KERNEL = np.array([[0, 1, 0], [1, -4, 1], [0, 1, 0]])
IMG_LAPLACIAN = cv2.filter2D(IMG, -1, KERNEL)cv2.imshow('image', IMG)
cv2.imshow('image_laplacisn', IMG_LAPLACIAN)
KEY = cv2.waitKey()
if KEY == 27:cv2.destroyAllWindows()pass
CV00-04-卷积相关推荐
- 04.卷积神经网络 W3.目标检测(作业:自动驾驶 - 汽车检测)
文章目录 1. 问题背景 2. YOLO 模型 2.1 模型细节 2.2 分类阈值过滤 2.3 非极大值抑制 2.4 完成过滤 3. 在照片上测试已预训练的YOLO模型 3.1 定义类别.anchor ...
- 04.卷积神经网络 W2.深度卷积网络:实例探究(作业:Keras教程+ResNets残差网络)
文章目录 作业1:Keras教程 1. 快乐的房子 2. 用Keras建模 3. 用你的图片测试 4. 一些有用的Keras函数 作业2:残差网络 Residual Networks 1. 深层神经网 ...
- 04.卷积神经网络 W1.卷积神经网络(作业:手动/TensorFlow 实现卷积神经网络)
文章目录 作业1:实现卷积神经网络 1. 导入一些包 2. 模型框架 3. 卷积神经网络 3.1 Zero-Padding 3.2 单步卷积 3.3 卷积神经网络 - 前向传播 4. 池化层 5. 卷 ...
- 04.卷积神经初探(5-3 特征工程)
04.卷积神经初探(5-3 特征工程) 一,5-3 特征工程 来自慕课网 一,5-3 特征工程
- 04.卷积神经网络_第一周卷积神经网络
04.卷积神经网络_第一周卷积神经网络 1.1 计算机视觉 上面这张图是64x64像素的图像,它的数据量是12288,下图是1000x1000像素的图像,它的数据量是3百万.如果用全连接网络去处理这张 ...
- 04.卷积神经网络 W4.特殊应用:人脸识别和神经风格转换(作业:快乐屋人脸识别+图片风格转换)
文章目录 作业1:快乐房子 - 人脸识别 0. 朴素人脸验证 1. 编码人脸图片 1.1 使用卷积网络编码 1.2 Triplet 损失 2. 加载训练过的模型 3. 使用模型 3.1 人脸验证 3. ...
- 04.卷积神经网络 W4.特殊应用:人脸识别和神经风格转换
文章目录 1. 什么是人脸识别 2. One-Shot学习 3. Siamese 网络 4. Triplet 损失 5. 人脸验证与二分类 6. 什么是神经风格迁移 7. 深度卷积网络在学什么 8. ...
- 04.卷积神经网络 W3.目标检测
文章目录 1. 目标定位 2. 特征点检测 3. 目标检测 4. 滑动窗口的卷积实现 5. Bounding Box预测(YOLO) 6. 交并比 7. 非极大值抑制 8. Anchor Boxes ...
- 04.卷积神经网络 W2.深度卷积网络:实例探究
文章目录 1. 为什么要进行实例探究 2. 经典网络 3. 残差网络 ResNets 4. 残差网络为什么有用 5. 网络中的网络 以及 1×1 卷积 6. 谷歌 Inception 网络简介 7. ...
- 04.卷积神经网络 W1.卷积神经网络
文章目录 1. 计算机视觉 2. 边缘检测示例 3. 更多边缘检测 4. Padding 5. 卷积步长 6. 三维卷积 7. 单层卷积网络 8. 简单卷积网络示例 9. 池化层 10. 卷积神经网络 ...
最新文章
- 苹果连接电脑只能充电_苹果 iPhone 12 曝充电 Bug:多口充电器无一幸免 只能用单独充电头 - 手机 - IT商业网...
- java jni key_JNIKeyProtection
- java中List Array相互转换
- idea快速从dao层跳转到mapper.xml文件的插件
- 疯狂ios讲义疯狂连载之实现游戏视图控制器
- mysql 案例 ~ pt修复工具的使用
- ns3入门案例1 first.cc
- idea类前面有个j_idea中所有Java类标识变成一个J
- python 变量赋值变成元组
- C和指针 第五章 习题
- ObjectDataSource 如何传递查询参数
- 无线AP与无线路由器都有些什么区别?(一)
- u盘写保护终极修复方法
- 图片文字识别如何实现
- 智能优化算法:蝗虫优化算法-附代码
- 苹果xr微信连不上服务器,苹果xr微信延迟的解决方法
- Visio2013 补丁
- 假如给我三天光明阅读心得收获
- 计算机 90学时培训总结,90学时培训心得体会(通用5篇)
- 广联达服务器没有及时响应,服务没有及时响应启动或控制请求,手把手教你服务没有及时响应启动或控制请求怎么解决...
热门文章
- 如何查看笔记本电脑配置参数_教你如何查看 MacBook 配置,超简单
- 终端主题_再见 XShell 和 ITerm 2,是时候拥抱全平台高颜值终端工具 Hyper 了!
- 设置status bar的颜色
- base64格式的图片数据如何转成图片
- Windows Phone SDK update for Windows Phone 7.8
- PHP开发框架之YII框架学习——碾压ThinkPHP不是梦
- devstack —— 单机部署 OpenStack 体验
- 启动webpack-dev-server只能本机访问的解决办法
- 前端开发之retina屏幕
- jdbc封装与多并发的共鸣