图像运算 实验报告.docx

上传人:b****1 文档编号:15001466 上传时间:2023-06-29 格式:DOCX 页数:15 大小:1.21MB
下载 相关 举报
图像运算 实验报告.docx_第1页
第1页 / 共15页
图像运算 实验报告.docx_第2页
第2页 / 共15页
图像运算 实验报告.docx_第3页
第3页 / 共15页
图像运算 实验报告.docx_第4页
第4页 / 共15页
图像运算 实验报告.docx_第5页
第5页 / 共15页
图像运算 实验报告.docx_第6页
第6页 / 共15页
图像运算 实验报告.docx_第7页
第7页 / 共15页
图像运算 实验报告.docx_第8页
第8页 / 共15页
图像运算 实验报告.docx_第9页
第9页 / 共15页
图像运算 实验报告.docx_第10页
第10页 / 共15页
图像运算 实验报告.docx_第11页
第11页 / 共15页
图像运算 实验报告.docx_第12页
第12页 / 共15页
图像运算 实验报告.docx_第13页
第13页 / 共15页
图像运算 实验报告.docx_第14页
第14页 / 共15页
图像运算 实验报告.docx_第15页
第15页 / 共15页
亲,该文档总共15页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

图像运算 实验报告.docx

《图像运算 实验报告.docx》由会员分享,可在线阅读,更多相关《图像运算 实验报告.docx(15页珍藏版)》请在冰点文库上搜索。

图像运算 实验报告.docx

图像运算实验报告

评分

 

 

实验报告

 

课程名称医学图像处理

实验名称图像运算

专业班级

姓名

学号

实验日期

实验地点

 

2015—2016学年度第2学期

一、实验目的

MATLAB的图像处理工具箱提供了图像运算函数。

本实验将具体介绍Matlab中的图像点运算、代数运算、几何和邻域操作运算。

二、实验环境

1、硬件配置:

处理器:

Intel(R)Core(TM)i7-3770CPU@3.40GHz3.40GHz

安装内存(RAM):

4.00GB系统类型:

64位操作系统

2、软件环境:

MATLABR2013b软件

三、实验内容

利用Matlab对图像进行点运算、加法运算、减法运算、乘法运算、除法运算、改变图像的大小、旋转图像、图像的剪切、图像的邻域操作。

四、实验结果与分析

(包括实验原理、数据的准备、运行过程分析、源程序(代码)、图形图象界面等)

注:

本项可以增加页数

例1图像点运算

skull=imread('skull.tif');%读取图像

subplot(131),imshow(skull)%生成一行三列三块区域,并在第一块区域绘制图像

I=double(skull);%转换为双精度类型

J=I*0.43+60;%利用该函数对输出图像进行压缩,使其对比度减小,图像变暗

skull2=uint8(J);%转换为uint8

subplot(132),imshow(skull2)%在第二块区域绘制图像

J=I*1.5-60;%利用该函数对输出图像进行对比度级数拓展,使其对比度增强,图像变亮

skull3=uint8(J);%转换为uint8

subplot(133),imshow(skull3)%在第三块区域绘制图像

运行结果:

图1原图像图2对比度减小的图像图3对比度增强的图像

分析:

1)subplot是用于将多个图像画到一个平面上的函数。

subplot(m,n,p,)中的m表示m行,n表示n列,p表示从左到右的第几块区域;

2)uint8表示8位无符号的整型数据类型,以此方式存储的图像称作8位图像;而Matlab中数值一般采用double型的存储和运算,因此在进行本题的灰度变换运算时,应先把skull图像转化为double格式;

3)线性灰度变换函数当a=1,b=0时,输出图像像素不发生变化;当a=1,

时,输出图像所有灰度值上移或下移;当

时,输出图像灰度级压缩,对比度减小,如图2所示;当

时,输出图像灰度级拓展,对比度增强,如图3所示;当

时,输出图像暗区域变亮,亮区域变暗,图像求反。

2、图像的代数运算

例2图像加法运算

skull=imread('skull.tif');%读取图像

imshow(skull)%显示图像

J=imread('cameraman.tif');%读取图像

figure,imshow(J)%显示图像

I=imresize(skull,[256,256]);%将skull图像转换为

的大小

K=imadd(I,J);%对两幅图像的灰度值进行加法运算

figure,imshow(K)%显示图像

K2=imadd(I,J,'uint16');%对两幅图像的灰度值进行加法运算,并转化为uint16

figure,imshow(K2,[])%显示图像

RGB=imread('skull.tif');%读取图像

RGB2=imadd(RGB,50);%将图像skull与常数50相加

imshow(RGB)%显示RGB图像

figure,imshow(RGB2)%显示亮度增强50的RGB图像

