找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5041|回复: 0
打印 上一主题 下一主题
收起左侧

MATLAB数字图像处理实验讲义(指导书)

[复制链接]
跳转到指定楼层
楼主


下面是内容预览(图片在附件中下载):

数字图像处理课内实验指导书
李文杰施文娟
盐城师范学院新能源与电子工程学院
二○一七年二月
说明:1  讲义中给出的部分代码供同学们参考,鼓励同学自己编写运行效率更高或者可读性更好的代码,将作为成绩评定的重要依据。
2  实验中的仿真图是仿真算法的主要结果,由于是在实验室机房中做实验,仿真后的图文件,请每位同学以fig文件和矢量图文件emf两种格式保存于自己的移动存储设备中(注意每个文件名称,例如可采用:实验1_图1.fig),实验结束后,仿真图文件的电子版也需要上交。
3  每次实验结束后,在一周内请及时交实验报告,实验报告上交是否及时也将作为实验报告成绩的依据。
4  每个实验仿真图请自行打印后粘贴于实验报告的相关位置。
5  每个实验的思考题请按照要求认真完成。


实验一 计算图像的基本统计指标

一、实验目的

1熟悉MATLAB图像处理工具箱的使用方法。
2了解计算图像的统计指标的方法及其在图像处理中的意义。
二.实验主要仪器设备
1     微型计算机:Intel Pentium及更高。
2     MATLAB(安装了图像处理工具箱,即Image Processing Toolbox)
3     典型的灰度、彩色图像文件。
三、实验原理
1     可以将一幅图像看成一个二维矩阵,因此用MATLAB处理图像是十分方便的。
2     利用MATLAB图像处理工具箱读、写和显示图像文件。
①采用imread函数读出图像。
②采用imwrite函数写入图像。
③采用imshow函数显示图像。
3   计算图像的有关统计参数。
   ① 图像的大小。图像的大小是图像的重要属性,数值是宽度(M,单位为:像素)与高度(N,单位为:像素)的乘积。

   ② 图像的灰度平均值。该指标指图像法f所以灰度值的算术平均值,反映了一幅图像的平均亮度。

③协方差矩阵(variance-covariance matrix)
设 f(x,y)和g(x,y)是大小为M×N的两幅图像,则两幅图像之间的协方差矩阵 为

协方差矩阵是两幅图像之间的相关程度的一种度量。协方差矩阵为零时表明两幅图像之间相互独立,反之表示两图像之间相互依赖越大,相关程度越强。
若f=g,则单幅图像的协方差即为该图像的方差(自协方差)。
④图像的灰度标准差(standard deviation)。由方差按数据的平方来计算,与灰度值相差大,难以直观地衡量,所以对方差开平方得到标准差SD,标准差是评价离散的较好指标。

⑤图像的相关系数。协方差可以作为两幅图像相关性的一种度量,但它受两幅图像像素数值的影响。因此,经常将其归一化成相关系数。两个图像f(x,y)和g(x,y)的相关系数  是描述图像相关程度的统计量,反映了两图像相互的线性联系密切程度的统计参数。相关系数在0~1范围内变动,其值越接近1,两个图像见的线性相关越密切;其值越接近0,相关越不密切。
四、实验内容
1     利用MATLAB图像处理工具箱读、写和显示图像文件。
2     计算图像的有关统计参数。
五、实验步骤
参考教材附录B:常用MATLAB图像处理Toolbox  函数完成以下操作。

(1)  利用“读图像文件I/O”函数读入图像。

(2)      利用“读图像文件I/O”的iminfo函数了解图像文件的基本信息。利用“像素和统计处理”函数计算读入图像的二维相关系数(corr2函数)、确定像素颜色(impixel函数)、像素的平均值(mean2函数)、计算像素的标准偏移(std2函数)等。
注意:Impixel函数返回指定的图像像素的RGB(红red、绿green、蓝blue)颜色值。在下面的语法中,impixel函数显示输入图像,并等待你用鼠标指定像素:
    P =impixel(img);
    如果省略输入参数,impixel作用于当前使用的图像。使用鼠标左键单击来选择像素,可以在不同位置单击来选择多个像素。按backspace或delete删除先前选择的像素。按住shift点击鼠标左键,单击鼠标右键或者双击鼠标左键,都可以添加最后一个像素并结束选择显示结果;按回车键可以结束选择并且不添加像素。完成像素的选择后,impixel向输出参数中返回一个代表所选像素RGB值的m×3的矩阵,m为所选像素的个数。如果你没有提供输出参数,impixel将矩阵返回到ans中。
