matlab第二次训练题目.doc

上传人:飞****2 文档编号:88931528 上传时间:2023-05-04 格式:DOC 页数:12 大小:1.40MB
返回 下载 相关 举报
matlab第二次训练题目.doc_第1页
第1页 / 共12页
matlab第二次训练题目.doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《matlab第二次训练题目.doc》由会员分享,可在线阅读,更多相关《matlab第二次训练题目.doc(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、实验名称: 数学软件训练-程序应用之图像 专业:班级:时间 姓名:学号:指导老师:一、 实验目的及要求 (一)实验目的学习和查阅图像老师所给自学文档。 (二)实验要求 独立完成所给实验题目,查阅书本及网络资料,完成相关作业,课后提交实验报告。二、实验设备(环境)及要求1、支持Intel Pentium 及其以上CPU,内存256MB以上、硬盘1GB以上容量的微机;软件配有Windows98/2000/XP操作系统及MATLAB软件;2、实验过程中,务必分析实验结果,按要求写出实验报告。(提交报告文档编写方式:学号+姓名),上网查阅相关资料,完成以下问题。三、 实验内容与步骤 一)图像基本处理,

2、用你自己的照片,完成以下问题,读入图像命令(imread)。 参考程序和样式如下:1、灰度处理由于RGB图像是三维图像,所以图像数据是一个三维数组,为了显示灰度图像,把三维图像降为二维,可以只取其中的二维数据,实现方法程序为:y=(handles.img(:,:,1); %当然也可以选择(:,:,2) 或(:,:,3) imshow(y);但是这样的话,根据程序所选的不同,图像数据也不同,显示也就不一样。另一种方法就是,运用rgb2gray函数实现彩色图像到灰度图像的转换。程序为:y=rgb2gray(handles.img); imshow(y);如果原图是RGB,执行该操作的结果如下图:2

3、亮度调整用imadjust函数,其调用格式如下: g=imadust(f,low_in high_in,low_out high_out),gamma)gamma 表示映射性质,默认值是1 表示线性映射。由于该函数有五个参数需要输入,为了方便用户改变,所以这里设计一个输入对话框,用户通过对话框把五个参数赋值给low_in high_in,low_out high_out,gamma这五个参数3截图在MATLAB中,用函数imcrop实现对图像的剪切操作。该操作剪切的是图像中的一个矩形子图,用户可以通过参数指定这个矩形四个顶点的坐标,也可以交互地用鼠标选取这个矩形。Imcrop函数的调用格式如下

4、: y=imcrop(handles.img);不管handles.img是三维的还是二维数据,该函数都能进行操作。下图就是对三维图像的截图:4、缩放在MATLAB中,用函数imresize来实现对图像的放大或缩小。插值方法可选用三种方法,最近邻插值,双线性插值,双三次插值。该函数的调用格式如下:Bimresize(A,m,method)其中:参数method用于指定插值的方法,可选的值为“nearest”(最近邻法),“bilinear”(双线性插值)、“bicubic”(双三次插值),缺省值为“nearest”。Bimresizee(Am,method)表示返回原图A的m倍放大图像(m小于

5、1时实际上是缩小);下图就是采用邻近插值法的放大和缩小图像,参数值保持默认设置: 虽然处理后看不出放大的效果,这是由于坐标轴限制的原因,如果把处理后的图片保存起来,再把处理后的文件打开,就可以看到比较明显的放大效果。 缩小后的结果如下: 5上下翻转函数flipud是实现一个二维矩阵的上下翻转,如a=1 2;3 4,经过该函数处理后,原矩阵变为3 4;1 2;所以利用该函数也可以对图像进行上下翻转处理,但由于该函数针对二维数据的处理,所以在写程序时,要对RGB图像和灰度图像分开处理,这就要用到isrgb函数来判断,如果是灰度图像,则可以直接用这个函数进行处理,否则就要对RGB图像进行降维处理,

