图像实验报告1.docx

上传人:b****7 文档编号:11369127 上传时间:2023-02-28 格式:DOCX 页数:10 大小:824.75KB
下载 相关 举报
图像实验报告1.docx_第1页
第1页 / 共10页
图像实验报告1.docx_第2页
第2页 / 共10页
图像实验报告1.docx_第3页
第3页 / 共10页
图像实验报告1.docx_第4页
第4页 / 共10页
图像实验报告1.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

图像实验报告1.docx

《图像实验报告1.docx》由会员分享,可在线阅读,更多相关《图像实验报告1.docx(10页珍藏版)》请在冰豆网上搜索。

图像实验报告1.docx

图像实验报告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()来结束进程。

这些都是基本的知识,我知道后面的实验会更加具有挑战性,希望以后可以学到更多的知识从而感受图形图像处理的巨大魅力。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1