目录
1. 直方图
1.1 直方图的概念
图像直方图由于其计算代价较小,且具有图像平移、旋转、缩放不变性等众多优点,广泛地应用于图像处理的各个领域,特别是hui的各个领域,特别是读的阈值分割、基于颜色的图像检索以及图像分类。
我们在进行图像处理操作时,也常使用灰度直方图来直观地反映图像像素的分布。灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。
1.2 灰度直方图的代码实现
from cv2 import waitKey
import numpy as np
import matplotlib.pyplot as plt
import cv2
img=cv2.imread('C:\\Users\\Kano\\Desktop\\1.jpg')
#cvtColor函数(变换对象,转换系数),COLOR_BGR2GRAY的公式为Gray = 0.1140*R + 0.5870*G + 0.2989*B
img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#额外命名窗口,解决图片过大无法显示的问题
cv2.namedWindow('image',0)
cv2.imshow('image',img)
#plt直接绘制直方图
plt.hist(img.ravel(),256);
plt.show()
cv2.waitKey(0)
2.高斯滤波
2.1 高斯滤波的原理
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
高斯滤波实质上是一种信号的滤波器,其用途是信号的平滑处理,人们知道数字图像用于后期应用,其噪声是最大的问题,由于误差会累计传递等原因,很多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。与此相关的有Gauss-Laplace变换,其实就是为了得到较好的图像边缘,先对图像做Gauss平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积至空域卷积。
一维高斯分布:
二维高斯分布:
2.2 高斯滤波的代码实现
from cv2 import waitKey
import numpy as np
import matplotlib.pyplot as plt
import cv2
#sss
img=cv2.imread('C:\\Users\\Kano\\Desktop\\1.jpg')
img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#采用9*9的卷积核
img=cv2.GaussianBlur(img,(9,9),0)
cv2.namedWindow('image',0)
cv2.imshow('image',img)
plt.hist(img.ravel(),256);
plt.show()
cv2.waitKey(0)
3.直方图均衡化
3.1 直方图均衡化的概念
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
这种方法对于背景和前景都太亮或者太暗的图像非常有用,这种方法尤其是可以带来X光图像中更好的骨骼结构显示以及曝光过度或者曝光不足照片中更好的细节。这种方法的一个主要优势是它是一个相当直观的技术并且是可逆操作,如果已知均衡化函数,那么就可以恢复原始的直方图,并且计算量也不大。这种方法的一个缺点是它对处理的数据不加选择,它可能会增加背景噪声的对比度并且降低有用信号的对比度。
3.2 直方图均衡化的代码实现
from cv2 import waitKey
import numpy as np
import matplotlib.pyplot as plt
import cv2
img=cv2.imread('C:\\Users\\Kano\\Desktop\\1.jpg')
img=cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#采用equalizeHist函数
img=cv2.equalizeHist(img)
cv2.namedWindow('image',0)
cv2.imshow('image',img)
plt.hist(img.ravel(),256);
plt.show()
cv2.waitKey(0)