6、for k=1:3 y(:,:,k)=flipud(x(:,:,k);end 处理结果如图: 6左右翻转对图像的左右翻转也可以用fliplr函数来处理,同样的,也要对灰度和彩色图像分开处理,处理结果如图: 7任意角度翻转 用函数imrotate来实现对图像的插值旋转。该函数的调用格式如下: Bimrotate(A,angle,method,crop) 其中,参数method用于指定插值的方法,可选的值可以有三种,分别为邻近插值,双线性插值,双三次插值,缺省时为邻近插值,参数angle代表旋转的角度。一般来说,旋转后的图像会比原图大,用户可以指定“crop”参数对旋转后的图像进行剪切(取图像的中

7、间部分),使返回的图像与原图大小相同。执行结果为: 8 噪声经常用到的噪声有三种,高斯噪声,椒盐噪声,乘性噪声,可以通过以下三个函数来实现:y=imnoise(handles.img,gaussian,p1,p2);%高斯噪声y=imnoise(x,salt & pepper,p1); %椒盐噪声y=imnoise(handles.img,speckle,p1); %乘性噪声p1,p2的参数也通过输入对话框的形式得到,原图加入高斯噪声后结果如下所示:9滤波 这里选择三种滤波方法,k=medfilt2(handles.noise_img);%中值滤波k=wiener2(handles.noise

8、_img,5,5);%自适应滤波k=filter2(fspecial(average,3),handles.noise_img)/255;%平滑滤波 同样的,这些函数也是针对二维数据,所以要先判断是彩色图像还是灰度图像,然后分别进行处理,下面是对彩色图像的自适应滤波处理:i=handles.noise_img;if isrgb(i) a=handles.noise_img(:,:,1);b=handles.noise_img(:,:,2);c=handles.noise_img(:,:,3); k(:,:,1)=wiener2(a,5,5); k(:,:,2)=wiener2(b,5,5);

9、k(:,:,3)=wiener2(c,5,5); imshow(k);执行结果如图:对其他方法的滤波程序也类似,由于把各个滤波方法放在一个选择框里,所以程序要用以下的选择语句:switch str case 中值滤波 case 自适应滤波 case 平滑滤波end10直方图统计 用imhist函数对图像数据进行直方图统计,x=imhist(handles.img(:,:,1); bar(horz,x); 其中,x矩阵的数据是0255灰度值的统计个数,如果直接对x矩阵数据进行图形图显示,由于有256个数据,在坐标系中就会很密集,为了更清楚的显示条形图,所以在程序设计时,把x数据进行部分提取,x1

10、=x(1:10:256);horz=1:10:256;bar(horz,x1);除了显示数据的直方图统计外,还可以对图像进行均衡处理,所用到的函数是histeq,这两个函数同样只使用于二维数据,所以也要对二维和三维数据分开处理。 直方图显示和均衡后的图像分别如下图所示 11二值图像 用j=im2bw(x);来对灰度图像到二值图像的转换。转换结果为:二)边缘检测使用edge函数对图像你自己的照片进行进行边缘检测,比较不同算子的分割效果,基本程序如下。I=imread(你自己照片进行); imshow(I)bw1=edge(I,roberts);bw2=edge(I,sobel);bw3=edge

11、(I,prewitt);bw4=edge(I,canny);bw5=edge(I,log);figure,imshow(bw1)figure,imshow(bw2)figure,imshow(bw3)figure,imshow(bw4)figure,imshow(bw5)三)变换域数字图像水印算法,图像是你自己的个人照片(256X256X256),水印是你自己的名字照片(32X32X32),图像1.用dct进行水印的提取,程序如下:%嵌入水印的程序代码M=256; %原图像长度N=32; %水印图像长度K=8;I=zeros(M,M);J=zeros(N,N);BLOCK = zeros(K,

12、K);%显示原图像subplot(3,2,1);I=imread(你自己.jpg);imshow(I);title(原始公开图像);%显示水印图像subplot(3,2,2);J=imread(你名字.bmp);J=double(imresize(J,32,32);imshow(J);title(水印图像);%嵌入水印for p=1:Nfor q=1:Nx=(p-1)*K+1;y=(q-1)*K+1;BLOCK=I(x:x+K-1,y:y+K-1);BLOCK=dct2(BLOCK);if J(p,q)=0 a=-1;else a=1;endBLOCK(1,1)=BLOCK(1,1)*(1+a

13、*0.03);BLOCK=idct2(BLOCK);I(x:x+K-1,y:y+K-1)=BLOCK;endend%显示嵌入水印后的图像subplot(3,2,3);imshow(I);title(嵌入水印后的图像);imwrite(I,watermarked.bmp,bmp); %从嵌入水印的图像中提取水印I=imread(1.jpg);J=imread(watermarked.bmp,bmp);for p=1:Nfor q=1:Nx=(p-1)*K+1;y=(q-1)*K+1;BLOCK1=I(x:x+K-1,y:y+K-1);BLOCK2=J(x:x+K-1,y:y+K-1);BLOCK

14、1=idct2(BLOCK1);BLOCK2=idct2(BLOCK2);a=BLOCK2(1,1)/BLOCK1(1,1)-1;if a0W(p,q)=0;elseW(p,q)=1;endendend%显示提取的水印subplot(3,2,4);imshow(W);title(从含水印图像中提取的水印);%水印攻击测试M=256;N=32;K=8;I=zeros(M,M);J=zeros(M,M);w=zeros(N,N);BLOCK1=zeros(K,K);BLOCK2=zeros(K,K);%对嵌入水印后的图像进行JPEG压缩L=imread(watermarked.bmp,bmp);i

15、mwrite(L,attack.jpg,jpeg,Quality,85);J=imread(attack.jpg,jpeg);subplot(3,2,5);imshow(J);title(压缩后的图像);I=imread(1.jpg);%从压缩的图像中提取水印for p=1:Nfor q=1:Nx=(p-1)*K+1;y=(q-1)*K+1;BLOCK1=I(x:x+K-1,y:y+K-1);BLOCK2=J(x:x+K-1,y:y+K-1);BLOCK1=idct2(BLOCK1);BLOCK2=idct2(BLOCK2);a=BLOCK2(1,1)/BLOCK1(1,1)-1;if a0W

16、(p,q)=0;elseW(p,q)=1;endendend%显示提取的水印subplot(3,2,6);imshow(W);title(从经过压缩的图像中提取的水印); 2.对含有水水印的图片进行奇异分解,然后提取W=im2double(M); %转化为0,1)double型m1,n1=size(W(:,:,1);WW=zeros(m,n);for i=1:m1 for j=1:n1 WW(i,j)=W(i,j); endendNCWI=CWI+AA*0.01; %对含水印的图像加噪声UU,S2,VV=svd(NCWI); %对含有水印的图像进行奇异值分解SN=U1*S2*V1; %计算中间矩阵WN=(SN-S)/af; %提取水印WNN=zeros(m1,n1);for i=1:m1 for j=1:n1 WNN(i,j)=WN(i,j); endend 结论 2015年 6月23 日教师批阅 年 月 日

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com