数字图像处理实验指导书Word文档下载推荐.docx
《数字图像处理实验指导书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验指导书Word文档下载推荐.docx(18页珍藏版)》请在冰点文库上搜索。
%显示图片
imwrite(image,'
picture.jpg'
%保存图片
bwimage=zeros(256,256,'
uint8'
%创建二值图像
bwimage([100:
156],[100:
156])=255;
imshow(bwimage);
[M,N]=size(bwimage);
shiftdis=80;
%定义像素平移量
R=[1,0,shiftdis;
0,1,shiftdis;
0,0,1];
%定义平移矩阵
temp=[0,0,1]'
resultimage=zeros(M,N,'
fori=100:
156%平移转换
forj=100:
156
temp
(1)=i;
temp
(2)=j;
transdot=R*temp;
resultimage(transdot
(1),transdot
(2))=bwimage(i,j);
end
end
figure;
imshow(resultimage);
实验二图像变换(傅里叶、离散余弦)
1.熟悉傅里叶变换和离散余弦变换的原理
2.掌握傅里叶变换和离散余弦变换的算法和应用
1.从电脑中读取一幅图片并显示
2.将读取的彩色图片转换为灰度图
3.对灰度图分别进行傅里叶变换和离散余弦变换
igray=rgb2gray(image);
%将彩色图转换为灰度图
imshow(igray,[]);
X=fft2(igray);
%二维傅里叶变换
X2=abs(X.^2);
imshow(log(X2),[]);
Y=fftshift(X);
%将低频点移动到中心
Y=abs(Y);
imshow(log(Y),[]);
imagecos=dct2(igray);
%离散余弦变换
imshow(log(abs(imagecos)))
实验三图像的空域增强和滤波增强
1.熟悉图像的直方图计算方法和直方图均衡化原理
2.熟悉图像的巴特沃斯滤波和理想低通滤波原理
2.掌握图像的直方图计算的实现和直方图均衡化算法、图像的巴特沃斯滤波和理想低通滤波算法和应用
3.计算灰度图的统计直方图并进行直方图均衡化以增强图像
4.对灰度图进行维纳滤波
%彩色图转换为灰度图
imhist(igray);
%计算灰度图的统计直方图
eq_igray=histeq(igray);
%灰度统计直方图均衡化
imshow(eq_igray);
%显示均衡化化后的直方图
imhist(eq_igray);
%巴特沃斯滤波和理想低通滤波
I1=imread(I);
imshow(I1);
title('
原始图像'
I1=rgb2gray(I1);
I2=imnoise(I1,'
salt&
pepper'
imshow(I2);
噪声图像'
f=double(I2);
g=fft2(f);
%二维傅里叶变换
g=fftshift(g);
%转换数据矩阵
[N1,N2]=size(g);
n=2;
d0=50;
n1=fix(N1/2);
n2=fix(N2/2);
fori=1:
N1
forj=2:
N2
d=sqrt((i-n1)^2+(j-n2)^2);
h=1/(1+0.414*(d/d0)^(2*n));
%计算巴特沃斯低通滤波转换函数
result1(i,j)=h*g(i,j);
if(g(i,j)>
50)%进行理想低通滤波
result2(i,j)=0;
else
result2(i,j)=g(i,j);
result1=ifftshift(result1);
%巴特沃斯低通滤波后反变换
result2=ifftshift(result2);
%理想低通滤波后反变换
X2=ifft2(result1);
X3=uint8(real(X2));
imshow(X3);
Butterworth滤波图像'
X4=ifft2(result2);
X5=uint8(real(X4));
imshow(X5);
理想低通滤波器'
实验四图像的滤波恢复
1.熟悉图像恢复的基本原理
2.熟悉图像的维纳滤波恢复原理
2.掌握图像的维纳滤波恢复算法和应用
3.人为对灰度图增加噪声
4.利用维纳滤波算法对噪声图像进行恢复以提高显示质量
d=15;
%设定长度
h=zeros(2*d+1,2*d+1);
h(d+1,1:
2*d+1)=1/(2*d);
%设定函数h
f=imread(I);
imshow(f);
f=rgb2gray(f);
[m,n]=size(f);
%计算图像大小(尺寸)
fe=zeros(m+2*d,n+2*d);
%扩增f
fe(1:
m,1:
n)=f;
he=zeros(m+2*d,n+2*d);
he(1:
2*d+1,1:
2*d+1)=h;
%扩增h
F=fft2(fe);
H=fft2(he);
ns=5*rand(m+2*d,n+2*d);
%产生噪声
g=ifft2(F.*H)+ns;
%产生噪声且加载噪声的图像
G=fft2(g);
K=0;
%É
设定K值
F_est=((H.^2)./(H.^2+K)).*G./H;
%维纳滤波
f_est=real(ifft2(F_est));
%恢复后的图像
显示原始图像
imshow(g(d+1:
m+d,d+1:
n+d),[min(g(:
))max(g(:
))]);
%、显示模糊后加噪声的图像
imshow(f_est(1:
n),[min(f_est(:
))max(f_est(:
%显示恢复后的图像
实验五图像的压缩编码
1.熟悉图像的压缩编码的基本原理和方法
2.在MATLAB实现用离散余弦变换(DCT)对图像进行压缩编码
2.在MATLAB实现用行程编码(RLE)对图像进行压缩编码
1.从电脑中读取一幅图片
2.利用DCT对图像进行压缩编码
3.利用RLE对图像进行压缩编码
%%DCT图像压缩编码
IPATH=[ipath,iname];
I=imread(IPATH);
I=rgb2gray(I);
I=im2double(I);
%将原图像转换为双精度数据类型
T=dctmtx(8);
%产生二维DCT变换矩阵
B=blkproc(I,[88],'
P1*x*P2'
T,T'
%计算二维DCT矩阵T,转置T’(函数p1*x*p2的参数)
mask=[11110000
11100000
11000000
10000000
00000000
00000000];
%二值掩膜,用来压缩DCT系数,只保留DCT系数中左上角的10个
B2=blkproc(B,[88],'
P1.*x'
mask);
%只保留DCT变换的10个系数
I2=blkproc(B2,[8,8],'
T'
T);
%逆DCT,重构图像
imshow(I);
原图像'
%显示原图
DCT压缩图像'
%显示压缩后的图像。
对比原始图像和压缩后图像,虽然舍弃了部分信息,但图像仍然清晰
%%RLE图像压缩编码
[mn]=size(I);
tu2=reshape(I,1,m*n);
%将原始图像转换为一维数据
tu3=reshape(tu2,m,n);
%重建二维数组图像
figure,
imshow(tu3)
X=tu3(:
%将tu3转换为一维数据X
j=1;
tu4
(1)=1;
forz=1:
1:
(length(X)-1)%行程编码
ifX(z)==X(z+1)
tu4(j)=tu4(j)+1;
else
data(j)=X(z);
j=j+1;
tu4(j)=1;
data(j)=X(length(X));
%×
î
º
ó
Ò
»
¸
ö
Ï
ñ
Ë
Ø
Ê
ý
¾
Ý
³
ø
data
tu4length=length(tu4);
%计算图像经行程编码后的数据量
%行程解码
l=1;
form=1:
tu4length
forn=1:
tu4(m);
rec_tu(l)=data(m);
l=l+1;
rec2_tu=reshape(rec_tu,256,256);
%将一维数据转换为二维图像数据
imshow(rec2_tu);
解压恢复后图像'
实验六图像的边缘检测和分割
1.熟悉图像的边缘检测和分割的基本原理和方法
2.在MATLAB实现基于各种算子(Roberts算子、Prewitt算子、Sobel算子和拉普拉斯算子)的边缘检测方法
2.在MATLAB中利用分水岭变换方法对图像进行分割
2.利用Roberts算子、Prewitt算子、Sobel算子和拉普拉斯算子检测图像的边缘
3.利用分水岭变换方法分割图像
%%边缘检测
ps=rgb2gray(I);
[m,n]=size(ps);
%进行sobel微分算子边缘检测
pa=edge(ps,'
sobel'
pb=edge(ps,'
roberts'
%进行Roberts算子边缘检测,门限值采用MATLAB默认值
pc=edge(ps,'
prewitt'
%进行prewitt算子边缘检测,门限值采用MATLAB默认值
pd=edge(ps,'
log'
%进行拉普拉斯算子边缘检测,门限值采用MATLAB默认值
imshow(pa);
sobel算子边缘检测得到的图像'
imshow(pb);
roberts算子边缘检测得到的图像'
imshow(pc);
prewitt算子边缘检测得到的图像'
imshow(pd);
拉普拉斯算子边缘检测得到的图像'
%%分水岭变换方法图像分割
f=imread(IPATH);
g=im2bw(f,graythresh(f));
%对图像进行二值化
figure,imshow(g);
gc=~g;
D=bwdist(gc);
L=watershed(-D);
w=L==0;
g2=g&
~w;
imshow(g2);
实验七图像分割后的目标对象的参数测量
1.熟悉图像的边缘检测和分割的基本原理和方法
2.掌握利用MATLAB库函数计算分割后图像中对象的面积、欧拉数的方法
3.掌握利用MATLAB库函数标记分割后图像中对象的周长
1.读取一幅图像,利用实验六中的方法图像进行分割;
2.计算分割后图像中对象的面积和欧拉数;
3.标记分割后图像中对象的周长。
%分水岭分割方法
%%参数测量和周长标记
total=bwarea(g2);
%求面积
stotal=sprintf('
total=%f'
total);
disp(stotal);
eul=bweuler(g2);
%求欧拉数
seul=sprintf('
eul=%f'
eul);
disp(seul);
lengthBW=bwperim(g2,8);
%标记周长
imshow(lengthBW);
实验八伪彩色图像处理
1.掌握图像伪彩色处理的原理(伪彩色处理是把灰度图像的各个不同灰度按照线性或非线性的映射函数变换成不同的彩色,也可以将原来不是图像的数据表示成灰度图像,再转换成彩色图像达到增强的目的)
2.掌握伪彩色图像处理增强的方法
3.掌握空域伪彩色图像处理的方法
1.读取一幅图片
2.将彩色图像转换为灰度图
2.实现利用变换法的伪彩色处理的方法
I=double(I);
[M,N]=size(I);
L=256;
M
forj=1:
N
ifI(i,j)<
=L/4
R(i,j)=0;
G(i,j)=4*I(i,j);
B(i,j)=L;
elseifI(i,j)<
=L/2
G(i,j)=L;
B(i,j)=-4*I(i,j)+2*L;
=3*L/4
R(i,j)=4*I(i,j)-2*L;
B(i,j)=0;
R(i,j)=L;
G(i,j)=-4*I(i,j)+4*L;
OUT(i,j,1)=R(i,j);
OUT(i,j,2)=G(i,j);
OUT(i,j,3)=B(i,j);
OUT=OUT/256;
imshow(OUT);