版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、八边形识别本文将四个八边形的图像称为源图像(test.jpg),将单个多边形的图像称为待匹配图像(test1.jpg、test2.jpg)。步骤1:角点检测函数octagon_corner.m函数是利用课本上提到的Harris角点探测器,对整个图像提取角点。步骤2:图像的预处理及角点匹配octagon_search.m和octagon_source.m函数,分别对源图像和待匹配图像处理,用于将检测出的角点与各自归属的八边形匹配。步骤3:交比计算octagon_cal_much.m和octagon_cal_one.m函数,分别用于对源图像和待匹配图像计算交比。步骤4:找到最像的八边形octago
2、n_main.m主函数,将待匹配图像与源图像匹配。匹配结果1:匹配结果2:代码function theta=angle1(x1,y1,x2,y2,x3,y3)theta=acosd(dot(x1-x2,y1-y2,x3-x2,y3-y2)/(norm(x1-x2,y1-y2)*norm(x3-x2,y3-y2);function octagon_CR=octagon_cal_much(point_devide)number_octagon=size(point_devide,3);octagon_angle=zeros(8,4,number_octagon);octagon_CR=zeros(
3、8,number_octagon);x=zeros(4,1);y=zeros(4,1);l=zeros(4,1);for i=1:number_octagon for j=1:8 xx=point_devide(j,1,i); yy=point_devide(j,2,i); for k=1:4 if(j+k=8) x(k)=point_devide(8,1,i); y(k)=point_devide(8,2,i); else x(k)=point_devide(rem(j+k,8),1,i); y(k)=point_devide(rem(j+k,8),2,i); end end octagon
4、_angle(j,1,i)=sind(angle1(x(1),y(1),xx,yy,x(3),y(3); octagon_angle(j,2,i)=sind(angle1(x(2),y(2),xx,yy,x(3),y(3); octagon_angle(j,3,i)=sind(angle1(x(1),y(1),xx,yy,x(4),y(4); octagon_angle(j,4,i)=sind(angle1(x(2),y(2),xx,yy,x(4),y(4); octagon_CR(j,i)=(octagon_angle(j,1,i)/octagon_angle(j,2,i)/(octagon
5、_angle(j,3,i)/octagon_angle(j,4,i); endendfunction octagon_CR=octagon_cal_one(point_devide)number_octagon=size(point_devide,3);octagon_angle=zeros(8,4);octagon_CR=zeros(8,1);x=zeros(4,1);y=zeros(4,1);l=zeros(4,1); for j=1:8 xx=point_devide(j,1); yy=point_devide(j,2); for k=1:4 if(j+k=8) x(k)=point_d
6、evide(8,1); y(k)=point_devide(8,2); else x(k)=point_devide(rem(j+k,8),1); y(k)=point_devide(rem(j+k,8),2); end end octagon_angle(j,1)=sind(angle1(x(1),y(1),xx,yy,x(3),y(3); octagon_angle(j,2)=sind(angle1(x(2),y(2),xx,yy,x(3),y(3); octagon_angle(j,3)=sind(angle1(x(1),y(1),xx,yy,x(4),y(4); octagon_ang
7、le(j,4)=sind(angle1(x(2),y(2),xx,yy,x(4),y(4); octagon_CR(j)=(octagon_angle(j,1)/octagon_angle(j,2)/(octagon_angle(j,3)/octagon_angle(j,4);endfunction ROW COLUMN=octagon_corner(Image) %Image = im2uint8(rgb2gray(Image); dx = -1 0 1;-1 0 1;-1 0 1; %dx:横向Prewitt差分模版 Ix2 = filter2(dx,Image).2; Iy2 = fil
8、ter2(dx',Image).2; Ixy = filter2(dx,Image).*filter2(dx',Image); %生成 9*9高斯窗口。窗口越大,探测到的角点越少。 h= fspecial('gaussian',9,2); A = filter2(h,Ix2); % 用高斯窗口差分Ix2得到A B = filter2(h,Iy2); C = filter2(h,Ixy); nrow = size(Image,1); ncol = size(Image,2); Corner = zeros(nrow,ncol); %矩阵Corner用来保存候选角点
9、位置,初值全零,值为1的点是角点 %真正的角点在137和138行由(row_ave,column_ave)得到 %参数t:点(i,j)八邻域的“相似度”参数,只有中心点与邻域其他八个点的像素值之差在 %(-t,+t)之间,才确认它们为相似点,相似点不在候选角点之列 t=20; %我并没有全部检测图像每个点,而是除去了边界上boundary个像素, %因为我们感兴趣的角点并不出现在边界上 boundary=8; for i=boundary:nrow-boundary+1 for j=boundary:ncol-boundary+1 nlike=0; %相似点个数 if Image(i-1,j-
10、1)>Image(i,j)-t && Image(i-1,j-1)<Image(i,j)+t nlike=nlike+1; end if Image(i-1,j)>Image(i,j)-t && Image(i-1,j)<Image(i,j)+t nlike=nlike+1; end if Image(i-1,j+1)>Image(i,j)-t && Image(i-1,j+1)<Image(i,j)+t nlike=nlike+1; end if Image(i,j-1)>Image(i,j)-t &a
11、mp;& Image(i,j-1)<Image(i,j)+t nlike=nlike+1; end if Image(i,j+1)>Image(i,j)-t && Image(i,j+1)<Image(i,j)+t nlike=nlike+1; end if Image(i+1,j-1)>Image(i,j)-t && Image(i+1,j-1)<Image(i,j)+t nlike=nlike+1; end if Image(i+1,j)>Image(i,j)-t && Image(i+1,j)&l
12、t;Image(i,j)+t nlike=nlike+1; end if Image(i+1,j+1)>Image(i,j)-t && Image(i+1,j+1)<Image(i,j)+t nlike=nlike+1; end if nlike>=2 && nlike<=6 Corner(i,j)=1;%如果周围有0,1,7,8个相似与中心的(i,j) %那(i,j)就不是角点,所以,直接忽略 end; end; end; CRF = zeros(nrow,ncol); % CRF用来保存角点响应函数值,初值全零 CRFmax = 0;
13、 % 图像中角点响应函数的最大值,作阈值之用 t=0.04; %建议取0.04(机器视觉) % 计算CRF %工程上常用CRF(i,j) =det(M)/trace(M)计算CRF,那么此时应该将下面第105行的 %比例系数t设置大一些,t=0.1对采集的这几幅图像来说是一个比较合理的经验值 for i = boundary:nrow-boundary+1 for j = boundary:ncol-boundary+1 if Corner(i,j)=1 %只关注候选点 M = A(i,j) C(i,j); C(i,j) B(i,j); CRF(i,j) = det(M)-t*(trace(M
14、)2; if CRF(i,j) > CRFmax CRFmax = CRF(i,j); end; end end; end; %CRFmax count = 0; % 用来记录角点的个数 t=0.1; % 下面通过一个3*3的窗口来判断当前位置是否为角点 for i = boundary:nrow-boundary+1 for j = boundary:ncol-boundary+1 if Corner(i,j)=1 %只关注候选点的八邻域 if CRF(i,j) > t*CRFmax && CRF(i,j) >CRF(i-1,j-1) . &&
15、; CRF(i,j) > CRF(i-1,j) && CRF(i,j) > CRF(i-1,j+1) . && CRF(i,j) > CRF(i,j-1) && CRF(i,j) > CRF(i,j+1) . && CRF(i,j) > CRF(i+1,j-1) && CRF(i,j) > CRF(i+1,j). && CRF(i,j) > CRF(i+1,j+1) count=count+1;%这个是角点,count加1 else % 如果当前位置(i,j
16、)不是角点,则在Corner(i,j)中删除对该候选角点的记录 Corner(i,j) = 0; end; end; end; end; % toc(t1)p=9;pp=(p-1)/2;ROW=zeros(1,count);COLUNM=zeros(1,count);number=1; for i=boundary:nrow-boundary+1 for j=boundary:ncol-boundary+1 column_ave=0; row_ave=0; k=0; if Corner(i,j)=1 for x=i-pp:i+pp %7*7邻域 for y=j-pp:j+pp if Corne
17、r(x,y)=1 % 用算数平均数作为角点坐标,如果改用几何平均数求点的平均坐标,对角点的提取意义不大 row_ave=row_ave+x; column_ave=column_ave+y; k=k+1; end end end end if k>0 %周围不止一个角点 ROW(number)=row_ave/k; COLUMN(number)=column_ave/k; number=number+1; end end; end; ROW=ROW'COLUMN=COLUMN'temp_m=ROW;temp_n=COLUMN;for i=1:size(temp_m,1)-
18、1 for ii=i+1:size(temp_m,1) if(temp_m(i)=temp_m(ii) if(temp_n(i)=temp_n(ii) temp_m(i)=0; temp_n(i)=0; end end end endj=1;while j<=size(temp_m,1) if(temp_m(j)=0&&temp_n(j)=0) temp_m(j)=; temp_n(j)=; else j=j+1; endendROW=temp_m;COLUMN=temp_n;%clear all%close all%octagon_input=imread('F
19、:/test/test1.jpg');function point_devide=octagon_search(octagon_input)octagon_gray=im2uint8(rgb2gray(octagon_input);row=size(octagon_gray,1);col=size(octagon_gray,2); %角点检测m=zeros(100,1);n=zeros(100,1);m n=octagon_corner(octagon_gray);number_mn=size(m,1);number_octagon=number_mn/8;%判断角点归属temp_m=
20、m;temp_n=n;center_m=row/2;center_n=col/2;point_devide=zeros(8,2,number_octagon);%三列分别为行、列、点序号corner_devide=zeros(32,1);for i=1:number_mn if(temp_m(i)>center_m && temp_n(i)>center_n) corner_devide(i)=1; elseif(temp_m(i)>center_m && temp_n(i)<center_n) corner_devide(i)=2; e
21、lseif(temp_m(i)<center_m && temp_n(i)<center_n) corner_devide(i)=3; elseif(temp_m(i)<center_m && temp_n(i)>center_n) corner_devide(i)=4; else corner_devide(i)=0; endendnumber_devide=ones(1,number_octagon);for i=1:number_mn for j=1:number_octagon if(corner_devide(i)=j) poi
22、nt_devide(number_devide(j),:,j)=temp_m(i) temp_n(i); number_devide(j)=number_devide(j)+1; end endend%clear all%close all%octagon_input=imread('F:/test/test.jpg');function point_devide=octagon_source(octagon_input)octagon_gray=im2uint8(rgb2gray(octagon_input);row=size(octagon_gray,1);col=size(octagon_gray,2); %角点检测m=zeros(100,1);n=zeros(100,1);m n=octag
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 谁发明过绩效考核制度
- 小学中层干部考核制度
- 员工后厨卫生考核制度
- 招采中心绩效考核制度
- 职务满勤安全考核制度
- 住院病区防控考核制度
- 车队队长处罚考核制度
- 光伏分配监督考核制度
- 青年教师培养考核制度
- 阿里质量绩效考核制度
- 全国农产品质量安全检测技能竞赛理论知识考试试题题库2025年附答案
- 丹纳赫传奇+从100万到亿美金的奇迹+22%年化复利密码
- 2025年降噪同写考试题及答案
- 2025年港澳联考真题卷子及答案
- 重难点22 立体几何中的外接球、内切球问题(举一反三专项训练)(全国通.用)(原卷版)-2026年高考数学一轮复习举一反三系列
- 注塑车间安全生产培训内容
- 福建省莆田市擢英中学2026届九年级英语第一学期期末联考试题含解析
- 2025年中国功能手机行业市场全景分析及前景机遇研判报告
- 巡察课件讲稿
- 小儿急性呼吸衰竭课件
- 2024~2025学年北京市大兴区八年级下学期期中考试数学试卷
评论
0/150
提交评论