图像实验报告1.docx
《图像实验报告1.docx》由会员分享,可在线阅读,更多相关《图像实验报告1.docx(10页珍藏版)》请在冰豆网上搜索。
图像实验报告1
甘肃政法学院
本科生实验报告
(四)
姓名:
周红
学院:
信息工程学院
专业:
信息管理与信息系统
班级:
2014信管班
实验课程名称:
图形图像处理
实验日期:
2017年4月5日
开课时间:
2016-2017学年第二学期
甘肃政法学院实验管理中心印制
实验题目
图形图像处理
小组合作
否
姓名
周红
班级
2014信管班
学号
201481020161
一、实验目的
1)掌握读、写图像的基本方法。
2)掌握Python语言中图像数据与信息的读取方法。
3)理解图像灰度变换处理在图像增强的作用。
4)掌握绘制灰度直方图的方法,理解灰度直方图的灰度变换及均衡化的方法。
二.实验环境
硬件:
装有Windows系统的计算机一台
软件:
AnacondaNavigator(spyder)
三、实验内容与步骤
(1)熟悉python语言中对图像数据读取,显示等基本函数
(2)图像灰度变换处理在图像增强的作用
(3)绘制图像灰度直方图的方法,对图像进行均衡化处理
实验原理:
1.灰度变换
灰度变换是图像增强的一种重要手段,它常用于改变图象的灰度范围及分布,是图象数字化及图象显示的重要工具。
1)图像反转
灰度级范围为[0,L-1]的图像反转可由下式获得
2)对数运算:
有时原图的动态范围太大,超出某些显示设备的允许动态范围,如直接使用原图,则一部分细节可能丢失。
解决的方法是对原图进行灰度压缩,如对数变换:
s=clog(1+r),c为常数,r≥0
3)幂次变换:
4)对比拉伸:
在实际应用中,为了突出图像中感兴趣的研究对象,常常要求局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理,即分段线性拉伸:
其对应的数学表达式为:
2.直方图均衡化
灰度直方图的横坐标是灰度级,纵坐标是该灰度级出现的频度,它是图像最基本的统计特征。
依据定义,在离散形式下,用rk代表离散灰度级,用pr(rk)代表pr(r),并且有下式成立:
式中:
nk为图像中出现rk级灰度的像素数,n是图像像素总数,而nk/n即为频数。
直方图均衡化处理是以累积分布函数变换法为基础的直方图修正法。
假定变换函数为
(a)Lena图像(b)Lena图像的直方图
当灰度级是离散值时,可用频数近似代替概率值,即
式中:
l是灰度级的总数目,pr(rk)是取第k级灰度值的概率,nk是图像中出现第k级灰度的次数,n是图像中像素总数。
所以积分可以表示为下列累计分布函数(cumulativedistributionfunction,CDF)
四、实验过程与分析
实验具体实现:
1.熟悉python语言中对图像数据读取,显示等基本函数
(1)文件读取与信息显示:
importcv2
importnumpyasnp
①colorImg=cv2.imread('f:
\\image\\lena.jpg')
②huiDuImg=cv2.imread('f:
\\image\\lena.jpg',0)
③Img=cv2.cvtColor(colorImg,cv2.COLOR_RGBA2GRAY)
cv2.imshow('colorImg',colorImg)
cv2.imshow('huiDuImg',huiDuImg)
cv2.imshow('Img',Img)
cv2.waitKey(0)
cv2.destroyAllWindows()
图1文件的读取与显示显示
其中,①为读取彩色图片,②为读取灰度图像,设置图像像素为灰度,③与②效果相同。
(2)map颜色矩阵的修改
importcv2
fromPILimportImage
frompylabimport*
im=array(Image.open('f:
\\image\\lena.jpg'))
imshow(im)
printim
printim.shape#可以获取图像的形状,返回值是一个包含行数,列数,#通道数的数组,若图片是灰度图,则无通道数
foriinrange(202):
#i,j表示图像的大小,k表示(0,1,2)彩色图片取值
forjinrange(323):
forkinrange(3):
im[i,j,k]=((0.3)*im[i,j,k]+50)#进行矩阵修改
imshow(im)
cv2.waitKey(0)
cv2.destroyAllWindows()
图2map颜色矩阵的修改
3.图像灰度变换处理在图像增强的作用:
图像反转:
importcv2
importnumpyasnp
im=cv2.imread('f:
\\image\\lena.jpg',0)
cv2.imshow('im1',im)
printim
printim.shape
foriinrange(300):
forjinrange(300):
#i,j若设置的过小,则不能全部反转
im[i,j]=(-1)*im[i,j]+5//反转
cv2.imshow('im2',im)
cv2.waitKey(0)
cv2.destroyAllWindows()
图3图像反转效果图
3.绘制图像灰度直方图的方法,对图像进行均衡化处理
(1)图像灰度直方图的显示与灰度调整:
importcv2
importnumpyasnp
importmatplotlib.pyplotasplt
img=cv2.imread('f:
\\image\\lena.jpg',0)
’’’
统计并绘制直方图:
应该使用calcHist()或者np.Histogram统计直方图
Cv2.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]])返回hist值:
[0]使用的通道;None:
没有使用mask,[256]直方图大小,
[0,256]直方图柱范围,其中第一个参数必须要用[]括起来
’’’
hist_cv=cv2.calcHist([img],[0],None,[256],[0,256])
hist_np,bins=np.histogram(img.ravel(),256,[0,256])
hist_np2=np.bincount(img.ravel(),minlength=256)
plt.subplot(221),plt.imshow(img,'gray')
c
subplot在一张图中放多个子图
subplot将整个绘图区域等分成n行n列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域编号为1,如果行数+列数+区域数<10,可以把他们缩写为一个整数eg:
subplot(221)=subplot(2,2,1)#221第一行左图
plt.subplot(222),plt.plot(hist_cv)#222第一行右图
plt.subplot(223),plt.plot(hist_np)#223第二行左图
plt.subplot(224),plt.plot(hist_np2)#224第二行右图
图4图像灰度直方图的显示与灰度调整
(2)对B进行直方图均衡化处理,试比较与原图的异同:
原图像中目标物的灰度主要集中于高亮度部分,而且象素总数较多,所占的灰度等级较少。
经过直方图均衡后,目标物的所占的灰度等级得到扩展,对比度加强,使整个图像得到增强。
数字图像均衡化后,其直方图并非完全均匀分布,这是因为图像的象素个数和灰度等级均为离散值,而且均衡化使灰度级并归。
因此,均衡化后,其直方图并非完全均匀分布。
代码和结果截图如下所示:
importcv2
importmatplotlib.pyplotasplt
img=cv2.imread('f:
\\image\\lena.jpg',0)
res=cv2.equalizeHist(img)#直方图均衡化
#为了同时在一个窗口中显示多个图像,使用plt.subplot()
plt.subplot(121),plt.imshow(img,'gray')
plt.subplot(122),plt.imshow(res,'gray')
图5直方图均衡化处理比较异同
(3)对B进行如图所示的分段线形变换处理,试比较与直方图均衡化处理的异同。
fromskimageimportdata,exposure
importmatplotlib.pyplotasplt
img=cv2.imRead(‘f:
\\image\\lena.jpg’,0);
plt.figure('hist',figsize=(8,8))
arr=img.flatten();#将2维数组一维化
plt.subplot(221)
plt.imshow(img,cmap=plt.cm.gray)
#原始图像
plt.subplot(222)
#原始图像直方图
plt.hist(arr,bins=256,normed=1,edgecolor='None',facecolor='red')
#原始图像均衡化
img1=exposure.equalize_hist(img)
arr1=img1.flatten()
plt.subplot(223)
plt.imshow(img1,cmap=plt.cm.gray)
plt.subplot(224)
#均衡化图像直方图
plt.hist(arr1,bins=256,normed=1,edgecolor='None',facecolor='red')
plt.show()
图6分段线形处理比较异同结果
五、实验总结
图形图像处理是一门十分有用的学科,在实际生活中应用很广泛。
经过此次的实验,感受到Python语言的强大,不过因为刚入门,还不具体了解其功能,第一次实验做的很吃力。
在实验中遇到了很多棘手的问题,同学对我的帮助很大,让我逐一解决难题。
经过这次的实验,我了解了imread()读取彩色图像/灰度图像,imshow()显示图像,文件的结尾需要加上cv2.waitKey(),cv2.destroyAllWindows()来结束进程。
这些都是基本的知识,我知道后面的实验会更加具有挑战性,希望以后可以学到更多的知识从而感受图形图像处理的巨大魅力。