一、图像灰度化
基本原理:灰度化,在RGB模型中,如果R+G+B时,则彩色表示一种灰度颜色,其中R=G=B的值叫做灰度值。因此,灰度图像每个像素只需要一个字节存放灰度值(又称强度值、亮度值),灰度范围为0~255。一般有分量法、最大值法、平均值法、加权平均法四种方法对彩色图像进行灰度化。图像灰度处理可以作为图像处理的预处理步骤,为之后的图像分割、图像识别和图像分析等上层操作做准备。在数字图像处理中一般先将各种样式的图像转变为灰度图像以使后续的图像的计算量变的少一些。灰度图像的描述与彩色图像一样仍然反映了整幅的整体和亮度等级的分布和特征。
- convert()函数
是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式
1 ------------------(1位像素,黑白,每字节一个像素存储)
L ------------------(8位像素,黑白)
P ------------------(8位像素,使用调色板映射到任何其他模式)
RGB------------------(3x8位像素,真彩色)
# -*- 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(r'C:\Users\Admin\PycharmProjects\untitled2\tu1.jpg')
gray()#不使用颜色信息
subplot(121)
title(u'原图',fontproperties=font)
axis('off')#不显示坐标
imshow(pil_im)
pil_im=Image.open(r'C:\Users\Admin\PycharmProjects\untitled2\tu1.jpg').convert('L')
subplot(122)
title(u'灰度图',fontproperties=font)
axis('off')
imshow(pil_im)
show()
二、绘制图像轮廓和图像直方图
# -*- 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(r'C:\Users\Admin\PycharmProjects\untitled2\tu1.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 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(r'C:\Users\Admin\PycharmProjects\untitled2\tu1.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)
show()
四、直方图均衡化
直方图均衡化步骤:
1.计算直方图 2.直方图归一化 3.计算累计分布直方图 4.计算新灰度级 5.映射
# -*- 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(r'C:\Users\Admin\PycharmProjects\untitled2\tu1.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, normed=True)
subplot(2, 2, 4)
axis('off')
title(u'均衡化后的直方图', fontproperties=font)
hist(im2.flatten(), 128, normed=True)
show()
总结:
1.图像灰度化:convert()函数是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式。
2.contour(im, origin='image')#实现轮廓绘制 hist(im.flatten(), 128)直方图函数
3.直方图均衡化步骤:1.计算直方图 2.直方图归一化 3.计算累计分布直方图 4.计算新灰度级 5.映射
4.histeq(im) 直方图均衡化