【python+opencv】图像卷积及滤波
目录
1.噪声的分类
2.图像卷积
2.1单次卷积操作
2.2对整幅图像卷积
2.3完整卷积过程
3.opencv中的卷积-filter2D函数
4.卷积中的padding填充(边界填充)
5.padding填充(边界填充)方式
5.1填充为黑色(0)
5.2 填充为白色(255)
5.3 填充为和原图边界一样的颜色
5.4 以边界为对称轴填充
6. 特殊的卷积(滤波)
6.1均值滤波
6.2高斯滤波
6.3中值滤波
6.4双边滤波
什么是图像噪声?
噪声常表现为一引起较强视觉效果的孤立像素点,叠加在原始的像素上。
图像噪声是怎么来的?
• 数字图像在其形成、传输记录过程中往往会受到多种噪声的污染
• 在图像处理的某些环节当输入并不如预想时也会在结果图像中引入噪声
图像噪声的影响
• 以无用的信息形式出现,扰乱图像的可观测信息
• 极大降低了图像质量
• 影响图像复原、分割、特征提取、图像识别等后继工作的进行
1.噪声的分类
一个好的图像去噪的方法必须:
• 能有效地去除目标和背景中的噪声
• 能很好地保护图像主体内容的颜色
通常采用图像滤波进行去噪:
• 图像卷积
• 傅立叶变换
•高斯噪声:噪声强度大小服从正态分布,噪声颜色随机,通常是因为不良照明和高温引起的传感。
•椒盐噪声(脉冲噪声):随机改变一些像素值,由图像传感器、传输信道、解码处理等产生的黑白相间的亮暗点噪声。
2.图像卷积
使用卷积的方法来对图像进行去噪,卷积的两个输入分别是原始图片和卷积核
卷积核的大小定义了卷积的视野
• 二维的常见选择是3——即3x3像素
卷积核的大小一般是奇数*奇数,卷积核的中心点称为锚点
2.1单次卷积操作
对应位置像素相乘再求和,输出一个像素值,如下
2.2对整幅图像卷积
卷积核在原图像上从左向右、从上向下逐渐滑动,滑动暂停时,相乘再相加,作为输出图像像素灰度值,如下
卷积核:
1 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 1 |
卷积过程:
2.3完整卷积过程
卷积核从左至右,从上到下在图片上滑动,每滑动到一个新的位置输出当前位置的卷积值.
小结:m * n大小的图像,用k * k的卷积核去做卷积,步长为1时,结果图像大小为:
(m - k + 1 ) * (n - k + 1 )
3.opencv中的卷积-filter2D函数
dst=cv2.filter2D(src, ddepth, kernel, anchor, delta, borderType)
• src:原图像;
• ddepth:目标图像的像素深度(每像素由多少位来表示),通常设置为-1,表示输出图像 与原图像有相同的像素深度;
• kernel:卷积核,为float型二维矩阵
• anchor (可选) :卷积核的锚点,默认值(-1 , -1 )表示锚点位于卷积核中心;
• delta (可选) :将卷积结果加上由该参数指定的值,默认为0;
• borderType (可选) :填充区域如何生成,默认情况下并非填充0像素,而是采用镜像模
式,如gfedcb|abcdefgh|gfedcba,其中|表示原图像的边界。
4.卷积中的padding填充(边界填充)
上述例子中5*5的图片经过卷积大小缩小到了3*3,结果图大小和卷积核移动的步数相等
然而,大多数情况下,我们希望结果图和原始图大小一致,此时,我们使用padding(边界填充)增加原始图片的高和宽。
下面通过图片说明:
蓝色区域是5*5的原始图片
白色虚线区域是扩充的边框,图片变为7*7
绿色区域为结果图像,5*5
小结:cv2.filter2D会根据卷积核和原图大小,默认进行填充操作,保证原图和结果图大小一致。
5.padding填充(边界填充)方式
5.1填充为黑色(0)
5.2 填充为白色(255)
5.3 填充为和原图边界一样的颜色
5.4 以边界为对称轴填充
6. 特殊的卷积(滤波)
➢均值滤波:卷积核所有元素值相等,且相加为1的卷积操作
➢高斯滤波:一种可用于消除高斯噪声的卷积操作
➢中值滤波:一种可用于消除椒盐噪声的卷积操作
➢双边滤波:一种可用于消除噪声,同时不过多损失清晰度的卷积操作
6.1均值滤波
•有一定去噪功能
•会造成边缘模糊
•可用filter2D实现,需手动构造卷积核
•也可使用cv2.blur,传入原图和卷积核边长
import cv2
import numpy as np
img=cv2.imread("D:\\desk\\images\\lena02.png")#均值滤波
#第一种方法:用filter2D构造卷积核
kernel=np.array([[0,0,0],[0,1,0],[0,0,0]])
kernel=kernel/9
#对原图进行卷积
img_filter=cv2.filter2D(img, ddepth=-1,kernel=kernel) #卷积核的个数,也等于输出特征图的数量#第二种方法:直接用cv2.blur滤波
median2=cv2.blur(img,(5,5))#显示结果
cv2.imshow("img",img)
cv2.imshow("img_filter",median2)
cv2.waitKey() #等待键盘输入,输入任意键返回
6.2高斯滤波
➢消除高斯噪声,最常用的去噪方法
➢同样会造成模糊
dst= cv2.GaussianBlur(src,ksize,sigmaX)
•卷积核通过高斯函数自动计算得到
•src: 输入图像
•ksize: 卷积核边长,格式为(w,h),必须为正奇数 (卷积核越大,图像越模糊)
•sigmaX:X方向上的高斯核标准偏差, 一般设为0
#一般用于消除高斯滤波
import cv2
import numpy as np
img=cv2.imread("D:\\desk\\images\\lena02.png")
#高斯滤波:卷积核越大,图像越模糊#高斯滤波,卷积核大小为5*5
denoise5=cv2.GaussianBlur(img,(5,5),0)
#高斯滤波,卷积核大小为11*11
denoise11=cv2.GaussianBlur(img,(11,11),0)#显示结果
cv2.imshow("img",img)
cv2.imshow("denoise5",denoise5)
cv2.imshow("denoise11",denoise11)cv2.waitKey() #等待键盘输入,输入任意键返回
6.3中值滤波
➢对于原图中N*N的局部区域,将像素值排序,取中间大小的像素值放入当前位置
➢没有卷积核的概念
➢对于去除椒盐噪声特别有效
➢可以有效保存边缘信息
dst=cv2.medianBlur(src, ksize)
•src:原图
•ksize:每次覆盖的区域大小,必须是大于1的正奇数
#中值滤波:对于去除椒盐噪声特别有效
import cv2
import numpy as np
img=cv2.imread("D:\\desk\\images\\lena02_saltPepper.png")#中值滤波:对于去除椒盐噪声特别有效
img_fiflter=cv2.medianBlur(img,5) #5为X方向上的高斯核标准偏差#显示结果
cv2.imshow("img",img)
cv2.imshow("img_fiflter",img_fiflter)cv2.waitKey() #等待键盘输入,输入任意键返回
6.4双边滤波
➢计算卷积核权重时,不仅考虑周边像素距离的远近,还考虑像素值和中心像素的相似性,如果周边像素和中心像素像素值差异较大,周边像素的权重就小
➢降低卷积后的图片模糊程度
dst= cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace[,borderType])
•src:原图像
•d:卷积核的直径
•sigmaColor:与当前像素点颜色差距大小于该值的像素点,才能参与到卷积中;该值越大,去噪效果越好,但边缘越模糊
•sigmaSpace:只在d会参与到卷积中
import cv2
import numpy as np
img=cv2.imread("D:\\desk\\images\\lena02.png")result=cv2.bilateralFilter(img,5,150,150)
imgs=np.hstack([img,result])#显示结果
cv2.imshow("img",img)
cv2.imshow("imgs",imgs)cv2.waitKey() #等待键盘输入,输入任意键返回
【python+opencv】图像卷积及滤波相关推荐
- python opencv 图像膨胀
python opencv 图像膨胀 代码: import cv2 import numpy as np # 图像膨胀 def dilate_img(img,a,iterations):kernel ...
- python opencv 图像旋转
python opencv 图像旋转 原图 顺时针旋转 代码: import cv2 path = '2.jpg' img = cv2.imread(path,1) trans_img = cv2.t ...
- python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例
python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...
- 图像卷积与滤波的一些知识点
图像卷积与滤波的一些知识点 zouxy09@qq.com http://blog.csdn.net/zouxy09 之前在学习CNN的时候,有对卷积进行一些学习和整理,后来就烂尾了,现在稍微整理下,先 ...
- 【Python+OpenCV 图像透视变换 warpPerspective函数】
Python+OpenCV 图像透视变换 warpPerspective函数 1.函数介绍 2.代码实例 3.实现效果 1.函数介绍 warpPerspective():对图像进行透视变换.简单来说, ...
- 【Python+OpenCV 图像的缩放和裁剪】
Python+OpenCV 图像的缩放和裁剪 代码部分 实现效果 代码部分 import cv2 import numpy as npimg = cv2.imread("Photos/1.b ...
- 图像卷积和滤波的区别
图像卷积和滤波的区别 http://blog.csdn.net/zouxy09/article/details/49080029 clear,close all, clc%% readimage im ...
- OpenCV 图像卷积:cv.filter2D() 函数详解
API 照例,我们搬一下官网的 API: C++ void cv::filter2D(InputArray src,OutputArray dst,int ddepth,InputArray kern ...
- opencv图像恢复逆滤波_OpenCV之快速的图像边缘滤波算法
python代码: import cv2 as cv import numpy as npsrc = cv.imread("./test.png") cv.namedWindow( ...
最新文章
- Matlab与线性代数 -- 矩阵的左除
- UVA 11134 FabledRooks 传说中的车 (问题分解)
- 中国水环境治理市场需求前景与十四五战略规划建议报告2022版
- boost::multiprecision模块将使用 fixed_int 的算术结果与 GMP 结果进行比较相关的测试程序
- CSS3的background-size:可以设置高宽 百分比 最大大小 最小大小
- 【Python】校选课 第四周作业 py3.0
- Coding the Matrix Week 1 The vector 作业
- 华为P30系列机身侧面照曝光 摄像头仍然“凸起”...
- 二维码扫描ZXing简化
- 添加、移除事件及相关处理函数各方法
- 多线程——保证线程安全
- _itemmod_enchant_groups
- 磁盘驱动属于计算机的,计算机基本知识(8005)---HDD(硬盘驱动器Hard Disk Drive)
- 服务器系统装显卡驱动,windows2019服务器系统安装显卡驱动(A卡篇)
- 数字证书原理[转载]
- Python学习DAY5|数据分析简介与实战
- 利用ffmpeg 把.mp4转换为.flv
- 计算机毕业设计SSM本科培训班学员信息管理系统【附源码数据库】
- 【Transformers】第 7 章 :问答
- matlab中标幺值,标幺值概述
热门文章
- C#空字符串、空字符、null、ASCII码为0的字符
- 去除Byte数组的空字符\u0000
- Windows PC上创建大数据职业技能竞赛实验环境之四--客户端环境的搭建
- #BDA#笔记#业务知识:常见行业业务模式指标5内容行业
- Cadence AMS Designer混合信号仿真教程
- petalinux制作自动启动应用过程中遇到的问题解决
- 使用 JavaScript 调用 API
- Opencv(C++)笔记--视频读取、视频属性查看、视频循环播放
- SpringSecurity过滤器CsrfFilter
- 搭建stf+minicap实现安卓群控