说明
每个实验题目包含一些数字图像处理的程序设计要求,需要使用的数字图像在对应的文件夹中给出,供上机实验参考使用。对于每个题目,只需要根据题目要求设计,对程序进行编译、调试。
1
实验一 图像处理的基本操作
一、 实验目的
1. 熟悉有关数字图像处理的MATLAB基本操作和编写
2. 掌握数字图像的基本读写、显示与保存。
3. 能够利用MATLAB工具箱完成图像处理的基本运算
二、 实验内容
1. (1)读取图像并显示真彩色图像(2)读取图像并显示索引色图像,并转换为灰度图像;(3)读取图像并显示灰度图像,并转换为二进制图像;(4)检测内存中的图像和保存图像;
'moon.tif', 'canoe.tif', 'tree.tif', ’rice.png’
2. 查看不同分辨率下图像的显示结果;
3. 对于彩色图像观看GRB通道各单通道图像。
4. 实现马赫带效应并画出灰度直方图。
附录:原代码
2
实验一:第1题(1)
clear;close all;
I= imread('D:\\Program Files\\MATLAB71\\work\\images\\Barbara24.png');
imshow(I)
实验一:第1题(2)
clear;close all;
[I,map]=imread('canoe.tif'); image(I); colormap(map); %或者imshow(I,map)
load trees
I = ind2gray(X,map);
imshow(X,map)
figure,imshow(I)
3
实验一:第1题(3)
clear;close all;
I= imread('D:\\Program Files\\MATLAB71\\work\\images\\lena.png');
imagesc(I,[0 255]);
预处理
colormap(gray);
灰度处理
pause
停留
imshow(I);
显示灰度图像
%%%%%%%%%%%%%%%%%%%%%%%%%%
I = imread('cameraman.tif');
level=graythresh(I);
4
BW=im2bw(I,level);
figure,imshow(BW);
实验一:第1题(4)
whos
imwrite(I2,’lena_hist.png’)
实验一:第2题
clear all;
[Im,map]=imread('D:\\Program Files\\MATLAB71\\work\\images\\Peppers2.png');
[sizeX,sizeY,sizeZ]=size(Im);
figure(1);subplot(221);
image(Im),axis square;
title('原始图像');
%显示图像的R分量
Im_R=Im(:,:,1);
5
subplot(222);
image(Im_R),colormap(gray(256));
axis square;
title('图像的R分量');
%显示图像的G分量
Im_G=Im(:,:,2);
subplot(223);
image(Im_G),title('图像的G分量');
axis square;
%显示图像的B分量
Im_B=Im(:,:,3);
subplot(224);
image(Im_B),title('图像的B分量');
axis square;
6
实验一:第3题
Im22=zeros(sizeX/2,sizeY/2,sizeZ);
Im22=Im(1:2:sizeX,1:2:sizeY,:);
subplot(223);
image(Im22),title('尺度为原图像的1/4');
axis square;
Im44=zeros(sizeX/4,sizeY/4,sizeZ);
Im44=Im(1:4:sizeX,1:4:sizeY,:);
subplot(224);
image(Im44),title('尺度为原图像的1/16');
axis square;
实验一:第4题
%马赫带效应
Imm=zeros(256,256);
7
for i=2:8
Imm(:,(i-1)*32:i*32)=32*(i-1);
end
figure(3);
imshow(uint8(Imm)),title('马赫带效应');
figure(4);
imhist(uint8(Imm));
实验二 图像变换
一、 实验目的
1. 熟悉有关MATLAB工具箱中提供的图像变换函数;
2. 掌握傅立叶变换和小波变换等常用的正交变换函数。
二、 实验内容
1. 对图像进行傅立叶变换和离散余弦变换,并分别求出其逆变换后重构图像的均方误差;
8
2. 求两层小波分解,观察分解系数并重构,求重构图像误差值。
3. 观察小波分解系数的方向性,实现三层小波分解,分别把HL,LH,HH子带置零和重构,观察重构图像跟原始图像的差异。
附录:原代码
实验二:第1题
clear;close all;
d_image=double(image)/255; 式
%做DCT变换
coef_all_dct=dct2(d_image);
%逆DCT变换
rec_image_dct= idct2(coef_all_dct);
coef_all_fft=fft2(d_image); rec_image_fft=real(ifft2(coef_all_fft)); 9
%将原图像的格式变换为double格%做DFT变换
%逆DFT变换
%求重构均方误差
diff_dct=d_image-rec_image_dct;
rec_error_dct=sum(sum(diff_dct.^2)); %存放误差的数据
diff_fft =d_image-rec_image_fft;
rec_error_fft=sum(sum(diff_fft.^2)); 实验二:第2题
clear;
load woman
imshow(X,map), xlabel('(a)')
nbcol=size(map,1);
[LL1,LH1,HL1,HH1]=dwt2(X,'db1');
coef11=wcodemat(LL1,nbcol);
coef12=wcodemat(LH1,nbcol);
coef13=wcodemat(HL1,nbcol);
10
%存放误差的数据
coef14=wcodemat(HH1,nbcol);
[LL2,LH2,HL2,HH2]=dwt2(LL1,'db1');
coef21=wcodemat(LL2,nbcol);
coef22=wcodemat(LH2,nbcol);
coef23=wcodemat(HL2,nbcol);
coef24=wcodemat(HH2,nbcol);
figure;
imshow([[coef21,coef22;coef23,coef24],coef12;coef13,coef14],map)
xlabel('(b)')
rLL1=idwt2(LL2,LH2,HL2,HH2,'db1');
rX=idwt2(rLL1,LH1,HL1,HH1,'db1');
figure;
imshow(rX,map), xlabel('(c)')
err=sum(sum(abs(X-rX)))
11
实验二:第3题
clear;
[X,map]=imread('L4_3b.bmp');
figure;subplot(2,2,1), imshow(X,map), xlabel('(a)')
X=double(X);
nbcol=size(map,1);
[LL1,LH1,HL1,HH1]=dwt2(X,'db8','mode','per');
[LL2,LH2,HL2,HH2]=dwt2(LL1,'db8','mode','per');
[LL3,LH3,HL3,HH3]=dwt2(LL2,'db8','mode','per');
[LL4,LH4,HL4,HH4]=dwt2(LL3,'db8','mode','per');
altzero4=zeros(size(LL4));
altzero3=zeros(size(LL3));
altzero2=zeros(size(LL2));
altzero1=zeros(size(LL1));
12
rLL3=idwt2( LL4,altzero4,HL4,HH4,'db8','mode','per');
rLL2=idwt2(rLL3,altzero3,HL3,HH3,'db8','mode','per');
rLL1=idwt2(rLL2,altzero2,HL2,HH2,'db8','mode','per');
rX=idwt2(rLL1,altzero1,HL1,HH1,'db8',size(X));
difrtH=rX-X;
subplot(2,2,2), imshow(discardH,map), xlabel('(b)')
X1=rX;
rLL3=idwt2( LL4,LH4,altzero4,HH4,'db8','mode','per');
rLL2=idwt2(rLL3,LH3,altzero3,HH3,'db8','mode','per');
rLL1=idwt2(rLL2,LH2,altzero2,HH2,'db8','mode','per');
rX=idwt2(rLL1,LH1,altzero1,HH1,'db8',size(X));
difrtV=rX-X;
discardV=wcodemat(difrtV,nbcol);
subplot(2,2,3),imshow(discardV,map), xlabel('(c)')
13
X2=rX;
rLL3=idwt2( LL4,LH4,HL4,altzero4,'db8','mode','per');
rLL2=idwt2(rLL3,LH3,HL3,altzero3,'db8','mode','per');
rLL1=idwt2(rLL2,LH2,HL2,altzero2,'db8','mode','per');
rX=idwt2(rLL1,LH1,HL1,altzero1,'db8',size(X));
difrtX=rX-X;
discardX=wcodemat(difrtX,nbcol);
subplot(2,2,4), imshow(discardX,map), xlabel('(d)')
X3=rX;
figure;
subplot(2,2,1), imshow(X,map), xlabel('(a)')
subplot(2,2,2), imshow(X1,map), xlabel('(b)')
subplot(2,2,3), imshow(X2,map), xlabel('(c)')
subplot(2,2,4), imshow(X3,map), xlabel('(d)')
14
因篇幅问题不能全部显示,请点此查看更多更全内容