(3)      利用“几何操作”剪切图像、改变图像大小(imresize函数)、旋转图像(imrotate函数)等。
(4)      将经上述不同操作的图像用“读图像文件I/O”函数分别写入到各自的图像文件中。
六、实验报告要求
1   说明利用MATLAB图像处理工具箱读、写和显示图像文件、计算图像的有关统计参数的原理。
2   记录读取和几何变换处理后的图像、图像的统计数据。
3   记录点运算的结果图。
4   回答思考题。
5   总结心得和体会。
七、预习要求
(1)了解MATLAB图像处理工具箱的功能。
(2)了解图像基本指标的含义。
八、思考题
(1)说明图像的统计特征对图像处理的意义。
(2)比较不同图像的统计特征的差别,并分析原因。

实验二  图像变换与二维数字滤波

一、实验目的

1      了解离散余弦正弦变换和逆变换的原理。
2      理解离散余弦变换系数的特点。
3      了解离散余弦变换在图像数据压缩中的应用。
二、实验主要仪器设备
1      微型计算机 :Intel Pentium及更高。
2      MATLAB软件。
三、实验原理
1      二维离散余弦变换和离散余弦逆变换的计算公式。
2      MATLAB中DCT变换的实现函数是dct2();DCT逆变换的实现函数是idct2()。
四、实验内容
在MATLAB环境中,进行图像的离散余弦变换和离散余弦逆变换,初步理解DCT变换在压缩编码中的应用。减少DCT系数,观察重建信号和误差信号。
五、实验步骤
1      打开MATLAB。
2      新建DCTtranslation.m文件
3      选取rose.jpg文件,进行离散余弦变换,并对其进行离散余弦反变换,观察其结果。
4    选择不同的阈值,观察重构图像。
5    计算重构图像的MSE。
参考程序:
%DCTtranslation.m
I = imread('rose.jpg');
clear all;
close all;
G=imread('rose.jpg');
figure(1);imshow(G);
%G=rgb2gray(F);
dctG=dct2(G);
figure(2);imshow(log(abs(dctG)),[]);
T1=5;T2=50;
dctG(abs(dctG)<T1)=0;
idctF1=idct2(dctG);
figure(3);imshow(idctF1,[0 255]);
dctG(abs(dctG)<T2)=0;
idctF2=idct2(dctG);
figure(4);imshow(idctF2,[0 255]);
[M N]=size(G);
MSE1=sum(sum((idctF1-double(G)).^2))/(M*N)
MSE2=sum(sum((idctF2-double(G)).^2))/(M*N)
    上述程序同样可以实现DCT的正、反变换。
六、实验报告要求
1      说明离散余弦正、反变换的原理。
2      分析重建图像、误差图像和DCT系数的关系。
七、预习要求
了解MATLAB环境和它的使用方法。
八、思考题
对重建图像进行主观评价和客观评价,分析重建图像的质量与DCT重建系数的关系。

实验三  图像编码与压缩

一、实验目的
1     了解图像的压缩编码原理;
2     掌握常用图像压缩算法。
二、实验主要仪器设备
1     微型计算机:Intel Pentium及更高。
2     MATLAB软件(含图像处理工具箱)。
三、实验原理
1     去除数据冗余度可以有效地压缩数据。
2     图像编码压缩的主要技术指标。(1)压缩化;(2)客观评价SNR;(3)主观评价。
四、实验内容
1     利用变换编码压缩图像信息。
2     计算压缩算法的性能。
五、实验步骤
1     自己选择测试图像。
2     根据设计要求选择合适的图像编码与压缩方法。
3     设计编码与压缩算法。
4     显示原始图像与压缩重构图像。

例1 基于FFT的图像压缩技术
考虑一幅512*512像素,灰度级为256的标准图像lena,用FFT实现图像数据的压缩,首先将图像分割成(512/8)^2个8*8子图像,对每个子图像进行FFT,这样每个子图像有64个傅里叶变换系数。按照每个系数的方差来排序,由于图像是实值的,其64个复系数只有一半是有差别的。舍去小的变换系数,就可以实现数据压缩。此处32个系数,实现2:1的数据压缩,然后进行逆变换,其matlab程序如下:
%设置压缩比
cr = 0.5;                   % cr = 0.5为2:1压缩,cr = 0.125 为8:1压缩
%读入并显示原始图像
I1 = imread(‘lena.bmp’);   
I1 = double(I1)/255;       %图像为256级灰度图像,对图像进行归一化操作
figure(1);              %显示原始图像
imshow(I1);            
%对图像进行FFT
fftcoe = blkproc(I1,[8 8],’fft2(x)’);      %将图像分割成8*8的子图像进行FFT
coevar = im2col(fftcoe,[8 8],’distinct’);  %将变换系数矩阵重新排列
coe = coevar;                       
[y,ind] = sort(coevar);
[m,n] = size(coevar);
snum = 64-64*cr;                 %根据压缩比确定要变0的系数个数
%舍去不重要的系数
for i = 1:n
  coe(ind(1:snum),i) = 0;             %将最小的snum个变换系数清0
