计算机视觉 - 直方图、高斯滤波及直方图均衡化

一、直方图 

代码:

from PIL import Image
from pylab import *
from numpy import *

im=array(Image.open('D:/img/cs.jpg').convert('L'))
#读取图片并转化为灰度图

gray()
subplot(121)
imshow(im)

subplot(122)
hist(im.flatten(),256)

show()

结果:

以下右图为左图的直方图

 

 

 说明:

读取图片,将图片进行灰度转换,转换后的灰度图可以看成是一个二维的灰度值矩阵,遍历矩阵,对相同的灰度值进行统计就可以得到灰度图的直方图

gray()函数是使得图片显示为灰色,若不加此句会使结果中的左边图像呈现蓝绿色

hist()是python库自带的函数,统计生成直方图

flatten()函数是将图片的二维矩阵转换成一维

二、高斯滤波

代码:

from PIL import Image
from pylab import *
from numpy import *
from scipy.ndimage import filters

img = Image.open('D:/img/cs.jpg').convert('L')

gray()
subplot(121)
imshow(img)

subplot(122)
G = filters.gaussian_filter(img,10) #10是σ,标准差的值,指的是高斯核的标准差
imshow(G)

show()

结果:

左图为原始图片,右图为经过高斯模糊后的图片

 

 说明:

高斯滤波是一种广泛用于对图像进行降噪的线性平滑滤波,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯核,其实就是一个权值的矩阵,高斯核旋转180°,核的中心对着某点的像素,将高斯核所覆盖的像素点与核进行相乘然后相加就得到该点的像素值,这就是高斯滤波的卷积运算。噪声点比较尖锐突出时,像高斯滤波这样会将噪声点周围的像素点纳入考虑,进行加权平均,通过周围点对噪声点的影响减少噪声点的强度或影响。(这是个人理解)

参考:https://blog.csdn.net/lvquanye9483/article/details/81592574

三、直方图均衡化

代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread("D:/img/cs.jpg",1)
src_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
dst = cv2.equalizeHist(src_gray)
plt.subplot(221)
plt.imshow(src_gray)
plt.subplot(222)
plt.hist(src_gray.ravel(),256)
plt.subplot(223)
plt.imshow(dst)
plt.subplot(224)
plt.hist(dst.ravel(),256)
plt.show()

结果:

第一行为原图和直方图,第二行为均衡化后的图像和直方图

 

 说明:

直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法。

参考:https://blog.csdn.net/u013066730/article/details/82969768    数学原理

   http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/histogram_equalization/histogram_equalization.html

posted @ 2021-03-08 18:44  予醉伴花眠  阅读(683)  评论(0)    收藏  举报