图像处理上机实验报告图像处理实验报告.docx
- 文档编号:10475300
- 上传时间:2023-02-13
- 格式:DOCX
- 页数:43
- 大小:2.39MB
图像处理上机实验报告图像处理实验报告.docx
《图像处理上机实验报告图像处理实验报告.docx》由会员分享,可在线阅读,更多相关《图像处理上机实验报告图像处理实验报告.docx(43页珍藏版)》请在冰豆网上搜索。
图像处理上机实验报告图像处理实验报告
实验报告
课程名称:
图像处理
实验题目:
图像处理上机实验报告
姓名:
***
院系:
理学院数学系
班级:
09*****
学号:
109*******
递交时间:
2012年07月11日
评阅时间:
年月日
评阅成绩:
实验报告
1.读入图像,显示图像,以及对图像的基本操作;
二.噪音图像的产生,热方程去噪以及PM模型去噪;
三.经典TV模型;
四.动态边界(拓扑分离)
五.Guass磨光算子去噪
正文
一.读入图像,显示图像,以及对图像的基本操作
1.读入图像,显示图像
程序:
Mypage1=imread('C5.bmp');
figure
(1);
imshow(Mypage1);
以上语句依次实现:
imread命令将图像'C5.bmp'读入图像像素矩阵Mypage1?
?
开一个窗口?
?
命令将该矩阵在屏幕上显示,即显示图像'C5.bmp',这里显示的是彩色图像。
注意:
imread()和imshow()既可以用来显示灰度图像,也用来显示彩色图像。
运行结果:
2.对图像的基本操作
1)将原图像转成灰度图像
程序:
Mypage11=Mypage1(:
:
1);
figure
(2);
imshow(Mypage11);
以上语句依次实现:
将原图像转成灰度图像?
?
开一个窗口?
?
显示转化后的灰度图像Mypage11。
运行结果:
2)图像色做差补
.彩色图像作色差补
程序:
Mypage12=255-Mypage1;
figure(3);
imshow(Mypage12);
以上语句依次实现:
将彩色图像Mypage1的颜色做差补得到新图像?
?
开一个窗口?
?
显示做差补后的彩色图像Mypage12。
运行结果:
.灰度图像作色差补
程序:
Mypage13=255-Mypage11;
figure(4);
imshow(Mypage13);
以上语句依次实现:
将灰度图像Mypage11的颜色做差补得到新图像?
?
开一个窗口?
?
显示做差补后的灰度图像Mypage13。
运行结果:
3).灰度值缩小三倍
程序:
Mypage14=(Mypage11)/3;
figure(5);
imshow(Mypage14);
以上语句依次实现:
将Mypage11的灰度值缩小三倍?
?
开一个窗口?
?
显示操作的彩色图像Mypage14。
运行结果:
我们可以看出图像明显变暗。
4)灰度值扩大三倍
程序:
Mypage15=(Mypage11)*3;
figure(6);
imshow(Mypage15);
以上语句依次实现:
将Mypage11的灰度值扩大三倍?
?
开一个窗口?
?
显示操作的彩色图像Mypage15。
运行结果:
我们可以看出图像明显变亮。
5)图像的灰度值的一个运算
程序:
Mypage111=double(Mypage11);
Im=max(Mypage111(:
));
p=1/3;
Mypage16=Im*((Mypage111/Im).^p);
figure(7)
imshow(Mypage16,[]);
以上语句依次实现:
对图像的灰度值做一个运算?
?
开一个窗口?
?
显示运算得到图像。
注意:
最后一行要使用imshow(Image,[])或imshow(uint8(Image)),否则得不到所要结果。
运行结果:
6)显示图像的大小
程序:
[height1width1]=size(Mypage1)
以上语句实现:
显示图像的大小,返回图像的高height1和宽width1。
运行结果:
height1=256width1=768
7)图像格式的转换
程序:
imwrite(Mypage1,'C5.jpg');、
以上语句实现:
将bmp格式的图像转换为JPEG格式的图。
运行结果:
通过属性可以看出,图像所占空间从192kb减小到10.3kb,这样可以在损失精度的情况下压缩图像。
8)图像直方图
程序:
figure(10);
imhist(Mypage11);
title('Building1');
以上语句实现:
开一个窗口?
?
显示图像直方图?
?
做标题
运行结果:
2.噪音图像的产生,热方程去噪以及PM模型去噪
1.噪音图像的产生
1)读入图像
程序:
Mypage1=imread('Article3.bmp');
figure
(1);
imshow(Mypage1);
Mypage11=Mypage1(:
:
1);
以上语句依次实现:
imread命令将图像'C5.bmp'读入图像像素矩阵Mypage1?
?
开一个窗口?
?
imshow命令将该矩阵在屏幕上显示,即显示图像'C5.bmp'?
?
将原图像转成灰度图像。
运行结果:
2)增加高斯白噪声
程序:
figure
(2);
subplot(2,2,1);
imshow(Mypage1,[]);
title('原图像');
noise_g=imnoise(Mypage11,'gaussian',0,0.01);%
subplot(2,2,2);
imshow(noise_g,[]);
title('高斯白噪声');
以上语句依次实现:
开一个窗口?
?
在窗口的四分之一窗口中显示?
?
显示原图?
?
命名?
?
加高斯噪声?
?
在窗口的四分之一窗口中显示?
?
显示加燥图像?
?
命名。
3)加椒盐噪声
程序:
noise_s=imnoise(Mypage11,'salt&pepper',0.05);
subplot(2,2,3);
imshow(noise_s,[]);
title('黑白象素点噪声(椒盐)');
以上语句依次实现:
加椒盐噪声?
?
在窗口的四分之一窗口中显示?
?
显示原图?
?
命名。
4)乘积性噪声
程序:
noise_p=imnoise(Mypage11,'speckle');
subplot(2,2,4);
imshow(noise_p,[]);
title('乘积性噪声');
以上语句依次实现:
加乘积性噪声?
?
在窗口的四分之一窗口中显示?
?
显示原图?
?
命名。
运行结果:
5)随机加燥
程序:
std_n=30;
var_n=std_n^2;
NI=randn(size(Mypage11))*std_n;
In=double(Mypage11)+NI;
以上程序实现:
随机加燥。
其中方差与均值可以随意改变,以影响加燥效果。
2.热方程去噪
1)
热方程
热方程程序
functionIs=MyLB(In,N,dt,lamda);
Is=In;
fori=1:
N
i
DxxI=Is([2:
endend],:
)+Is([11:
end-1],:
)-2*Is;
DyyI=Is(:
[2:
endend])+Is(:
[11:
end-1])-2*Is;
Is=Is+dt*(DxxI+DyyI)-lamda*dt*(Is-In);
imshow(uint8(Is));
end
2)热方程对随机加燥的去噪作用
程序:
figure(3);
subplot(1,2,1);
imshow(uint8(In));
N=1000;
dt=0.2;
lamda=1;
subplot(1,2,2);
Mynew2=MyLB(In,N,dt,lamda);
以上程序依次实现:
开一个窗口?
?
在窗口的四分之一窗口中显示?
?
显示原图?
?
给参数赋值?
?
在窗口的四分之一窗口中显示?
?
调用热方程函数。
运行结果:
3)热方程对高斯加燥的去噪作用
程序:
figure(5);
subplot(1,2,1);
imshow(noise_g,[]);
subplot(1,2,2);
Mynew1=MyLB(noise_g,N,dt,lamda);
以上程序依次实现:
开一个窗口?
?
在窗口的四分之一窗口中显示?
?
显示原图?
?
在窗口的四分之一窗口中显示?
?
调用热方程函数。
运行结果:
4)热方程对椒盐加燥的去噪作用
程序:
figure(4);
subplot(1,2,1);
imshow(noise_s,[]);
subplot(1,2,2);
Mynew1=MyLB(noise_s,N,dt,lamda);
以上程序依次实现:
开一个窗口?
?
在窗口的四分之一窗口中显示?
?
显示原图?
?
在窗口的四分之一窗口中显示?
?
调用热方程函数。
运行结果:
5)热方程对乘积性噪声加燥的去噪作用
程序:
figure(6);
subplot(1,2,1);
imshow(noise_p,[]);
subplot(1,2,2);
Mynew1=MyLB(noise_p,N,dt,lamda);
以上程序依次实现:
开一个窗口?
?
在窗口的四分之一窗口中显示?
?
显示原图?
?
在窗口的四分之一窗口中显示?
?
调用热方程函数。
运行结果:
6)结果与思考
从上图可以看出,热方程在处理随机噪声时有一定的效果,但图像容易变得过分光滑,不容易保持边界。
而且对于高斯噪声,椒盐噪声以及乘积性噪声的处理效果就不好了,应此我们需要寻求更好的处理噪声的方法,由此引入PM模型。
3.PM模型去噪
1)PM模型
PM模型
PM方程的局部坐标表达式
PM方程数值差分格式
PM模型程序
functionIs=PM(In,dt,N,K);
Is=In;
fori=1:
N
i
DN=Is([11:
end-1],:
)-Is;
DS=Is([2:
endend],:
)-Is;
DE=Is(:
[11:
end-1])-Is;
DW=Is(:
[2:
endend])-Is;
CN=1./(1+(DN/K).^2);
CS=1./(1+(DS/K).^2);
CE=1./(1+(DE/K).^2);
CW=1./(1+(DW/K).^2);
div=CN.*DN+CS.*DS+CE.*DE+CW.*DW;
Is=Is+dt*div;
figure(6)
imshow(uint8(Is))
end
2)PM模型去随机噪声
程序:
Mypage1=imread('Article3.bmp');
figure
(1);
imshow(Mypage1);
std_n=30;
var_n=std_n^2;
NI=randn(size(Mypage11))*std_n;
In=double(Mypage11)+NI;
figure
(2);
imshow(uint8(In));
N=500;
dt=0.2;
lamda=1;
K=4;
Is=PM(In,dt,N,K);
以上程序依次实现:
读图?
?
开一个窗口?
?
显示原图?
?
加随机燥声?
?
开一个窗口?
?
显示加燥图像?
?
赋值参数?
?
调用热方程函数。
运行结果:
3)结论与思考
从上图我们可以看出,PM对于随机噪声的去除有很好的效果,边界也可以得到较好的保持,但这里关系到参数的选择,一下我们变动参数K,易观察到一些不可思议的结果。
我们可以观察到,此时模型处理噪声的速度很快,但同时边界也逐渐变模糊,不再保持。
下图即为“过分光滑的"图像。
4)PM模型的改进
改进的PM模型程序
functionIs=PM_Eq1(In,dt,N,K,sigma)
Is=In;
fori=1:
N
i
DN=Is([11:
end-1],:
)-Is;
DS=Is([2:
endend],:
)-Is;
DE=Is(:
[2:
endend])-Is;
DW=Is(:
[11:
end-1])-Is;
Ng=ceil(6*sigma)+1;
Gauss=fspecial('gaussian',[NgNg],sigma);
Iss=conv2(Is,Gauss,'same');
DNs=Iss([11:
end-1],:
)-Iss;
DSs=Iss([2:
endend],:
)-Iss;
DEs=Iss(:
[2:
endend])-Iss;
DWs=Iss(:
[11:
end-1])-Iss;
CN=1./(1+(DNs/K).^2);
CS=1./(1+(DSs/K).^2);
CW=1./(1+(DWs/K).^2);
CE=1./(1+(DEs/K).^2);
div=CN.*DN+CS.*DS+CE.*DE+CW.*DW;
Is=Is+dt*div;
figure(7)
imshow(uint8(Is))
end
程序说明:
以上程序PM程序的基础上增加了
Ng=ceil(6*sigma)+1;
Gauss=fspecial('gaussian',[NgNg],sigma);
Iss=conv2(Is,Gauss,'same');
这个起到预光滑,减少噪声的效果。
所以可以大大减少迭代的次数,提高效率,即使在K比较小的情况下。
运行的主程序:
dt=0.2;
lamda=1;
K=2;
N1=80;
sigma=1.5;
figure(7);
Is=PM_Eq1(In,dt,N1,K,sigma);
运行结果:
我们可以看出PM_Eq1()能在保持效果的前提下达到较好的运行效率。
3.经典TV模型
1.TV模型的基础知识
可转化为求介入下线性方程的解:
可有如下数值格式:
函数程序:
function[ALLPSNRJ]=TV1(In,Io,dt,N,lambda,var_n)
J=In;
ep=0.0001;
fori=1:
N
i
DfJx=J([2:
endend],:
)-J;
DbJx=J-J([11:
end-1],:
);
DfJy=J(:
[2:
endend])-J;
DbJy=J-J(:
[11:
end-1]);
TempDJx=(ep+DfJx.*DfJx+((sign(DfJy)+sign(DbJy)).*min(abs(DfJy),abs(DbJy))./2).^2).^(1/2);
TempDJy=(ep+DfJy.*DfJy+((sign(DfJx)+sign(DbJx)).*min(abs(DfJx),abs(DbJx))./2).^2).^(1/2);
DivJx=DfJx./TempDJx;
DivJy=DfJy./TempDJy;
Div=DivJx-DivJx([11:
end-1],:
)+DivJy-DivJy(:
[11:
end-1]);
lambda=max(mean(mean(Div.*(J-In)))./var_n,0)
J=J+dt*Div-dt*lambda*(J-In);
NowPSNR=psnr(uint8(J),Io)
ALLPSNR(i)=NowPSNR;
end
其中psnr(uint8(J),Io)为:
functions=psnr(noisydata,original)
noisydata=double(noisydata);
original=double(original);
[m,n]=size(noisydata);
peak=255*255*m*n;
noise=noisydata-original;
nostotal=sum(sum(noise.*noise));
ifnostotal==0
s=999.99;
else
s=10*log10(peak./nostotal);
end
return
主程序:
clearall
closeall
Io=imread('G.bmp');
if(ndims(Io)==3)
Io=rgb2gray(Io);
end;
figure
(1);
imshow(Io);
Io=double(Io);
std_n=20;
var_n=std_n^2;
NI=randn(size(Io))*std_n;
In=Io+NI;
figure
(2);
imshow(uint8(In));
N=180;
dt=0.2;
lambda=0.01;
[ALLPSNRJ]=TV1(In,Io,dt,N,lambda,var_n);
[MaxPSNR,Index]=max(ALLPSNR)
figure(3);
imshow(uint8(J));
x=1:
N;
figure(4);
plot(x,ALLPSNR)
以上主程序依次实现:
清除变量?
?
读入图像?
?
变成双浮点型的?
?
开一个窗口?
?
显示图像
?
?
加燥?
?
显示加燥图像?
?
输入参数?
?
调用函数?
?
显示处理后图像?
?
显示曲线
运算结果:
结论及思考:
从以上图像可以看出TV处理此图像的效果较好,但有较为明显的“阶梯效应”,但其在保持边界上可以有很好的效果,例子如下:
在这个过程中,我们可以自行调节迭代次数N,以达到最好效果。
2.带参数P的TV模型。
原始微分方程:
函数程序:
functionJ=Plab(In,dt,N,p,var);
J=In;
ep=0.0001;
fori=1:
N
i
DfJx=J([2:
endend],:
)-J;
DbJx=J-J([11:
end-1],:
);
DfJy=J(:
[2:
endend])-J;
DbJy=J-J(:
[11:
end-1]);
pi=1+1/i;
TempDJx=(ep+DfJx.*DfJx+((sign(DfJy)+sign(DbJy)).*min(abs(DfJy),abs(DbJy))./2).^2).^(1/2);
TempDJy=(ep+DfJy.*DfJy+((sign(DfJx)+sign(DbJx)).*min(abs(DfJx),abs(DbJx))./2).^2).^(1/2);
DivJx=DfJx./TempDJx.^(2-p);
DivJy=DfJy./TempDJy.^(2-p);
Div=DivJx-DivJx([11:
end-1],:
)+DivJy-DivJy(:
[11:
end-1]);
lambda=max(mean(mean(Div.*(J-In)))./var,0)
J=J+dt*Div-dt*lambda*(J-In);
figure(5)
imshow(uint8(J));
end
程序说明:
我们可以看到p_TV与原来函数的区别在于多了参数p,当p=1时,即原来的TV模型,这里对p的取值范围是有一定限制的,由实验可以得出但p>2时图像会“过光滑”,如下图:
仅三次迭代就有以下结果,十次迭代后就已经变不清原图了:
四.动态边界(拓扑分离)
1动态边界
1)原理:
这里还是利用热方程,因为热方程具有很好的光滑效果,可以将物体的形状进行模糊,最终只保留轮廓。
2)函数程序:
functionJ=HeatEq(In,dt,iter,U)
J=In;
fori=1:
iter
DxxJ=J([2:
endend],:
)+J([11:
end-1],:
)-2*J;
DyyJ=J(:
[2:
endend])+J(:
[11:
end-1])-2*J;
J=J+dt*(DxxJ+DyyJ);
Edge=255*double(J>128);
if(i==1||rem(i,U)==0)
figure(i)
imshow(uint8(Edge))
end
End
3)主程序:
clearall;
closeall;
Io=imread('dragon.bmp');
if(ndims(Io)==3)
Io=rgb2gray(Io);
end
figure(20)
imshow(uint8(Io))
Io=double(Io);
In=Io;
figure
(1)
imshow(uint8(In))tic
I_s=HeatEq(In,tau,iter,U);
toc
4)运行结果:
我们可以看到最后图像光滑成一个图像了。
2.拓扑分离
1)BMO算法程序:
functionBMO(image_name,N,out_filename)
image_matrix=imread(image_name);
subplot(1,2,1);
imshow(image_matrix);
title('原图像');
forindex=1:
N
heat_matrix=Heat_EEquation(image_matrix,0.5);
image_matrix=binari_value(heat_matrix);
end
imwrite(image_matrix,out_filename);
subplot(1,2,2);
imshow(image_matrix);
title(strcat('bmo迭代',num2str(N),'次后图像'));
[size_r,size_c]=size(image_I);
image_I=double(image_I);
N=t/0.1;
forindex=1:
N
image_ex=matrix_expand(image_I);%边界拓展
diff_two_order=zeros(size_r,size_c);
forrow=2:
size_r+1
forcol=2:
size_c+1
diff_two_order(row-1,col-1)=-4*image_ex(row,col)+image_ex(row-1,col)+image_ex(row+1,col)+image_ex(row,col-1)+image_ex(row-1,col+1);
end
end
image_I=image_I+0.1*diff_two_order;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 处理 上机 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)