end
B2 = col2im(coe,[8  8],[512 512],’distinct’);  %重新排列系数矩阵
%对子图像块进行FFT逆变换获得各个子图像的复原图像,并显示压缩图像
I2 = blkproc(B2,[8  8],’ifft2(x)’);
figure(2)                            %显示压缩后的图像
imshow(I2);
%计算均方根误差erms
e = double(I1) – double(I2)
[m , n] = size(e);
erms = sqrt(sum(e(:).^2)/(m*n));

当cr = 0.5时,上述程序实现的图像压缩比为2:1,均方根系数为erms = 0.0398;
cr=0.125时,实现的图像压缩比为8:1,均方根系数为 erms =0.0474
  
上述程序中的主要函数功能:
(1)   blkproc 函数,它能够将每个显示块从图像中提取出来,然后将其作为参数传递给任何用户函数,另外,blkproc函数还将用户函数返回的显示块进行组合,从而生成最后输出的图像,语法格式为:
          B = blkproc (A,[m  n],fun)
其功能是对图像A的每个不同m*n块应用函数fun进行处理,fun 为运算函数,其形式为y=fun(x),可以是一个包含函数名的字符串,也可以是带表达式的字符串。另外,还可以将用户函数指定为一个嵌入式函数。

(2)im2col函数,它能够将图像块排列成向量,其语法格式为:
          B = im2col(A , [m  n],block_type)
功能是将图像A的每一个m*n块转换成一列,重新组合成矩阵B,block_type指定排列的方式,当block_type为disinct时,图像块不重叠,当其为sliding时,图像块滑动。

(3)col2im函数,它用于将向量重新排列成图像块,语法格式为:
         B = col2im(A,[n  n],[nm   nn],block_type)
其功能将图像A的每一列排列成m*n的图像块,block_type指定排列的方式,当其为distinct时,图像块不重叠,其为sliding时,图像块滑动,并用这些图像块组合成mm*nn的图像A

例2 基于DCT的图像压缩技术
与前面相同的图像,首先将图像分割成(512/8)^2个8*8子图像,对于每个子图像进行DCT,这样每个子图像有64个变换系数,舍去50%小的变换系数,即保留32个系数,进行2:1的压缩,其Matlab程序如下所示:

