图像处理Word格式文档下载.docx
- 文档编号:17566375
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:39
- 大小:1.24MB
图像处理Word格式文档下载.docx
《图像处理Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《图像处理Word格式文档下载.docx(39页珍藏版)》请在冰豆网上搜索。
作业四:
图像配准、运动跟踪
我编写了矩匹配算法,可以实现模板和图片的匹配。
效果如下:
第一幅图为模板,在第二幅图上进行了匹配。
运动匹配学习了ppt上的算法。
程序代码如下:
%主程序:
读取图像,调用不同函数(处理算法)。
clear
clc
f=imread('
F:
\matlab\shipintuxiangchuli\filter\test.jpg'
);
f=f(:
:
2);
%取灰度值,第三个值定值
figure
imshow(f);
title('
原始图像'
);
%%subplot(3,1,1),imshow(f);
f1=imnoise(f,'
gaussian'
0.1);
imshow(f1);
f2=imnoise(f,'
salt&
pepper'
%figure
%imshow(f2);
%%subplot(3,1,2),imshow(f2);
%title('
加入椒盐噪声'
f3=imnoise(f1,'
%imshow(f3);
%%subplot(2,3,3),imshow(f2);
加入白噪声和椒盐噪声'
%%中值滤波情况
ff1=mid_filter(f1,3);
f_mid_filter_1=uint8(ff1);
imshow(f_mid_filter_1);
%subplot(3,1,3),imshow(f_mid_filter_1);
3*3中值滤波'
%ff2=mid_filter(f2,5);
%f_mid_filter_2=uint8(ff2);
%imshow(f_mid_filter_2);
%%subplot(2,3,6),imshow(f_mid_filter_2);
5*5中值滤波'
%%均值滤波情况
%ff1=ave_filter(f3,3);
%f_ave_filter_1=uint8(ff1);
%imshow(f_ave_filter_1);
%ff2=ave_filter(f3,5);
%f_ave_filter_2=uint8(ff2);
%imshow(f_ave_filter_2);
%超限邻域平均法
%ff1=superave_filter(f2,3);
%f_superave_filter_1=uint8(ff1);
%imshow(f_superave_filter_1);
3*3超限邻域平均(加入椒盐噪声,阈值50)'
%
%%选择式掩膜平滑
%ff1=Sel_masking_smoothing(f1);
选择式掩膜平滑(白噪声)'
)
%中值滤波算法函数
functionx2=mid_filter(f,n)
x1=double(f);
x2=x1;
[height,width]=size(x1);
fori=((n+1)/2):
height-((n+1)/2)
forj=((n+1)/2):
width-((n+1)/2)
%取窗口元素
temp1=x1(i-((n-1)/2):
i+((n-1)/2),j-((n-1)/2):
j+((n-1)/2));
temp2=temp1(1,:
foru=2:
n
temp2=[temp2,temp1(u,:
)];
%将窗口元素转化成行矩阵
end
m=median(temp2);
%取中值
x2(i,j)=m;
%取窗口中值作为像素点
end
%均值滤波算法函数
functionx2=ave_filter(f,n)
s=sum(sum(temp1));
%求和
x2(i,j)=s/n^2;
%取窗口均值作为像素点
%超限邻域平均算法函数
functionx2=superave_filter(f,n)
a=50;
%求周围n*n-1个点的和
s=(sum(sum(temp1))-x1(i,j))/(n^2-1);
%判断像素点与周围像素的均值之差是否超过阈值
ifabs(x1(i,j)-s)>
a
x2(i,j)=s;
%else
%x2(i,j)=x1(i,j);
%选择式掩模平滑算法
functionx2=Sel_masking_smoothing(f)
k(1,1:
9)=0;
fori=3:
height-3
forj=3:
width-3
%%%%周围9邻近
a1=[x1(i-1,j-1:
j+1)x1(i,j-1:
j+1)x1(i+1,j-1:
j+1)];
s
(1)=sum(a1)/9;
forb=1:
9
k
(1)=k
(1)+(a1(b)^2-s
(1)^2);
%%%%左7邻近
a2=[x1(i-2,j-1:
j+1)x1(i-1,j-1:
j+1)x1(i,j)];
s
(2)=sum(a2)/7;
7
k
(2)=k
(2)+(a2(b)^2-s
(2)^2);
%%%%上7邻近
a3=[x1(i-1:
i+1,j-2)'
x1(i-1:
i+1,j-1)'
x1(i,j)];
s(3)=sum(a3)/7;
k(3)=k(3)+(a3(b)^2-s(3)^2);
%%%%右7邻近
a4=[x1(i+1,j-1:
j+1)x1(i+2,j-1:
s(4)=sum(a4)/7;
k(4)=k(4)+(a4(b)^2-s(4)^2);
%%%%下7邻近
a5=[x1(i-1:
i+1,j+1)'
i+1,j+2)'
s(5)=sum(a5)/7;
k(5)=k(5)+(a5(b)^2-s(5)^2);
%%%%左上7邻近
a6=[x1(i-2,j-2:
j-1)x1(i-1,j-2:
j)x1(i,j-1:
j)];
s(6)=sum(a6)/7;
k(6)=k(6)+(a6(b)^2-s(6)^2);
%%%%右上7邻近
a7=[x1(i,j-1:
j)x1(i+1,j-2:
j)x1(i+2,j-2:
s(7)=sum(a7)/7;
k(7)=k(7)+(a7(b)^2-s(7)^2);
%%%%右下7邻近
a8=[x1(i,j:
j+1)x1(i+1,j:
j+2)x1(i+2,j:
j+2)];
s(8)=sum(a8)/7;
k(8)=k(8)+(a8(b)^2-s(8)^2);
%%%%左下邻近
a9=[x1(i-2,j+1:
j+2)x1(i-1,j:
j+2)x1(i,j:
s(9)=sum(a9)/7;
k(9)=k(9)+(a9(b)^2-s(9)^2);
[maxr,index]=min(k);
x2(i,j)=s(index);
%%Canny算子
clear
clc
closeall
1.jpg'
figure,imshow(f);
原图'
灰度图'
q1=double(f);
J=q1;
[height,width]=size(q1);
%%一般情况下,使用高斯平滑滤波器卷积降噪.K为size=5的高斯内核
K=1/139*[24542;
491294;
51215125;
24542];
%%对图像实施高斯滤波
fori=1:
height
forj=1:
width
sum=0;
form=1:
5
forn=1:
%sum=sum+K(m,n)*q1(i,j);
if(i-3+m)>
0&
&
(i-3+m)<
=height&
(j-3+n)>
(j-3+n)<
sum=sum+K(m,n)*q1(i-3+m,j-3+n);
end
J(i,j)=sum;
J1=uint8(J);
figure,imshow(J1);
高斯滤波后的结果'
%%用一阶偏导的有限差分来计算梯度的幅值和方向;
dx=zeros(height,width);
%x方向梯度
dy=zeros(height,width);
%y方向梯度
d=zeros(height,width);
%近似梯度
%fori=1:
height-1
%forj=1:
width-1
%dx(i,j)=(J(i,j+1)-J(i,j)+J(i+1,j+1)-J(i+1,j))/2;
%dy(i,j)=(J(i,j)-J(i+1,j)+J(i,j+1)-J(i+1,j+1))/2;
%d(i,j)=sqrt(dx(i,j)^2+dy(i,j)^2);
%end
%%用sobel算子计算梯度
fori=2:
forj=2:
dx(i,j)=J(i+1,j-1)+2*J(i+1,j)+J(i+1,j+1)-J(i-1,j-1)-2*J(i-1,j)-J(i-1,j+1);
dy(i,j)=J(i-1,j+1)+2*J(i,j+1)+J(i+1,j+1)-J(i-1,j-1)-2*J(i,j-1)-J(i+1,j-1);
d(i,j)=sqrt(dx(i,j)^2+dy(i,j)^2);
figure,imshow(d,[]);
title('
求梯度后的结果'
%%非极大值抑制
D=d;
%记录进行抑制后的梯度
%%首先图像四周边缘肯定不是边缘点
D(1,j)=0;
D(height,j)=0;
fori=2:
D(i,1)=0;
D(i,width)=0;
ifd(i,j)==0%%当前像素点梯度为0,则一定不是边缘点
D(i,j)=0;
else
gradX=dx(i,j);
%当前点x方向导数
gradY=dy(i,j);
%当前点y方向导数
gradTemp=d(i,j);
%当前点梯度
%如果y方向梯度大,则赋值y梯度
ifabs(gradY)>
abs(gradX)
weight=abs(gradX)/abs(gradY);
%权重
grad2=d(i,j-1);
grad4=d(i,j+1);
%如果x、y方向导数符号相同
%像素点位置关系
%g1g2
%C
%g4g3
ifgradX*gradY>
grad1=d(i-1,j-1);
grad3=d(i+1,j+1);
%如果x、y方向导数符号反
%g2g1
%g3g4
grad1=d(i+1,j-1);
grad3=d(i-1,j+1);
%如果X方向幅度值较大
weight=abs(gradY)/abs(gradX);
grad2=d(i-1,j);
grad4=d(i+1,j);
%g3
%g4Cg2
%g1
grad1=d(i-1,j+1);
grad3=d(i+1,j-1);
%g4Cg2
%g3
%%利用grad1~grad4权重关系对梯度进行插值
gradTemp1=weight*grad1+(1-weight)*grad2;
gradTemp2=weight*grad3+(1-weight)*grad4;
%%当前像素的梯度是局部的最大值,可能是边缘点
ifgradTemp>
=gradTemp1&
gradTemp>
=gradTemp2
D(i,j)=gradTemp;
%%不可能是边缘点
figure,imshow(D,[]);
非极大值抑制后的结果'
%%滞后阈值:
高阈值和低阈值
EP_MIN=30;
EP_MAX=60;
EdgeLarge=zeros(height,width);
%边缘像素
EdgeBetween=zeros(height,width);
%记录可能存在的边缘点
%dd=zeros(height,width);
%fori=2:
%forj=2:
%ifD(i,j)>
=D_max;
%如果超过高阈值,像素被保留为边缘像素
%%EdgeLarge(i,j)=D(i,j);
%dd=D(i,j);
%elseifD(i,j)>
=D_min&
(D(i,j+1)>
=D_max||D(i,j-1)>
=D_max...
%||D(i+1,j)>
=D_max||D(i-1,j)>
=D_max)%在两个阈值之间,暂时保留在此处,接下来进行连接计算
%%EdgeBetween(i,j)=D(i,j);
%end%低于低阈值的,被排除
%figure,imshow(dd,[])
滞后阈值的结果'
fori=1:
ifD(i,j)>
=EP_MAX%大于最大阈值,为边缘点
EdgeLarge(i,j)=D(i,j);
elseifD(i,j)>
=EP_MIN%在两个阈值之间,进行下一步判断
EdgeBetween(i,j)=D(i,j);
%把EdgeLarge的边缘连成连续的轮廓
MAXSIZE=999999;
Queue=zeros(MAXSIZE,2);
%用数组模拟队列
front=1;
%队头
rear=1;
%队尾
edge=zeros(height,width);
ifEdgeLarge(i,j)>
%强点入队
Queue(rear,1)=i;
Queue(rear,2)=j;
rear=rear+1;
edge(i,j)=EdgeLarge(i,j);
EdgeLarge(i,j)=0;
%避免重复计算
whilefront~=rear%队不空
%队头出队
temp_i=Queue(front,1);
temp_j=Queue(front,2);
front=front+1;
%8-连通域寻找可能的边缘点
%左上方
ifEdgeBetween(temp_i-1,temp_j-1)>
0%把在强点周围的弱点变为强点
EdgeLarge(temp_i-1,temp_j-1)=D(temp_i-1,temp_j-1);
EdgeBetween(temp_i-1,temp_j-1)=0;
%入队
Queue(rear,1)=temp_i-1;
Queue(rear,2)=temp_j-1;
%正上方
ifEdgeBetween(temp_i-1,temp_j)>
EdgeLarge(temp_i-1,temp_j)=D(temp_i-1,temp_j);
EdgeBetween(temp_i-1,temp_j)=0;
Queue(rear,2)=temp_j;
%右上方
ifEdgeBetween(temp_i-1,temp_j+1)>
EdgeLarge(temp_i-1,temp_j+1)=D(temp_i-1,temp_j+1);
EdgeBetween(temp_i-1,temp_j+1)=0;
Queue(rear,2)=temp_j+1;
%正左方
ifEdgeBetween(temp_i,temp_j-1)>
EdgeLarge(temp_i,temp_j-1)=D(temp_i,temp_j-1);
EdgeBetween(temp_i,temp_j-1)=0;
Queue(rear,1)=temp_i;
%正右方
ifEdgeBetween(temp_i,temp_j+1)>
EdgeLarge(temp_i,temp_j+1)=D(temp_i,temp_j+1);
EdgeBetween(temp_i,temp_j+1)=0;
%左下方
ifEdgeBetween(temp_i+1,temp_j-1)>
EdgeLarge(temp_i+1,temp_j-1)=D(temp_i+1,temp_j-1);
EdgeBetween(temp_i+1,temp_j-1)=0;
Queue(rear,1)=temp_i+1;
%正下方
ifEdgeBet
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图像 处理