RGB3=imadd(RGB,100);%将图像skull与常数100相加

figure,imshow(RGB3)%显示亮度增强100的RGB图像

运行结果:

图4skull原图像图5cameraman原图像图6两幅相加后的图像

图7转化为uint16的图像图8RGB原图图9亮度增强50后的图像

图10亮度增强100后的图像

分析:

1)imadd是用于实现两图像灰度值相加的函数,imadd(I,J)中的I和J要求大小相等,由于我读取的skull图像的尺寸为

,因此在进行I和J的加法运算前须利用imresize函数把skull图像转换为

的大小;

2)I和J进行相加后的图像如图6所示,而在I和J相加的基础上将其转换为uint16的图像如图7所示,我们可以清楚的发现图6比图7的更亮,但细节比图7的模糊,这是由于Matlab在运算后会自动将图像转换为double型,因此uint16的图像是比double型的图像更清晰;

3)imadd(RGB,50)是将一个常数50加到RGB图像上,即使图像的灰度级增强了50,如图9所示,以此类推,图10为灰度级增强了100的图像。

例3图像减法运算

I=imread('skull.tif');%读取图像

imshow(I)%显示图像

background=imopen(I,strel('disk',15));%估计圆盘半径为15的背景图像

figure,imshow(background);%显示背景图

I2=imsubtract(I,background);%从原始图像中减去不均匀的背景图

运行结果:

图11skull原图图12背景图图13减去背景图后的图像

分析:

1)imopen开运算属于形态图像处理,是先腐蚀后膨胀,可以使边界平滑,消除尖刺,断开窄小的连接,保持面积大小不变;strel是用于构建结构元素对象,imopen(I,strel('disk',15))就是构建圆盘半径为15的背景图,如图12所示;

2)imsubtract函数是用于两幅图像的相减运算,如图13所示,减去不均匀的部分后,图像变得更加平滑。

例4图像的乘法运算

I=imread('skull.tif');%读取图像

J=immultiply(I,1.2);%图像的乘法,缩放因子是1.2>1,增强图像的亮度

K=immultiply(I,0.5);%图像的乘法,缩放因子是0.5<1,减小图像的亮度

imshow(I)%显示原图像

figure,imshow(J)%显示亮度增强图像

figure,imshow(K)%显示亮度减小图像

运行结果:

图14skull原图图15亮度增强后的图像图16亮度减小后的图像

分析:

1)乘法运算可以实现掩模操作,即屏蔽掉图像的某些部分

2)一幅图像乘以一个常数通常被称为缩放。

immultiply(I,1.2),使用的缩放因数大于1,那么将增强图像的亮度,如图15所示;immultiply(I,0.5)中的因数小于1则会使图像变暗,如图16所示。

例5图像除法运算

I=imread('skull.tif');%读取原图像

J=double(I)*0.43+80;%利用该函数对输出图像进行处理,是对比度减小,图像变暗

J=uint8(J);%转换成uint8

K=imdivide(I,J);%除法运算

imshow(I)%显示原图像

figure,imshow(J)%显示对比度减小的图像

figure,imshow(K)%显示灰度级相除后的图片

运行结果:

图17skull原图图18对比度减小的图片图19灰度级相除后的图片

分析:

1)J=double(I)*0.43+80是将skull图像转换为double型再对其进行灰度变换运算,使其灰度级减小,如图18所示;

2)imdivide(I,J)要求I和J数据类型一致,因此在进行此运算时,须先将double型的J转换为uint8,两幅图像的灰度级相除后的到的结果为[0,1],因为其灰度级极其相近且小,肉眼无法分辨,故我们所看到的输出图像几近与纯黑色,如图19所示;

3)除法运算是用于校正成像设备的非线性影响。

例6图像的几何运算

I=imread('skull.tif');%读取图像

J=imresize(I,1.25);%返回图像J,其长宽是图像I的长宽的1.25倍,即放大图像

K=imresize(I,0.8);%返回图像K,其长宽是图像I的长宽的0.8倍,即缩小图像

imshow(I)%显示原图

figure,imshow(J)%显示尺寸放大的图像

figure,imshow(K)%显示尺寸减小的图像

Y=imresize(I,[100,150]);%返回图像Y,高度为100,宽度为150

figure,imshow(Y)%显示

的图像

运行结果:

图20skull的原图像图21尺寸放大的图像图22尺寸减小的图像

图23

的图像

分析:

1)imresize函数可改变图像输出图像的大小,J=imresize(I,1.25)为返回图像J,其长宽是图像I的长宽的1.25倍,即放大图像,如图21所示;K=imresize(I,0.8)为返回图像K,其长宽是图像I的长宽的0.8倍,即缩小图像,如图22所示;

