文章目录
图像处理基础
1、实验需求
以自己的计算智能博客(大头照或生活照)为基础,做完图像处理基础章节内容,并将直方图、高斯滤波、直方图均衡化的结果及基本原理描述放到博客中
2、语言和平台
语言:python2.7.13 (anaconda2)
平台:pycharm 2018.2
3、图像处理基本原理
3.1 灰度直方图
灰度直方图反映的是一幅图像中各灰度级像素出现的频率。以灰度级为横坐标,纵坐标为灰度级的频率,绘制频率同灰度级的关系图就是灰度直方图。它是图像的一个重要特征,反映了图像灰度分布的情况。
频率公式为:
v
i
=
n
i
/
n
v_i=n_i/n
vi=ni/n (
n
i
ni
ni为灰度为i的像元个数,
n
i
n_i
ni表示整张图片的像元数,
n
n
n表示把灰度分成多少级,该实验分为256级)
3.2 高斯滤波(高斯模糊)
所谓”模糊”,可以理解成每一个像素都取周边像素的平均值。
上图中,2是中间点,周边点都是1。
“中间点”取”周围点”的平均值,就会变成1。在数值上,这是一种”平滑化”。在图形上,就相当于产生”模糊”效果,”中间点”失去细节。
显然,计算平均值时,取值范围越大,”模糊效果”越强烈。
3.3 直方图均衡化
把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布的技术。实质上是对图像进行非线性拉伸,重新分配图像象元值,使一定灰度范围内象元值的数量大致相等。这样,原来直方图中间的峰顶部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较平的分段直方图:如果输出数据分段值较小的话,会产生粗略分类的视觉效果。直方图均衡化能起到增强图像对比度的作用。
4、重要函数
1、convert(‘L’):将图片转变为灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。
2、contour():画出图片轮廓
3、rof.denoise():基于rof的降噪处理
4、filters.gaussian_filter():高斯模糊处理
5、imtools.histeq():用自带的工具包生成均衡化直方图
5、实验代码和结果
原图
5.1灰度直方图 histogram.py
# encoding:utf-8
from PIL import Image
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
im = array(Image.open('D:/XYH.jpg').convert('L'))
figure()
subplot(121)
gray()
contour(im, origin='image')
axis('equal')
axis('off')
title(u'图像轮廓')
subplot(122)
hist(im.flatten(), 128)
title(u'图像直方图')
plt.xlim([0, 260])
plt.ylim([0, 11000])
show()
5.2高斯滤波(高斯模糊)gauss.py
# encoding:utf-8
from PIL import Image
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
from numpy import *
from scipy.ndimage import filters
from PCV.tools import rof
im = array(Image.open('D:/XYH.jpg').convert('L'))
U, T = rof.denoise(im, im)
G = filters.gaussian_filter(im, 10) # 第二个参数越大,图像越模糊
figure()
gray()
subplot(1, 3, 1)
imshow(im)
#axis(‘equal’)
axis('off')
title(u'原噪声图像')
subplot(1, 3, 2)
imshow(G)
#axis(‘equal’)
axis('off')
title(u'高斯模糊后的图像')
subplot(1, 3, 3)
imshow(U)
#axis(‘equal’)
axis('off')
title(u'ROF降噪后的图像')
show()
5.3直方图均衡化 equalization.py
# -- coding: utf-8 --
from PIL import Image
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
from PCV.tools import imtools
im = array(Image.open('D:/XYH.jpg').convert('L'))
im2, cdf = imtools.histeq(im)
figure()
subplot(2, 2, 1)
axis('off')
gray()
title(u'原始图像')
imshow(im)
subplot(2, 2, 2)
axis('off')
title(u'直方图均衡化后的图像')
imshow(im2)
subplot(2, 2, 3)
axis('off')
title(u'均衡化后的直方图' )
hist(im.flatten(), 128, normed=True)
subplot(2, 2, 4)
axis('off')
title(u'均衡化后的直方图')
hist(im2.flatten(), 128, normed=True)
show()
6、总结
1、这些相对基础的图像处理在上学期已经通过数字图像处理这门课中稍微有所了解,只不过当是用matlab编写的,和python相比,有部分相同之处也有所不同。
2、初学python,首先装环境和许多模块就用了很多时间,python可以调用其他许多第三方库之类的,用起来很方便(我不知道其他语言可不可以也这样)。