前言
此次博客内容是回顾上学期的数字图像处理的内容,为后面的计算机视觉的课做铺垫。
一、实验目的
利用python完成直方图、高斯滤波、直方图均衡化的结果。
二、实验内容
1.实现图像的直方图
(1)原理
图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。
(2)实现
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('C:/Users/ASUS/Desktop/matlab.jpg')
grayimg = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) # 转化为灰度图grayimg
cv2.imshow('img', img)
cv2.imshow('grayimg', grayimg)
cv2.waitKey(0) # 显示的时间:如1000就是1000ms,0就是一直等待
cv2.destroyAllWindows()
arr1 = grayimg.flatten() # 将灰度图转化成一维数组
plt.hist(arr1, bins=256, density=0, facecolor='blue', alpha=0.75)
# bins: 直方图的柱数,density=0:不进行归一化操作,值为1反之,facecolor:直方图颜色,alpha:透明度
plt.show()
2.高斯滤波
(1)原理
高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像去噪。可以简单地理解为,高斯滤波去噪就是对整幅图像像素值进行加权平均,针对每一个像素点的值,都由其本身值和邻域内的其他像素值经过加权平均后得到。高斯滤波的具体操作是:用一个用户指定的模板(或称卷积、掩膜)去扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。
gaussian_filter(): 高斯滤波函数,输入到函数的是矩阵以及标准差,返回值是和输入同样形状的矩阵;设置的标准差越大,得到的图像越模糊,
(2)实现
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('C:/Users/ASUS/Desktop/matlab.jpg')
imgout = cv2.GaussianBlur(img, (3, 3), 0)
cv2.imshow('imgout',imgout)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
原图:
高斯滤波之后的图片:
3.直方图均衡化的结果
(1)原理
直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法,这样增加了像素灰度值的动态范围,从而达到增强图像整体对比度的效果。
(2)实现
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('C:/Users/ASUS/Desktop/matlab.jpg')
grayimg = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)#转化为灰度图grayimg
jen_heng= cv2.equalizeHist(grayimg)
arr2=jen_heng.flatten()#均衡化
cv2.imshow('prototype',grayimg)
cv2.imshow('jun hen hua', jen_heng)
cv2.waitKey(0)
plt.figure("done")
n2, bins2, patches2 = plt.hist(arr2, bins=256, density=0, facecolor='blue', alpha=0.75)
plt.show()