高斯滤波器(Gaussian Filter) python实现及部分原理说明(opencv)
上传图片
# read the image
img = cv2.imread("img/11.jpeg")# Print out the type of image data and its dimensions (height, width, and color)
print('This image is:', type(img), ' with dimensions:', img.shape)img_copy = np.copy(img)
#change color to rgb(from bgr)
img_copy = cv2.cvtColor(img_copy,cv2.COLOR_BGR2RGB)#display
plt.imshow(img_copy)
This image is: <class 'numpy.ndarray'> with dimensions: (742, 742, 3)
添加高斯噪声
def noise_Gaussian(img,mean,var):'''img:原始图像mean:均值var:方差,值越大噪声越大'''#创建均值为mean方差为var呈高斯分布的图像矩阵noise = np.random.normal(mean,var ** 0.5,img.shape)#将原始图像的像素值进行归一化,除以255使像素值在0-1之间img = np.array(img/255,dtype=float)#噪声和图片合并即加噪后的图像out = img + noise#解除归一化,乘以255将加噪后的图像的像素值恢复out = np.uint8(out*255)return outout = noise_Gaussian(img_copy,mean=0,var=0.003)
plt.imshow(out)
高斯滤波器
高斯滤波器将中心像素周围的像素按照高斯分布加权平均进行平滑化。这样的(二维)权值通常被称为卷积核(kernel)或者滤波器(filter)
但是,由于图像的长宽可能不是滤波器大小的整数倍,因此我们需要在图像的边缘补0 。这种方法称作Zero Padding
权值g (卷积核)要进行归一化操作(∑ g = 1 \sum\ g = 1∑ g=1)
高斯掩膜的求解与位置(x,y)无关,因为在计算过程中x,y被抵消掉了,所以求一个kerne模板即可
gaussian_filter算法
对图像进行zero padding
根据高斯滤波器的核大小和标准差大小实现高斯滤波器
使用高斯滤波器对图像进行滤波(相乘再相加)
输出高斯滤波后的图像
gaussian_filter代码示例
def gaussian_filter(img, K_size=3, sigma=1.0):img = np.asarray(np.uint8(img))if len(img.shape) == 3:H, W, C = img.shapeelse:img = np.expand_dims(img, axis=-1)H, W, C = img.shape## Zero paddingpad = K_size // 2out = np.zeros((H + pad * 2, W + pad * 2, C), dtype=np.float)out[pad: pad + H, pad: pad + W] = img.copy().astype(np.float)## prepare KernelK = np.zeros((K_size, K_size), dtype=np.float)for x in range(-pad, -pad + K_size):for y in range(-pad, -pad + K_size):K[y + pad, x + pad] = np.exp( -(x ** 2 + y ** 2) / (2 * (sigma ** 2)))K /= (2 * np.pi * sigma * sigma) K /= K.sum()tmp = out.copy()# filteringfor y in range(H):for x in range(W):for c in range(C): out[pad + y, pad + x, c] = np.sum(K * tmp[y: y + K_size, x: x + K_size, c])out = np.clip(out, 0, 255)out = out[pad: pad + H, pad: pad + W].astype(np.uint8)return out
sigma的意义及选取
高斯滤波器模板的生成最重要的参数就是高斯分布的标准差σ。
标准差代表着数据的离散程度,如果σ较小,那么生成的模板的中心系数较大,而周围的系数较小,这样对图像的平滑效果就不是很明显;
反之,σ较大,则生成的模板的各个系数相差就不是很大,比较类似均值模板,对图像的平滑效果比较明显
高斯分布的概率分布密度图 ↑
可以看到:σ越小分布越瘦高,σ越大分布越矮胖
不同sigma和k_size结果展示
#sigma=0.5 k_size=3
out_05=gaussian_filter(img_copy,sigma=0.5)
plt.imshow(out_05)
#sigma=0.5 k_size=5
out_05_5=gaussian_filter(img_copy,K_size=5,sigma=0.5)
plt.imshow(out_05_5)
#sigma=0.8 k_size=3
out_08=gaussian_filter(img_copy,sigma=0.8)
plt.imshow(out_08)
#sigma=0.8 k_size=5
out_08_5=gaussian_filter(img_copy,K_size=5,sigma=0.8)
plt.imshow(out_08_5)
#sigma=1.3 k_size=3
out_13=gaussian_filter(img_copy,sigma=1.3)
plt.imshow(out_13)
#sigma=1.3 k_size=5
out_13_5=gaussian_filter(img_copy,K_size=5,sigma=1.3)
plt.imshow(out_13_5)
#sigma=2.0 k_size=3
out_20=gaussian_filter(img_copy,K_size=3,sigma=2.0)
plt.imshow(out_20)
#sigma=2.0 k_size=5
out_20_5=gaussian_filter(img_copy,K_size=5,sigma=2.0)
plt.imshow(out_20_5)
源码地址
https://github.com/Xnhyacinth/xnhyacinth/blob/master/CV/Gaussian%20Filter.py
高斯滤波器(Gaussian Filter) python实现及部分原理说明(opencv)相关推荐
- 高斯-赛得尔迭代式 c++_高斯混合模型(Gaussian Mixture Model)与EM算法原理(一)
高斯混合模型(Gaussian Mixture Model)是机器学习中一种常用的聚类算法,本文介绍了其原理,并推导了其参数估计的过程.主要参考Christopher M. Bishop的<Pa ...
- python实现浮雕效果的原理_python+opencv+图像特效(图像灰度处理、颜色翻转、图片融合,边缘检测,浮雕效果,颜色映射)...
原图 图像灰度处理 #方式1 import cv2 #读取彩色原图 img0=cv2.imread('E:/python_cv/01.jpg',1) #读取灰度图 img1=cv2.imread('E ...
- 使用OpenCV进行图片模糊处理(高斯滤波器)
本篇博客主要介绍如何使用OpenCV自带的高斯滤波器来对图片进行处理,达到模糊图片的效果.在代码中通过使用一个TrackerBar动态改变.具体的还是根据代码来进行解释吧: 先看一下效果图: gif不 ...
- python一维平滑滤波_高斯滤波器的原理及其实现过程(附模板代码)
本文主要介绍了高斯滤波器的原理及其实现过程高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像.其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出.其窗口模板的系数和均值滤波器不同 ...
- Python机器视觉--OpenCV进阶(核心)--常用低通滤波器(方盒滤波器,均值滤波器,高斯滤波器,中值滤波器,双边滤波器)
1.常用低通滤波器介绍 1.1低通滤波器与高通滤波器的区别: 1.低通滤波主要用于噪点的消除或者是用于图像的降噪 2.高通滤波器主要于图像边缘的寻找 1.2 方盒滤波 boxFilter(src, d ...
- Python先生,你好!(5)——使用高斯滤波器提取图像特征
Python先生,你好!(5)--使用高斯滤波器提取图像特征 (一)前 言 (二)高斯滤波器的python实现 (三)总 结 (一)前 言 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图 ...
- 二维高斯滤波器(gauss filter)的实现
我们以一个二维矩阵表示二元高斯滤波器,显然此二维矩阵的具体形式仅于其形状(shape)有关: def gauss_filter(kernel_shape): 为实现二维高斯滤波器,需要首先定义二元高斯 ...
- python实现陷波滤波器、低通滤波器、高斯滤波器、巴特沃斯滤波器
在一幅图像中,其低频成分对应者图像变化缓慢的部分,对应着图像大致的相貌和轮廓,而其高频成分则对应着图像变化剧烈的部分,对应着图像的细节(图像的噪声也属于高频成分). 滤波器 低通滤波器 高通滤波器 陷 ...
- 卡尔曼滤波器(Kalman Filter) 理解
卡尔曼滤波器 1 简介(Brief Introduction) 在学习卡尔曼滤波器之前,首先看看为什么叫"卡尔曼".跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是 ...
最新文章
- .net 中,使用c# 语言 ,执行exe程序。
- 对于初学者而言!如何处理 Python 入门难以进步的现象?
- 第11章-img特征,vertical-align,cursor,opacity
- java编程中的持有对方引用是什么意思?有什么作用?
- ASP.NET——基础 12、Request
- 【系统】windows2003 至少有一个服务或驱动程序无法加载或错误
- git rebase和 merge的区别
- python字符串的内建函数_python的字符串内建函数
- SEGGER-RTT调试(代替串口printf输出)的使用方法
- 绿联网卡转接mac设置_苹果中文系统USB外置网卡驱动安装方法
- python题目-完数
- 根据时间段自动调节pulseaudio音量
- php64转码,Base64的编码转换方式
- 关于建站、服务器、云虚拟主机你想知道的都在这里!
- Nginx 安全漏洞
- 物理机安装Ubuntu
- Python爬虫——Scrapy 的基本使用
- carla学习笔记(五)
- 普林斯顿 计算机专业排名,普林斯顿大学计算机排名2020年全球超级有用干货
- 闲的发慌系列01-家庭版NAS