钟表识别.doc_第1页
钟表识别.doc_第2页
钟表识别.doc_第3页
钟表识别.doc_第4页
钟表识别.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

成 绩评阅人中国矿业大学2013-2014学年第二学期课程考核图像处理综合设计报告钟表识别学 号 姓 名 班 级 日 期 本人郑重声明:本人认真、独立完成了查找资料、编写程序、撰写报告等考核任务。签字:日期:2014-5-13摘要科技的发展带动了社会的发展,图片识别技术越来越受到人们的关注,随着网络技术的不断发展。如何能够更加高效的处理图像信息,方便快捷的搜索更多的资源也越来越变得紧迫。图像识别技术有着广阔的发展前景,而钟表作为图像识别中的一个分支在搜索领域也有着不可小视的作用,车牌识别技术的应用,可以帮助网络搜索获得更大的搜素范围,获得更多资源。图像钟表识别是一项利用图像中钟表时针,分针,秒针的度数与时间之间的关系求出时间的识别技术。其实现方法一般包括,图片2值化,边缘检测,hough变换求直线,求斜率,指针长短,读出时间等。1总体设计a.图片2值化和边缘检测;b.hough变换求出所需直线;c.处理数据,获得斜率,直线长度;d.得到所要时间。2各模块的实现:2.1输入待处理的原始图像和灰度化图像灰度化和二值化为接下的hough变换做预处理clc;clear;close;Q= im2double(imread(abcd.jpg);%读取图片图2.1.1原始图像I = rgb2gray(Q); % 灰度化figure,imshow(I),title(灰度图);图2.1.2灰度图像2.2hough变换求直线Hough变换求出直线,和坐标点,方便求出斜率和长度BW = edge(I,canny,0.9999); % canny算子边缘检测,去除多余边缘,减少hough变换获得的直线H,T,R = hough(BW,RhoResolution,0.5,ThetaResolution,0.5);P=houghpeaks(H,5,threshold,ceil(0.3*max(H(:); %在Hough矩阵图像中寻找前5个大于最大值0.3倍的峰值x=T(P(:,2);y=R(P(:,1); %由行、列索引转换成实际坐标lines=houghlines(BW,T,R,P,FillGap,30,MinLength,20); %合并距离小于*的线段,丢弃所有长度小于*的直线段figure,imshow(BW),hold on 图2.3hough直线图像2.3求出直线斜率,和长度。长度用于确定时针分针和秒针,斜率用于计算角度。for k=1:length(lines) %依次标出各个直线 xy=lines(k).point1;lines(k).point2; plot(xy(:,1),xy(:,2),LineWidth,2,Color,green); %绘制端点 plot(xy(1,1),xy(1,2),x,LineWidth,2,Color,yellow); plot(xy(2,1),xy(2,2),x,LineWidth,2,Color,red); len=norm(lines(k).point1-lines(k).point2);%求出各个直线长度 lend(k,1)=len;%记录各个直线长度 d(k,1)=(xy(1,2)-xy(2,2)/(xy(1,1)-xy(2,1);%记录各个直线斜率end图2.3斜率d和直线长度lend2.4求出中心点和确定直线象限中心点坐标即划分象限的原点坐标,用来判断直线属于哪一象限,求出直线象限可以有效的去除应为斜率相同导致的13或24象限的角度相同,求出时间错误的问题。X1=lines(1,1).point1;%已知4点求交点(钟表的中心点,即原点)Y1=lines(1,1).point2;X2=lines(1,2).point1;Y2=lines(1,2).point2;k1=(Y1(2)-X1(2)/(Y1(1)-X1(1);%2点式确定2条直线k2=(Y2(2)-X2(2)/(Y2(1)-X2(1);b1=X1(2)-k1*Y1(1);b2=X2(2)-k2*Y2(1);X=(b2-b1)/(k1-k2);Y=k1*X+b1;A1=Y1(1)-Y1(2);B1=X1(2)-X1(1);C1=Y1(2)*X1(1)-Y1(1)*X1(2);A2=Y2(1)-Y2(2);B2=X2(2)-X2(1);C2=Y2(2)*X2(1)-Y2(1)*X2(2);D=det(A1,B1;A2,B2);X=det(-C1 B1;-C2 B2)/D;%求解得到中心点坐标(集原点坐标)Y=det(A1 -C1;A2,-C2)/D;for k=1:length(lines)%确定直线象限if(lines(1,k).point1(1)X&lines(1,k).point1(2)Y)%1象限(因为坐标原点在左上角) f(k,1)=1; elseif(lines(1,k).point1(1)X&lines(1,k).point1(2)Y)%2象限 f(k,1)=2; elseif(lines(1,k).point1(1)Y)%3象限 f(k,1)=3; elseif(lines(1,k).point1(1)X&lines(1,k).point1(2)Y)%4象限 f(k,1)=4; elseif(lines(1,k).point1(1)X&lines(1,k).point1(2)=Y)%位于正X轴上 f(k,1)=11; elseif(lines(1,k).point1(1)=X&lines(1,k).point1(2)Y)%位于正Y轴上 f(k,1)=21; elseif(lines(1,k).point1(1)X&lines(1,k).point1(2)=Y)%位于负X轴上 f(k,1)=31; else f(k,1)=41; endend2.5用sort函数确定时针,分针,秒针。根据直线长短求出时针,分针,秒针使读数更加准确。W=lend,d,f;%构建一个n行2列的矩阵W1 = sortrows(W,2);%用sortrows函数排序确定依次确定秒针,分针,时针及其对应的斜率值W2=W1(:,2);图2.5排序后的值2.6求出时间:先前所得所有数据,求出时针,分针,秒针所对应的时间for i=1:3%取3位数(因为只有时针,分针,秒针) r(i)=atan(W2(k-i+1);%求度数 r(i)=(r(i)*180/pi); if(W3(k-i+1)=1)%根据不同象限,转换为钟表的角度 r(i)=90-r(i); elseif(W3(k-i+1)=2) r(i)=270+r(i); elseif(W3(k-i+1)=3) r(i)=270+r(i); elseif(W3(k-i+1)=4) r(i)=90-r(i); elseif(W3(k-i+1)=11) r(i)=90; elseif(W3(k-i+1)=21) r(i)=0; elseif(W3(k-i+1)=31) r(i)=270; else r(i)=180; endend T1=int8(r(1)*1/6);%计算出最终结果T2=int8(r(3)*1/6);T3=int8(r(2)*1/30);str = sprintf(%d:%d:%d, T3, T2,T1);msgbox(str)图2.6最终读数3其他图形的测试 原图灰度图 Ho

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论