图像灰度化
# -*- 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)
figure()
pil_im = Image.open('E:/iu.jpg')
gray()
subplot(121)
title(u'原图',fontproperties=font)
axis('off')
imshow(pil_im)
pil_im = Image.open('E:/iu.jpg').convert('L')
subplot(122)
title(u'灰度图',fontproperties=font)
axis('off')
imshow(pil_im)
show()
图像轮廓和直方图
一副灰度图像是由不同的灰度的像素值组成的,而图像中的灰度值的分布则反映了一定的图像特征,即图像亮度特征,如果直方图的值偏向于0,则表示该图像亮度偏暗,如果直方图的值偏向于255(我们通常进行归一化,将图像的像素值设置在[0,1]区间内,则表示该图像亮度偏亮,我们画出的直方图横坐标表示灰度值,纵坐标表示该灰度值出现的次数
# -*- 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('E:/iu.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])
print ('xxx')
show()
直方图均衡化
当我们发现一张图片比较暗(如夜间拍的图片)整体会显得暗一些,如果我们画出这张图片的直方图,这个直方图的整体数值就会偏向于0,然而这并不是我们想得到的,我们想要得到的是一个每个像素值的分布处在一个尽量均匀分布的状态,这样我们才能得到清晰的图像,换句话说也就是我们增强图像的对比度
# -*- 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('E:/iu.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 numpy import *
from scipy.ndimage import filters
import copy
im = array(Image.open("E:/iu.jpg"))
r = im[:, :, 0]
g = im[:, :, 1]
b = im[:, :, 2]
r = filters.gaussian_filter(r, 2)
g = filters.gaussian_filter(g, 2)
b = filters.gaussian_filter(b, 2)
img2 = copy.deepcopy(im)
img2[:, :, 0] = r
img2[:, :, 1] = g
img2[:, :, 2] = b
subplot(121)
title('source')
axis('off')
imshow(im)
subplot(122)
title('after')
axis('off')
imshow(img2)
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('E:/iu.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()