赞
踩
第 1 章 基本的图像操作和处理
本章讲解操作和处理图像的基础知识,并且演示了直方图、高斯滤波、直方图均衡化的结果。
图像轮廓和直方图
下面来看两个特别的绘图示例:图像的轮廓和直方图。绘制图像的轮廓(或者其他二维函数的等轮廓线)在工作中非常有用。在画图像轮廓前需要转换为灰度图像,因为轮廓需要获取每个坐标[x,y]位置的像素值。下面是画图像轮廓和直方图的代码:
# -*- coding: utf-8 -*- from PIL import Image from pylab import * # 添加中文字体支持 from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14) im = array(Image.open('../data/empire.jpg').convert('L')) # 打开图像,并转成灰度图像 figure() subplot(121) gray() contour(im, origin='image') axis('equal') axis('off') title(u'图像轮廓', fontproperties=font) subplot(122) hist(im.flatten(), 128) title(u'图像直方图', fontproperties=font) plt.xlim([0,260]) plt.ylim([0,11000]) show()
运行上面代码,可以得到所示的结果:
直方图均衡化
一个极其有用的例子是灰度变换后进行直方图均衡化。图像均衡化作为预处理操作,在归一化图像强度时是一个很好的方式,并且通过直方图均衡化可以增加图像对比度。下面是对图像直方图进行均衡化处理的例子:
# -*- 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/empire.jpg').convert('L')) # 打开图像,并转成灰度图像 #im = array(Image.open('../data/AquaTermi_lowcontrast.JPG').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, normed=True) subplot(2, 2, 4) axis('off') title(u'均衡化后的直方图', fontproperties=font) #hist(im2.flatten(), 128, cumulative=True, normed=True) hist(im2.flatten(), 128, normed=True) show()
运行上面代码,可以得到结果:
图像模糊
一个经典的并且十分有用的图像卷积例子是对图像进行高斯模糊。高斯模糊可以用于定义图像尺度、计算兴趣点以及很多其他的应用场合。下面是对图像进行模糊显示的例子。
# -*- coding: utf-8 -*- from PIL import Image from pylab import * from scipy.ndimage import filters # 添加中文字体支持 from matplotlib.font_manager import FontProperties font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14) #im = array(Image.open('board.jpeg')) im = array(Image.open('../data/empire.jpg').convert('L')) figure() gray() axis('off') subplot(1, 4, 1) axis('off') title(u'原图', fontproperties=font) imshow(im) for bi, blur in enumerate([2, 5, 10]): im2 = zeros(im.shape) im2 = filters.gaussian_filter(im, blur) im2 = np.uint8(im2) imNum=str(blur) subplot(1, 4, 2 + bi) axis('off') title(u'标准差为'+imNum, fontproperties=font) imshow(im2) #如果是彩色图像,则分别对三个通道进行模糊 #for bi, blur in enumerate([2, 5, 10]): # im2 = zeros(im.shape) # for i in range(3): # im2[:, :, i] = filters.gaussian_filter(im[:, :, i], blur) # im2 = np.uint8(im2) # subplot(1, 4, 2 + bi) # axis('off') # imshow(im2) show()
运行上面代码,可得结果:
上面第一幅图为待模糊图像,第二幅用高斯标准差为2进行模糊,第三幅用高斯标准差为5进行模糊,最后一幅用高斯标准差为10进行模糊。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。