数图数媒徐潞滨.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数图数媒徐潞滨

数字图像处理——时钟识别 班级:数媒1301 姓名:徐潞滨 学号:201326810522 一、算法基本原理 时钟识别,顾名思义:就是根据一张带有钟表的图片识别出钟表上所展示的时间。对于这个问题我把它分为四步处理: 图片预处理 由于一张图片中包含的圆圈和直线的信息量较大,直接进行霍夫处理要浪费大量的运算量,而且也不利于去除各种干扰。于是这里所谓的预处理就是利用canny算法先对原图进行边缘提取,一方面滤掉部分干扰,另一方面将原图转换为边缘图后只剩下主要线条信息,有利于加快处理。实验证明,用此方法有用信息丢失较少,可以采用! 找表盘 找表盘主要运用霍夫找圆,但是由于一张图里会找出很多圆,因此关键还是滤掉其他有影响的圆!这里采用的方法是找出所有用霍夫找到的圆中半径最大且整个圆都在当前图片中的那个圆作为表盘。实践证明,用这种方法能够较为准确的去除其他圆的影响并准确找到表盘所对应的圆。 找指针 找指针主要运用霍夫找线段,但是可想而知一张图里除了指针外一定还存在其他线段,而这些线段会对指针识别造成影响。因此我采用判断线段到圆心的距离小于一定的距离才默认为指针。然后对获取求得的线段进行转换为我定义的用斜率表示的线段的形式。 指针映射 由于上面求得的线段并不是严格上的指针,而是很多线段,但是如果仔细观察会发现虽然并不是严格的对应关系,但是他们会出现成簇的分组效果!即:多条线段会聚集在某一个指针左右,而这些线段的斜率和预求得指针的斜率相差不大,我正是利用它的这个特点首先根据指针与X轴正方向的夹角从小到大进行排序,然后每次遇到相邻两个线段的夹角存在较大的跳变就进行切割,最后所有的线段被分割为一些组,再利用一个特殊的公式重新计算这组所代表指针的长度: Le[num-1]=Le_ping[num-1]*0.2+Le_max[num-1]*0.8; 求时间 通过上面四步的计算我们已经能够将线段分为三组或者两组,这样再根据长短来和时分秒三个或者时分指针进行对应,再根据夹角就能求出对应的时间。 二、程序关键函数说明 Canny void cvCanny( const CvArr* image,CvArr* edges,double threshold1,double threshold2, int aperture_size=3 ); 函数 cvCanny 采用 Canny 算法发现输入图像的边缘而且在输出图像中标识这些边缘。threshold1和threshold2 当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割。 HoughCircles CvSeq *cvHoughCircles(CvArr *image,void *circle_storage,int method,double dp,double min_dist,double param1,double param2,int min_radius,int max_radius); 说明:该函数用Hough变换在二值图像中中寻找圆,成功时返回CvSeq指针。 image:输入8bit(灰度)图像,其内容可被函数所改变 circle_storage:检测到的圆存储仓,可以是内存存储仓 (此种情况下,一个线段序列在存储仓中被创建,并且由函数返回)或者是包含圆参数的特殊类型的具有单行/单列的CV_32FC3型矩阵(CvMat*). 矩阵头为函数所修改,使得它的 cols/rows 将包含一组检测到的圆。如果 circle_storage 是矩阵,而实际圆的数目超过矩阵尺寸,那么最大可能数目的圆被返回,每个圆由三个浮点数表示:圆心坐标(x,y)和半径.). method:Hough 变换方式,目前只支持CV_HOUGH_GRADIENT, which is basically 21HT, described in [Yuen03]. dp:寻找圆弧圆心的累计分辨率,这个参数允许创建一个比输入图像分辨率低的累加器。(这样做是因为有理由认为图像中存在的圆会自然降低到与图像宽高相同数量的范畴)。如果dp设置为1,则分辨率是相同的;如果设置为更大的值(比如2),累加器的分辨率受此影响会变小(此情况下为一半)。dp的值不能比1小。 min_dist:该参数是让算法能明显区分的两个不同圆之间的最小距离。 param1:用于Canny的边缘阀值上限,下限被置为上限的一半。 param2:累加器的阀值。 min_radius:最小圆半径。 max_radius:最大圆半径。 HoughLines2 CvSeq* cvHoughLines2(CvArr* image,void* line_storage,int mehtod,do

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档