数字图像处理实验南通大学.docx
- 文档编号:24057879
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:25
- 大小:320.79KB
数字图像处理实验南通大学.docx
《数字图像处理实验南通大学.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验南通大学.docx(25页珍藏版)》请在冰豆网上搜索。
数字图像处理实验南通大学
《数字图像处理》实验指导书
南通大学电子信息学院
通信与信息工程教研室
2008.9
实验目的和要求
通过实验,学生在所学的图像处理理论指导下,能应用图像处理硬、软件和一种算法语言编写有关程序,熟悉Matlab等图像处理软件,巩固和掌握图像数据输入与输出、图像格式转换、图像增强与图像变换等基本处理技术,提高实际动手能力。
为进一步应用图像处理解决实际问题奠定基础.
实验内容和形式
1.应用MATLAB语言编写一幅灰度图像直方图统计程序、图像放大和缩小以及旋转剪切的程序,并掌握图像读写和运算的一些基本的方法
2.应用MATLAB等工具进行图像图像去噪和锐化处理,包括:
常见噪声的产生、运用不同滤波方法(包括均值滤波和中值滤波等)对图像去噪;运用不同的算子对图像进行锐化,比较结果;掌握和巩固所学内容
3.掌握图像的傅立叶和DCT等变换的原理,运用Matlab等工具对图像进行变换,分析变换前后图像信息的对应关系;对图像进行压缩编码,分析压缩的效果。
按计划共6学时完成实验内容。
实验内容
实验一:
图像的基本操作
一、实验目的:
1、掌握图像读写和运算的一些基本的方法;
2、掌握图像放大和缩小的基本方法;
3、掌握灰度直方图的概念及其计算方法;
4、熟练掌握直方图均衡化的计算过程;
5、利用MATLAB程序进行图像的基本操作。
二、实验步骤:
1.读取文件rice.tif和cameraman.tif的图像数据,显示图像。
读取文件的信息,说明什么含义。
写出rice.tif在第一行到第10行、第一列到第10列之间的数据。
MATLAB函数:
imread/imshow/imfinfo
举例:
A=imread('rice.tif');
imshow(A);
A=imread('psa.png');
I=rgb2gray(A);
imshow(I);
A=imfinfo('psa.png')
A=
Filename:
'C:
\Users\Administrator\Desktop\psa.png'
FileModDate:
'07-Oct-201619:
13:
18'
FileSize:
168625
Format:
'png'
FormatVersion:
[]
Width:
396
Height:
450
BitDepth:
24
ColorType:
'truecolor'
FormatSignature:
[13780787113102610]
Colormap:
[]
Histogram:
[]
InterlaceType:
'none'
Transparency:
'alpha'
SimpleTransparencyData:
[]
BackgroundColor:
[]
RenderingIntent:
[]
Chromaticities:
[]
Gamma:
0.4545
XResolution:
3780
YResolution:
3780
ResolutionUnit:
'meter'
XOffset:
[]
YOffset:
[]
OffsetUnit:
[]
SignificantBits:
[]
ImageModTime:
'21Jan200923:
23:
48+0000'
Title:
[]
Author:
[]
Description:
[]
Copyright:
[]
CreationTime:
[]
Software:
[]
Disclaimer:
[]
Warning:
[]
Source:
[]
Comment:
[]
OtherText:
[]
255255255255255255255255255255
255255255255255255255255255255
255255255255255255255255255255
255255255255255255255255255255
255255255255255255255255255255
255255255255255255255255255255
255255255255255255255255255255
255255255255255255255255255255
255255255255255255255255255255
255255255255255255255255255255
2.将rice.tif和cameraman.tif两副图像相加、相减,或者减去一个常数,显示并保存处理后的图像。
MATLAB函数:
imwrite/imadd/imsubtract;
举例:
J=imread('cameraman.tif');
K=imadd(I,J);
A=imread('psa.png');
I=rgb2gray(A);
B=imread('psb.png');
J=rgb2gray(B);
K=imsubtract(I,J);
imshow(K);
title('相减后');
A=imread('psa.png');
I=rgb2gray(A);
B=imread('psb.png');
J=rgb2gray(B);
K=imadd(I,J);
imshow(K);
title('相加后');%加标题名
A=imread('psa.png');
I=rgb2gray(A);
K=imadd(I,50);
imshow(K);
title('加常数后');%加标题名
3、生成一副图像的数据I,256*256点,一半是黑色(灰度值为0),一半是白色(灰度值为255),将文件cameraman.tif的数据与I相乘,显示图象:
I=imread('psa.png');
J=rgb2gray(I);
A=zeros(256,128);
B=ones(256,128);
X=[A,B];
X=imresize(X,size(J));
M=uint8(J);
N=uint8(X);
K=immultiply(M,N);
imshow(K);
title('相乘后');
4、应用MATLAB(或C语言)编写一幅灰度图像直方图统计程序,并比较直方图均衡化前后的图像和直方图。
MATLAB函数:
imhist/histeq
举例:
下面给出直方图均衡化增强图像对比度的MATLAB程序:
I=imread(‘原图像名.gif’);%读入原图像
J=histeq(I);%对原图像进行直方图均衡化处理
imshow(I);%显示原图像
title(‘原图像’);%给原图像加标题名
figure;imshow(J);%对原图像进行屏幕控制;显示直方图均衡化后的图像
title(‘直方图均衡化后的图像’);%给直方图均衡化后的图像加标题名
figure;subplot(1,2,1);%对直方图均衡化后的图像进行屏幕控制;作一幅子图作为并排两幅图的第1幅图
imhist(I,64);%将原图像直方图显示为64级灰度
title(‘原图像直方图’);%给原图像直方图加标题名
subplot(1,2,2);%作第2幅子图
imhist(J,64);%将均衡化后图像的直方图显示为64级灰度
title(‘均衡变换后的直方图’);%给均衡化后图像直方图加标题名
A=imread('psa.png');
I=rgb2gray(A);
J=histeq(I);
imshow(I);
title('原图像');
figure;imshow(J);
title('直方图均衡化后的图像');
figure;subplot(1,2,1);
imhist(I,64);
title('原图像直方图');
subplot(1,2,2);
imhist(J,64);
title('均衡变换后的直方图');
4、将一幅图像运用双线性插值法和一般的放大法进行放大处理(放大到2倍和4倍,观测比较两种方法的放大效果);将一幅图像缩小到原来尺寸的1/2倍;对图像进行不按比例放大或缩小。
MATLAB函数:
imresize
A=imread('psa.png');
I=rgb2gray(A);
subplot(2,2,1)
imshow(I);
title('原图');
B=imresize(I,2);
subplot(2,2,2)
imshow(B);
title('一般放大到2倍');
subplot(2,2,3)
C=imresize(I,4);
imshow(C);
title('一般放大到4倍');
A=imread('psa.png');
I=rgb2gray(A);
subplot(2,2,1)
imshow(I);
title('原图');
D=imresize(I,2,'bilinear');
subplot(2,2,2)
imshow(D);
title('双线性插值法放大到2倍');
subplot(2,2,3)
E=imresize(I,4,'bilinear');
imshow(E);
title('双线性插值法放大到4倍');
A=imread('psa.png');
I=rgb2gray(A);
subplot(2,2,1)
imshow(I);
title('原图');
B=imresize(I,0.5);
subplot(2,2,2)
imshow(B);
title('缩小一半');
5、分别对图像进行旋转45度和剪切一半处理,显示图象。
MATLAB函数:
imrotate;imcrop
举例:
J=imrotate(I,60,'bilinear');
K=imcrop(I,[1,1,128,256]);
A=imread('psb.png');
I=rgb2gray(A);
J=imrotate(I,60,'bilinear');
K=imcrop(I,[1,1,128,256]);
imshow(J);
title('旋转45度');
A=imread('psb.png');
I=rgb2gray(A);
K=imcrop(I,[1,1,128,256]);
imshow(K);
title('裁剪一半');
三、思考题:
1、位图图像有哪些基本的信息?
位图是由像素组成的,像素是位图最小的信息单元,存储在图像栅格中。
2、直方图是什么概念?
它反映了图像的什么信息?
直方图是指将一个变量的不同等级的相对频数用矩形块标绘的图表,灰度直方图反映了数字图像中每一灰度级与其出现频率间的关系。
3、直方图均衡化是什么意思?
它的主要用途是什么?
直方图均衡化是将原图像通过某种变换,得到一幅灰度直方图为均匀分布的新图像的方法。
其作用是通过修改直方图的方法增强图像。
4、双线性插值放大法有什么优点?
双线性灰度插值的平滑作用可能使得图像的细节产生退化
实验二:
图像去噪和锐化处理
一、实验目的:
1、掌握用于图像去噪的均值滤波和中值滤波的基本原理;
2、掌握图像锐化的基本原理;
3、能够运用不同滤波方法对图像去噪;运用不同的算子对图像进行锐化,并比较结果。
4、利用MATLAB程序进行图像的去噪和锐化处理。
二、实验步骤:
1、运用函数产生随机噪声和椒盐噪声,叠加到图像数据上。
A=imread('psb.png');
I=rgb2gray(A);
subplot(2,2,1)
imshow(I);
title('原图');
J=rand(size(I));%或者用imnoise函数
W=uint8(J);
B=imadd(I,W);
subplot(2,2,2)
imshow(B);
title('叠加随机噪声图');
A=imread('psb.png');
I=rgb2gray(A);
subplot(2,2,1)
imshow(I);
title('原图');
R=imnoise(I,'salt & pepper') ;
W=uint8(R);
C=imadd(I,W);
subplot(2,2,2)
imshow(I),title('叠加椒盐噪声图');
2、运用conv2函数实现对含噪声的图象进行均值滤波。
采用大小为3*3去心的去心邻域。
(注意:
数据运算时采用double函数转成浮点型,图像显示前必须运用uint8函数将数据变成8位无符号整型,)。
比较不同窗口大小的情况下,均值滤波法的去噪效果。
A=imread('psb.png');
I=rgb2gray(A);
h=[0.1250.1250.125
0.12500.125
0.1250.1250.125];
C=uint8(conv2(I,h));
figure
subplot(2,2,1)
imshow(I),title('原图');
subplot(2,2,2);
imshow(C),title('conv2函数实现均值滤波');
3、运用中值滤波法对随机噪声和椒盐噪声进行去噪,改变窗口的大小,分析去噪效果。
A=imread('psb.png');
I=rgb2gray(A);
J=rand(size(I));%或者用imnoise函数
W=uint8(J);
B1=imadd(I,W);
R=imnoise(I,'salt & pepper') ;
W=uint8(R);
B2=imadd(I,W);
D1=medfilt2(B1);
D2=medfilt2(B2);
subplot(2,2,1)
imshow(D1),title('去随机噪声');
subplot(2,2,2);
imshow(D2),title('去椒盐噪声');
4、比较均值滤波和中值滤波对两种噪声的去除情况。
5、再运用fspecial和filter2函数实现对含噪声的图象进行均值滤波。
6、运用conv2或者fspecial、filter2函数实现各种的算子提取边沿。
比较采用各种常用的算子的边沿提取的效果。
A=imread('psb.png');
I=rgb2gray(A);
J=rand(size(I));%或者用imnoise函数
J=imnoise(J,'salt&pepper');
W=uint8(J);
B=imadd(I,W);
imshow(B);
title('叠加随机噪声图');
h=[0.1250.1250.125
0.12500.125
0.1250.1250.125];
C=uint8(conv2(I,h));
D=medfilt2(B);
h=fspecial('average',3);
E=uint8(round(filter2(h,I)));
figure
(2)
subplot(221),imshow(I),title('原图');
subplot(222),imshow(C),title('conv2函数实现均值滤波');
subplot(223),imshow(D),title('中值滤波去噪');
subplot(224),imshow(E),title('filter2函数实现均值滤波');
figure(3)
h=fspecial('laplacian');
F=uint8(round(filter2(h,I)));
subplot(231),imshow(F),title('laplacian算子提取边沿');
K=fspecial('prewitt');
M=uint8(round(filter2(h,I)));
subplot(232),imshow(F),title('prewitt算子提取边沿');
Q=fspecial('sobel');
N=uint8(round(filter2(h,I)));
subplot(233),imshow(F),title('sobel算子提取边沿');
Matlab函数:
imnoise/conv2/fspecial/filter2/medfilt2
程序举例:
(加噪、去噪、锐化)
I=imread('cameraman.tif');
J=rand(size(I));%或者用imnoise函数
I2=uint8(J);
A=imadd(I,I2);
imshow(A),title('叠加原图');
h=[0.1250.1250.125
0.12500.125
0.1250.1250.125];
C=uint8(conv2(I,h));
figure
(2)
subplot(221),imshow(I),title('原图');
subplot(222),imshow(C),title('conv2函数实现均值滤波');
h=fspecial('average',3);
D=uint8(round(filter2(h,I)));
subplot(223),imshow(D),title('filter2函数实现均值滤波');
h=fspecial('laplacian');
E=uint8(round(filter2(h,I)));
subplot(224),imshow(E),title('laplacian算子提取边沿');
三、思考题:
1、图像的去噪和锐化各有什么作用?
2、简述均值滤波和中值滤波的基本原理;
3、比较均值滤波和中值滤波在不同窗口大小的情况下对不同的噪声的去噪效果;
4、常用的锐化算子有哪些?
比较其锐化效果。
实验三:
图像的变换及压缩编码
一、实验目的:
1、掌握图像的傅里叶和离散余弦等变换的原理;
2、掌握图像的压缩编码的原理和实现的方法;
3、能够运用Matlab等工具对图像进行变换以及压缩编码
二、实验步骤:
1.自己给出两幅图像,求图像的傅里叶变换,并分析傅立叶谱的频谱信息与原图象信息的对应关系。
Matlab函数:
fft2
举例:
f=zeros(30,30);
f(5:
24,13:
17)=1;
imshow(f,’notruesize’);
F=fft2(f);
F2=log(abs(F));
figure,imshow(F2,[-1,5],’notruesize’);
Colormap(jet);colorbar;
f=zeros(256,256);
f(128:
256,1:
128)=1;
imshow(f);
F=fft2(f);
F2=log(abs(F));
figure,imshow(F2,[-1,5]);
2.运用dct对图像进行压缩,显示恢复后的图像,与原图像对比。
分析被忽略的DCT系数的个数多少与恢复后的图像质量的关系。
Matlab函数:
dctmtx/dctmtx2/blkproc/dct/dct2/idct/idc2/dctdemo
举例:
I=imread('cameraman.tif');
I=im2double(I);
T=dctmtx(8);
B=blkproc(I,[88],'P1*x*P2',T,T');
mask=[11110000
11100000
11000000
10000000
00000000
00000000
00000000
00000000];
B2=blkproc(B,[88],'P1.*x',mask);
I2=blkproc(B2,[88],'P1*x*P2',T',T);
subplot(121)
imshow(I)
title('原图')
subplot(122)
imshow(I2)
title('变换后的图像')
A=imread('psb.png');
I=rgb2gray(A);
I=im2double(I);
T=dctmtx(8);
B=blkproc(I,[88],'P1*x*P2',T,T');
mask=[11110000
11100000
11000000
10000000
00000000
00000000
00000000
00000000];
B2=blkproc(B,[88],'P1.*x',mask);
I2=blkproc(B2,[88],'P1*x*P2',T',T);
subplot(121)
imshow(I)
title('原图')
subplot(122)
imshow(I2)
title('变换后的图像')三、思考题:
1、图像的傅立叶变换和DCT变换的基本公式是什么?
2、傅立叶谱的频谱信息与原图象信息的对应关系。
3、基于DCT的图像的压缩编码的基本指导思想是什么?
参考书:
MATLAB应用图像处理,西安电子科技大学出版社
附录
Matlab是Mathworks公司推出的科技应用软件.
●启动
点击Matlab/bin/matlab.exe,打开Matlab的工作窗(或指令窗)
●Matlab的使用方式
①指令行操作之直接交互工作方式;
②使用matlab编程语言之程序设计方式.
●交互方式的使用:
在Matlab工作窗中一般输入以下三种指令行:
①命令
②表达式
③赋值语句:
:
变量=表达式;
●Matlab的程序工作方式
step1.File→New→M-file%打开Matlab程序工作窗Editor/Debugger;
step2.编写Matlab程序;Tools→Run
●基本命令:
quit%退出Matlab
clc%清除指令窗口
clear%从内存中清除变量和函数
clf%清除当前图
pack%合并工作内存中的碎块
dir%列出文件
cd%改变或显示当前工作目录
disp%显示矩阵和文字内容
size%确定矩阵的维数
demo%演示程序
help%在线帮助
delete%删除文件
whos%列出工作内存中的变量细节
xpiamge%图象处理性能的演示
imagedemo%同上
●基本函数
figure%创建图形窗口
imshow%显示图象
colormap%设置配色图
rgb2hs
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字图像 处理 实验 南通 大学