本文已参与「新人创作礼」活动,一起开启掘金创作之路。
【Python】OpenCV实现图像高斯滤波及均衡化
1、高斯滤波
1.1基本原理
据百度百科:高斯滤波主要用于对图像的降噪,处理过程中图像每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
实现高斯滤波处理的关键点即为卷积,不同于其他滤波的是高斯滤波在赋予当前像素点与周围像素点权值时会根据距离中心点的距离做出改变(距离越近则权值越大),这样能够更好的保留原始像素的特征。
如下图所示我们对一张5X5大小(必须为奇数X奇数以保证唯一中心点)的图片进行高斯滤波处理,我们定义一个3X3大小的卷积核进行扫描。以初始图像的中心点为例,我们选取该点及其周围与卷积核大小对应的8个点,乘以对应的权值再求和,最终得到的“70”即为处理过后的结果。
1.2实现结果
import cv2 as cv
image = cv.imread('C:/Users/18042/Desktop/Vision/jmu.jpg',0)
blurred = cv.GaussianBlur(image,(9,9),0)
gaussImg = image - blurred
cv.imshow('gaussImg',gaussImg)
cv.waitKey()
cv.destroyAllWindows()
2、均衡化
2.1基本原理
直方图均衡化是一种增强图像对比度的方法,其主要思想是将一副图像的直方图分布变换为近似均匀分布,从而达到增强图像对比度的目的。 equalizeHist()函数实现均衡化的原理主要为三个步骤
- 统计各灰度级出现的概率
- 计算累计直方图概率Pj
- 根据公式 INT[(L-1)Pj+0.5](其中L为灰度级长度)得出变换后的灰度值
- 根据对应关系最终得出新直方图中各灰度级的出现概率
例: i与Pi为根据已知图像得出的各灰度级分布概率,其均衡化计算过程如下图
2.2实现结果
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
image = cv.imread('C:/Users/18042/Desktop/Vision/jmu.jpg', 0)
cv.imshow('inimg', image )
outimg = cv.equalizeHist(image)
cv.imshow('outimg', outimg )
plt.hist(image.ravel(), 128, [0, 256])
plt.show()
plt.hist(outimg.ravel(), 128, [0, 256])
plt.show()
cv.waitKey()
cv.destroyAllWindows()