您的当前位置:首页正文

《数字图像处理》实验指导

2022-05-21 来源:好走旅游网


说明

每个实验题目包含一些数字图像处理的程序设计要求,需要使用的数字图像在对应的文件夹中给出,供上机实验参考使用。对于每个题目,只需要根据题目要求设计,对程序进行编译、调试。

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

因篇幅问题不能全部显示,请点此查看更多更全内容