2)Y=imresize(I,[100,150])是直接指定输出图像真实的大小,即返回图像Y,高度为100,宽度为150。

例7旋转一幅图像

I=imread('skull.tif');%读取图像

J=imrotate(I,30,'bilinear');%将图像skull绕图像的中心点旋转30度

J1=imrotate(I,30,'bilinear','crop');%crop:

通过对旋转后的图像进行裁剪,保持旋转后输出图像J1的尺寸和输入图像skull的尺寸一样。

imshow(I)%显示原图

figure,imshow(J)%显示逆时针旋转30度的图像

figure,imshow(J1)%显示裁剪后的图像

J2=imrotate(I,-15,'bilinear');%将图像顺时针旋转15度,进行双线性插值

figure,imshow(J2)%显示顺时针旋转15度的图像

运行结果:

图24skull的原图像图25逆时针旋转

的图像图26裁剪后的图像

图27顺时针旋转

的图像

分析:

1)Imrorate(x,n)是用于对图像进行旋转的函数,其中X若为正数则表示逆时针旋转,数则表示顺时针旋转;J=imrotate(I,30,'bilinear')表示逆时针旋转30度,如图25所示;其中bilinear为双线性插值,在两个方向分别进行一次线性插值;J2=imrotate(I,-15,'bilinear')则表示顺时针旋转15度,如图27所示;

2)J1=imrotate(I,30,'bilinear','crop')中的crop是通过对旋转后的图像进行裁剪,保持旋转后输出图像J1的尺寸和输入图像skull的尺寸一样,如图26所示。

 

例8图像剪切

%通过交互操作,从一幅图像中剪切一个矩形区域。

I=imread('skull.tif');%读取图像

imshow(I);%显示图像I

I1=imcrop;%对图像进行自由地剪切操作

figure,imshow(I1)%显示图像I1

I2=imcrop(I,[3060120160]);%剪切图像I,坐标(30,60)往下120*160的图像

figure,imshow(I2)%显示图像I2

运行结果:

图28skull的原图像图29手动剪切后的图像图30定义剪切后的图像

分析:

1)imcrop用于返回图像的一个裁剪区域,但其也允许用户自己以交互方式使用鼠标选定要剪切的区域;因此如图29所示,为我们自己手动剪切的图像;I2=imcrop(I,[3060120160])为剪切横坐标30-60,纵坐标60-160的图像区域,如图30所示。

 

例9图像的领域操作

I=imread('skull.tif');%读取原图

f=inline('max(x(:

))');%定义一个取最大值的函数f,构造复合函数

I2=nlfilter(I,[33],f);%对图像I的每一个3*3滑块应用函数f,滑动邻域操作

imshow(I)%显示原图

figure,imshow(I2)%显示进行滑动邻域操作的图像

I=imread('skull.tif');%读取原图

f=inline('uint8(round(mean2(x)*ones(size(x))))');%构造复合函数

I2=blkproc(I,[88],f);%对图像I的每一个8*8滑块应用函数f,分离邻域操作

imshow(I)%显示原图

figure,imshow(I2)%显示分离邻域操作的图像

 

运行结果:

图31skull的原图像图32滑动邻域操作的图像图33分离邻域操作的图像

分析:

1)nlfilter是对图像进行边沿操作,即进行滑动邻域操作,nlfilter(I,[33],f)为对图像I的每一个3*3滑块应用函数f进行滑动邻域操作,如图32所示;

2)blkproc是实现图像的显示块操作,即分离邻域操作,blkproc(I,[88],f)为对图像I的每一个8*8滑块应用函数f进行分离邻域操作,如图33所示;

五、实验小结:

(包括主要实验问题的最终结果描述、详细的收获体会,待解决的问题等)

在此次实验中,由于实验内容更贴近生活应用,因此比起上学期,我们更容易领悟该程序的表达,只是在细节方面还是很容易出错,甚至不容易拐过弯来。

在实验中应注意的点:

1)在编写运行文件的时候要选择正确的路径,图片保存在哪里,就应该选择哪里,不然就会出现读取错误。

2)显示图像中的以灰度级20显示图像的时候,因为灰度级定义得太小,导致无图像显示,这时我们可以用增大灰度级的方法,imshow(J,100);或imshow(J,[0,100]);显示部分图像信息.

3)当用imshow显示另一图像时,MATLAB会字屏幕上用新图像替换旧图像。

为保持第一幅图像并显示第二幅图像,可以用figure函数。

4)在进行图像的运算时应注意保持图像的类型和大小一致

5)明确每一种代数运算的意图,并学会理论联系实际,对输出图像进行分析。

 

手写签名:

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

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2