文章目录

  • 一、实验需求
  • 二、平台
  • 三、安装时遇到的问题
  • 四、图像基本原理
  • 4.1 灰度直方图
  • 4.2 高斯滤波(高斯模糊)
  • 4.3 直方图均衡化
  • 五、实验代码和结果
  • 5.1灰度直方图 histogram.py
  • 5.2高斯滤波(高斯模糊)gauss.py
  • 5.3直方图均衡化 equalization.py
  • 六、总结


一、实验需求

构造python环境,并使用python语言进行基础图像处理(直方图,高斯滤波、直方图均衡化等)

二、平台

平台:JetBrains PyCharm 5.0.3
包管理:Anaconda2
解释器:python2.7

三、安装时遇到的问题

安装python时,一开始我选择的是python3的版本,但是由于运行时出现的一系列问题我又改成了python2,而因为Anaconda2里面基础的包比较多,不用自己下载,所以最后我使用Anaconda2来搭载需要的环境。平台我选择的是PyCharm,因为该平台构建项目时比较清晰,且可debug。

在安装上述软件时,主要问题出现在我一开始对于python环境搭建的不熟悉,到最后使用Anaconda2时出现以下情况:

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe9 in position 0: ordinal not in range(128)

在Python里origin显示语法错误 python处理origin_直方图均衡化


原因:因为默认情况下,Python采用的是ascii编码方式,如下所示:

python -c "import sys; print sys.getdefaultencoding()" ascii

而Python在进行编码方式之间的转换时,会将 unicode 作为“中间编码”,但 unicode 最大只有 128 那么长,所以这里当尝试将 ascii 编码字符串转换成"中间编码" unicode 时由于超出了其范围,就报出了如上错误。

解决方法:
在/usr/lib/python2.7/site-packages/目录下添加一个sitecustomize.py文件,内容如下:

import sys
sys.setdefaultencoding('utf-8')

这个方法我是参照:

之后将原来下载的python2/3环境,全部卸载干净就可以了,再重新load,Anaconda2自带的python2.7就可以了。

四、图像基本原理

4.1 灰度直方图

图像直方图(histogram)是图像的统计学特征,常用于了解图像的基本特征以便分析。不过图像的直方图不具有空间特征。
图像的灰度直方图(histogram),就是将图像转化成灰度图像之后,统计各个像素点的灰度值,绘制成直方图,其横轴是灰度值(0,255),纵轴是该灰度值所对应的像素的数目。对灰度直方图做积分=图像的size。

4.2 高斯滤波(高斯模糊)

高斯模糊实质上就是一种均值模糊,只是高斯模糊是按照加权平均的,距离越近的点权重越大,距离越远的点权重越小。

通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。

4.3 直方图均衡化

直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。直方图均衡化虽然只是数字图像处理(Digital Image Processing)里面的基本方法,但是其作用很强大,是一种很经典的算法。

五、实验代码和结果

原图

在Python里origin显示语法错误 python处理origin_直方图均衡化_02

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:/HSK.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()

在Python里origin显示语法错误 python处理origin_直方图均衡化_03

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:/HSK.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()

在Python里origin显示语法错误 python处理origin_python_04

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:/HSK.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()

在Python里origin显示语法错误 python处理origin_直方图均衡化_05

六、总结

本次实验借助python实现对图像处理的基础要求,虽然源代码并不是由自己打造出来,但是通过本次实验也大概了解了图像基础的原理,并对python语言有进一步的了解。