%设置压缩比
cr = 0.5                      % cr = 0.5为2:1压缩,cr = 0.125 为8:1压缩
%读入并显示原始图像
initialimage =imread('lena_numbers_512.tiff');
initialimage = double(initialimage)/255;
figure(1);
imshow(initialimage);
%对图像进行DCT
t = dctmtx(8);
dctcoe = blkproc(initialimage,[88],'P1*x*P2',t,t');
coevar = im2col(dctcoe,[8 8],'distinct');
coe = coevar;
[y,ind] = sort(coevar);
[m,n] = size(coevar);
%舍去不重要的系数
snum = 64 - 64*cr;
for i = 1 : n
  coe(ind(1:snum),i) = 0;
end
b2 = col2im(coe,[8 8],[512 512],'distinct');
%对截取后的变换系数进行DCT逆变换
i2 = blkproc(b2,[8 8],'P1*x*P2', t',t);
%显示压缩图像
figure(2);
imshow(i2);
%计算均方根误差
e = double (initialimage) - double(i2);
[m , n] = size(e);
erms = sqrt(sum(e(:).^2)/(m*n));

六、实验报告要求
1     说明压缩原理与算法。
2     原始图像和压缩图像重构图像。
3     计算压缩性能,说明为什么同一压缩算法对不同的图像压缩效果不同。
4     回答思考题。
5     心得和体会。
七、预习要求
1     了解图像编码压缩的基本原理和算法。

2     掌握MATLAB图像处理工具箱(ImageProcessing ToolBox)中有关图像编码压缩的函数。

3     编写相应的程序。
八、思考题
1     DFT与DCT的性能比较。
2     讨论用一算法对不同原始图像压缩性能的影响。

实验四  图像增强一、实验目的
1     熟悉并学会使用MATLAB中图像增强的相关函数。
2     了解图像增强的方法、噪声去除的方法和去噪的效果。
二、实验主要仪器设备
1     微型计算机:Intel Pentium及更高。
2     MATLAB软件(含图像处理工具箱)。
3     典型的灰度、彩色图像文件。
三、实验原理
1     将一幅图像看成是一个二维矩阵,因此用MATLAB进行图像增强是十分方便的。
2     灰度变换可以使图像的动态范围加大,图像的对比度扩展、图像更为清晰,是图像增强的重要手段。
图像的点运算
(1)线性扩展
灰度级变换函数s=T(r)可为
file:///Z:\TEMP\msohtmlclip1\01\clip_image012.gif
(2)非线性扩展
     灰度级变换函数s=T(r)可为
                  s=clog(1+r)
(3)灰度倒置
     灰度级变换函数s=T(r)可为
                  s=255-r
(4)二值化
      确定一阈值r1,file:///Z:\TEMP\msohtmlclip1\01\clip_image014.gif。file:///Z:\TEMP\msohtmlclip1\01\clip_image016.gif的灰度值置白,file:///Z:\TEMP\msohtmlclip1\01\clip_image018.gif的灰度值置黑。

3     利用MATLAB图像处理工具箱读函数、显示函数、加噪函数、滤波函数进行图像去噪处理。采取 imread函数读图像、imshow函数显示图像、imnoise函数对图像进行加噪处理、filter2函数对图像进行滤波。

4     各种去噪方法:邻域平均、中值滤波。
四、实验内容及步骤
1     % 直接灰度变换
clear all;
clc;

I =imread('cameraman.tif');

figure;imshow(I);

I1 =imadjust(I,[0 1],[1 0],1.0);

figure;subimage(I1);
%直方图灰度变换

I =imread('cameraman.tif');

figure;imshow(I);

figure;imhist(I);

J = imadjust(I,[0.15  0.9], [0 1]);

figure;imshow(J);

figure;imhist(J, 64);

2   图像的空域点处理增强

(1)选择一幅图像 lena.jpg,设置输入选择一幅图像lena.jpg,设置输入/输出变换的灰度级范围,a=0.3,b=0.6,c=0.1,d=0.9;
(2)设置非线性扩展函数的参数c=2;
(3)采用灰度倒置变换函数s=255-r进行图像变换;
(4)设置二值化图像的阈值,分别为level=0.4,level=0.7。
参考程序如下:
I=imread('lena.bmp');
figure;subplot(1,3,1);
imshow(I);
title('原图');

J=imadjust(I,[0.30.6],[0.1 0.9]);

subplot(1,3,2);imshow(J);
title('线性扩展');
I1=double(I);
I2=I1/255;
C=2;
K=C*log(1+I2);
subplot(1,3,3);
imshow(K);
title('非线性扩展');
M=255-I;
figure;
subplot(1,3,1);imshow(M);
title('灰度倒置');
N1=im2bw(I,0.4);
N2=im2bw(I,0.7);
subplot(1,3,2);
imshow(N1);
title('二值化阈值0.4');
subplot(1,3,3);
imshow(N2);
title('二值化阈值0.7');
2     对图像加入噪声(imnoise),选择不同的去噪方法,如邻域平均(filter2)、中值滤波(medfilt2)等方法,对图像进行增强处理。
3     分析各种去噪方法对不同噪声图像处理的结果。
六、实验报告要求
1     说明利用MATLAB图像处理工具箱进行图像的读、显示、加噪、去噪处理的方法。
2     记录原图像、增强图像、加噪图像、去噪处理后的图像。
3     列出上述图像处理的程序。
4     回答思考题。
5     心得和体会。
七、预习要求
1     了解MATLAB图像处理工具箱的功能。
2     了解图像去噪的方法。
八、思考题
1     比较同一种噪声、不同去噪方法处理的效果。
2     比较同一种噪方法、针对不同噪声处理的效果。
3   对数非线性变换能否使图像的低灰度级压缩,高灰度级扩展或者低灰度级扩展,高灰度级压缩?选择不同的阈值,观察阈值对图像二值化的影响。


全部资料下载地址:

数字图像处理实验.rar (466.96 KB, 下载次数: 28)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶1 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表