python-opencv之图像滤波(blur,boxFilter,GaussianBlur,medianBlur)
1. blur(均值滤波)
均值滤波从频域来看,它是一种低通滤波器,高频信号会被滤掉。均值滤波可以帮助消除图像尖锐噪声,实现图像平滑,模糊等功能。理想的均值滤波是用每个像素和它周围像素计算出来的平均值替换图像中每个像素。
均值滤波器一般是使用下面的模板和图像做卷积来实现。
即以当前像素点为中心,求窗口内所有灰度值的和,以其平均值作为中心像素新的灰度值。
均值滤波有平均均值滤波和加权均值滤波。分别如下所示:
左边是平均均值滤波 ,右边是加权均值滤波
均值滤波可以模糊图像从而得到图像的大致描述。
2. boxFilter(方框滤波)
方框滤波和均值滤波的原理是类似的,因为均值滤波是方框滤波的归一化表现。在OpenCV中,方框滤波使用的模板如下:
从方框滤波的模板可以看到,如果α = 1,那么就是方框滤波,不进行归一化;如果α != 1那么就进行归一化操作。
以5*5的卷积核为例,如果normalize == true,那么就是均值滤波,模板如下:
如果normalize != true,那么就是计算邻域像素和,不平均,卷积核如下:
3. GaussianBlur(高斯滤波)
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声(高斯噪声是指它的概率密度函数服从高斯分布(即正态分布)的一类噪声)。高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
一维高斯分布
通常我们在使用的时候都取标准正态分布。这时候
以3*3的模板为例,给出高斯滤波的卷积核
从卷积核可以看到,每一个像素点的权值不是全部相同的。更突出了中心点在像素平滑后的权重,相比于均值滤波而言,有着更好的平滑效果。
medianBlur(中值滤波)
中值滤波是一种典型的非线性滤波,是基于排序统计理论的一种能够有效抑制噪声的非线性信号处理技术,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,让周围的像素值接近真实的值从而消除孤立的噪声点。该方法在取出脉冲噪声、椒盐噪声的同时能保留图像的边缘细节。这些优良特性是线性滤波所不具备的。
中值滤波会取当前像素点及其周围临近像素点(一共有奇数个像素点)的像素值,将这些像素值排序,然后将位于中间位置的像素值作为当前像素点的像素值。
将其邻域设置为3×3大小,对其3×3邻域内像素点的像素值进行排序(升序降序均可),按升序排序后得到序列值为:[66,78,90,91,93,94,95,97,101]。在该序列中,处于中心位置(也叫中心点或中值点)的值是“93”,因此用该值替换原来的像素值78,作为当前点的新像素值。中值滤波效果如下:
代码实例
import cv2
import matplotlib.pyplot as plt
import numpy as npimg = cv2.imread("./lena-noisedimage.png",cv2.IMREAD_COLOR)
print(img.shape)
img = cv2.resize(img,[256,256])
blur = cv2.blur(img,(3,3))
boxfliter = cv2.boxFilter(img,-1,(3,3),normalize=True)
Gaussian = cv2.GaussianBlur(img,(3,3),1)
media = cv2.medianBlur(img,5)
#kernel = np.array([0,-1,0,-1,5,-1,0,-1,0])
#fliter2d = cv2.filter2D(img,-1,kernel)# 不同的效果由卷积核决定
#res = np.hstack((img,blur,boxfliter,Gaussian,media,fliter2d))
res = np.hstack((img,blur,boxfliter,Gaussian,media))
cv2.imshow("lena",res)
cv2.waitKey(0)
cv2.destroyAllWindows()
参考连接:https://cloud.tencent.com/developer/article/1601443
python-opencv之图像滤波(blur,boxFilter,GaussianBlur,medianBlur)相关推荐
- Python+OpenCV:图像修复(Image Inpainting)
Python+OpenCV:图像修复(Image Inpainting) 理论 Most of you will have some old degraded photos at your home ...
- Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features)
Python+OpenCV:图像二进制鲁棒独立基本特征(BRIEF, Binary Robust Independent Elementary Features) 理论 We know SIFT us ...
- Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection)
Python+OpenCV:图像快速角点检测算法(FAST Algorithm for Corner Detection) 理论 Feature Detection using FAST Select ...
- Python+OpenCV:图像Shi-Tomasi角点检测器
Python+OpenCV:图像Shi-Tomasi角点检测器 理论 The scoring function in Harris Corner Detector was given by: Inst ...
- Python+OpenCV:图像Harris角点检测(Harris Corner Detection)
Python+OpenCV:图像Harris角点检测(Harris Corner Detection) 理论 corners are regions in the image with large v ...
- Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization)
Python+OpenCV:图像对比度受限自适应直方图均衡化(CLAHE, Contrast Limited Adaptive Histogram Equalization) ############ ...
- Python+OpenCV:图像轮廓
Python+OpenCV:图像轮廓 轮廓是什么? 轮廓可以简单地解释为一条连接所有连续点(沿边界)的曲线,具有相同的颜色和强度. 轮廓线是形状分析.目标检测和识别的重要工具. 为了获得更好的精度,可 ...
- Python+OpenCV:图像金字塔
Python+OpenCV:图像金字塔 理论 通常情况下,我们使用固定大小的图像.但在某些情况下,我们需要处理(相同的)不同分辨率的图像. 例如,当搜索图像中的某些东西时,比如脸,我们不确定该物体在图 ...
- Python+OpenCV:图像梯度
Python+OpenCV:图像梯度(Image Gradients) 理论 OpenCV提供了三种类型的梯度滤波器或高通滤波器,Sobel, Scharr和Laplacian. 1. Sobel和S ...
- Python+OpenCV判断图像是黑底还是白底
前言 本篇博客使用Python+OpenCV判断图像是黑底还是白底,利用图像对角线上的黑白像素点个数进行判断,详情见下文. 本篇博客内容包含代码逻辑.说明.依赖.实现,这几部分.代码实现部分包含2种实 ...
最新文章
- this super 在接口以及实现类中所指的对象
- NDC 2010视频下载:看看其他微软平台程序员们都在做什么
- 如何在Python中附加文件?
- 13.Java为什么不支持多继承
- MyBatis(四)MyBatis插件原理
- Adobe illustrator 批量变换同时选中的单个对象 - 连载 12
- 包教包会,7段代码带你玩转Python条件语句
- 42 CO配置-控制-产品成本控制-成本对象控制-实际成本核算/物料分类帐-激活实际成本核算
- 学术前沿 | DeepMind最新成果:图表示学习算法推理~46页ppt
- 二线城市的海归创业路:拥抱还是逃离?
- P问题、NP问题、NPC问题
- AM5728 + 映美精工业相机图像处理案例
- 抓取百度页面html,百度蜘蛛不抓取页面的解决方法
- 进口十大旋转编码器厂商
- Aurora8B10B IP使用 -02- IP功能设计技巧
- 一种windows下简单的USB摄像头图像获取方式
- 【毕业季话题有奖征文】进击的技术er
- 你见过灰犀牛吗?也许它比黑天鹅还可怕
- 关于使用gml数据格式的一点体会
- 怎么在局域网中查找一台电脑连接到的交换机端口?(实测可用,CISCO 交换机环境)