Python 直方图 均衡化 高斯滤波
- 一、直方图
- 1.基本原理
- 2.实现代码
- 3.运行结果
- 二、直方图均衡化
- 1.基本原理
- 2.实现代码
- 3.运行结果
- 三、高斯滤波
- 1.基本原理
- 2.实现代码
- 3.运行结果
一、直方图
1.基本原理
什么是直方图:图像直方图是反映一个图像像素分布的统计表,其实横坐标代表了图像像素的种类,可以是灰度的,也可以是彩色的。纵坐标代表了每一种颜色值在图像中的像素总数或者占所有像素个数的百分比。
图像是由像素构成,因为反映像素分布的直方图往往可以作为图像一个很重要的特征。在实际工程中,图像直方图在特征提取、图像匹配等方面都有很好的应用。
直方图显示图像数据时会以左暗又亮的分布曲线形式呈现出来,而不是显示原图像数据,并且可以通过算法来对图像进行按比例缩小,且具有图像平移、旋转、缩放不变性等众多优点。直方图在进行图像计算处理时代价较小,所以经常用于图像处理!
2.实现代码
from array import array
from PIL import Image
from pylab import *
# 解决中文乱码
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.rcParams['axes.unicode_minus'] = False
#
im = array(Image.open('data/1.jpg').convert('L')) # 打开图像,并转成灰度图像
print(im)
figure()
subplot(121)
gray()
contour(im, origin='image') #画图
axis('equal') # 自动调整比例
axis('off') # 去除x y轴上的刻度
title(u'图像轮廓')
subplot(122)
# flatten()函数可以执行展平操作,返回一个一维数组
hist(im.flatten(), 128)
print(im.flatten())
title(u'图像直方图')
plt.xlim([0,260])
plt.ylim([0,11000])
show()
3.运行结果
二、直方图均衡化
1.基本原理
什么是直均衡化方图:如果一幅图像的灰度直方图几乎覆盖了整个灰度的取值范围,并且除了个别灰度值的个数较为突出,整个灰度值分布近似于均匀分布,那么这幅图像就具有较大的灰度动态范围和较高的对比度,同时图像的细节更为丰富。已经证明,仅仅依靠输入图像的直方图信息,就可以得到一个变换函数,利用该变换函数可以将输入图像达到上述效果,该过程就是直方图均衡化。
实际的直方图均衡化很少能够得到完全平坦的直方图。尽管如此,均衡化有助于图像直方图的延展,均衡化后图像的灰度级范围更宽,有效地增强了图像的对比度。
2.实现代码
# -*- coding: utf-8 -*-
from PIL import Image
from pylab import *
from PCV.tools import imtools
# 添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)
im = array(Image.open('data/d.png').convert('L')) # 打开图像,并转成灰度图像
im2, cdf = imtools.histeq(im)
figure()
subplot(2, 2, 1)
axis('off')
gray()
title(u'原始图像', fontproperties=font)
imshow(im)
subplot(2, 2, 2)
axis('off')
title(u'直方图均衡化后的图像', fontproperties=font)
imshow(im2)
subplot(2, 2, 3)
axis('off')
title(u'原始直方图', fontproperties=font)
#hist(im.flatten(), 128, cumulative=True, normed=True)
hist(im.flatten(), 128, density=True)
subplot(2, 2, 4)
axis('off')
title(u'均衡化后的直方图', fontproperties=font)
#hist(im2.flatten(), 128, cumulative=True, normed=True)
hist(im2.flatten(), 128, density=True)
show()
3.运行结果
三、高斯滤波
1.基本原理
什么是高斯滤波:高斯滤波器是一种线性滤波器,能够有效的抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数都是相同的为1;而高斯滤波器的模板系数,则随着距离模板中心的增大而系数减小。所以,高斯滤波器相比于均值滤波器对图像个模糊程度较小。
2.实现代码
import cv2
import matplotlib.pyplot as plt
im=cv2.imread("data/d.png")
# 高斯滤波
img_Guassian = cv2.GaussianBlur(im,(15,5),0)
plt.subplot(121)
plt.imshow(im)
plt.subplot(122)
plt.imshow(img_Guassian)
plt.show()
3.运行结果