角点检测 深度学习_旷视科技姚聪博士:深度学习时代的文字检测与识别技术...

转载于:AI科技评论(aitechtalk)

作者:旷视科技

AI 科技评论按:随着深度学习的兴起和发展,计算机视觉领域发生了极大的变化。作为计算机视觉中一个重要的研究课题,场景文字检测和识别也无法避免地被这股浪潮席卷,一起进入了深度学习的时代。近年来,这个问题的研究者们都共同见证了思维、方法和性能方面的巨大变化,本次公开课的嘉宾将与大家分享相关内容。

分享嘉宾:

姚聪,于华中科技大学电信学院获得学士和博士学位,其主要研究方向为自然场景文字检测和识别。在国际重要期刊IEEE TPAMI, IEEE TIP以及顶级会议CVPR、ICCV和ECCV等上发表论文十余篇。目前在旷视科技(Face++)担任云服务业务算法负责人,主持自然场景OCR、人脸活体检测等技术的研发工作,为FaceID互联网身份验证服务、Face++开放平台等提供算法支持。

公开课回放地址:

http://www.mooc.ai/open/course/605

分享主题:深度学习时代的文字检测与识别技术

分享提纲:

  • 背景与概述
  • 场景文字检测与识别的近期进展
  • 未来趋势与潜在方向
  • 典型应用

雷锋网 AI 研习社将其分享内容整理如下:

背景与概述

视觉识别中,文字为什么如此重要?有两个原因,分别是作为载体的文字和作为线索的文字。

  • 文字作为载体
3f048641ca51be5aba3c599012a89396.png

首先,文字并非自然产生,而是人类的创造物,天生包含着丰富而准确的高层语义信息,传达人类的思想和情感,这是一般的图像或者视频信息很难直接描述的,但是文字可以做到。比如《史记》,通过它可以了解两千年前的某个历史事件相关的人物、时间和地点。

  • 文字作为线索
330e9f3eda35901bb1f53f421250019d.png

其次,文字是视觉识别的重要线索。如上所示,这是一张街景图像,有建筑物,有植物;如果进一步提问,图像拍摄地点是哪儿,光靠以上信息无从得知,而移除中间的灰色掩膜,会发现这是「中关村广场购物中心」。借助文字信息可以精确获知图像的拍摄地点。由此可知,文字与其他视觉线索(边缘、颜色、纹理等)有着非常强的互补作用,通过文字检测和识别,可以获得更丰富、准确的信息。

  • 定义

那么,从研究角度讲,如何界定文字检测与识别问题呢?

8c2cac742debe644e218dc33e0b4ef58.png

简单来讲,文字检测是指通过算法计算判断自然场景中在单词或者文字行层面是否含有文字实例(如果有,则标出位置)的过程。

d5edf7e742325f8d778309370fc42167.png

文字识别则更进一步,它在文字检测基础之上把文字区域转化为计算机可读取和编辑的符号的过程。

  • 挑战

目前,文字检测与识别面临诸多挑战。首先,它与传统 OCR(光学字符识别)有所区别,因自然场景之中文字变化非常之多,如下所示,左边是一张典型的扫描文档图像,右边则是自然场景中采集的多张图像。

8e93ec0c9b0fd63f4efe5c77fbff2509.png

通过对比可以发现,左图的背景非常干净,右图的背景非常杂乱;左边字体非常规整,右边则千变万化 ;左边布局较为平整统一,右边则多元复杂,缺乏规范;左边颜色单调,右边颜色种类繁多。

总体而言,文字检测与识别存在三个方面的重大挑战:

1)场景文字的多样性。如文字的颜色、大小、方向、语言、字体等。

d8ec9d532c32514a0cc42faf8231125b.png

2)图像背景的干扰。日常生活中随处可见的信号灯、指示标、栅栏、屋顶、窗户、砖块、花草等局部来看和文字有一定相似性,这为文字检测与识别过程带来很大干扰。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import cv2 as cv import numpy as np """"" cv2.cornerHarris() 可以用来进行角点检测。参数如下: • img - 数据类型为 float32 的输入图像。 • blockSize - 角点检测中要考虑的领域大小。 • ksize - Sobel 求导中使用的窗口大小 • k - Harris 角点检测方程中的自由参数,取值参数为 [0,04,0.06] """"" src_inital = cv.imread("E:/opencv/picture/building.jpg") src = cv.cvtColor(src_inital,cv.COLOR_BGR2GRAY) src = np.float32(src) dst = cv.cornerHarris(src,3,3,0.04) #R值是由det(M)-K(trace(M))*(trace(M)),当该点是角点时,该点所对应的R值就会很大,通过设置对R的阈值,就可以筛选得到角点 #这里的dst就是R值构成的灰度图像,灰度图像坐标会与原图像对应,R值就是角点分数,当R值很大的时候 就可以认为这个点是一个角点 print(dst.shape) src_inital[dst>0.08*dst.max()]=[0,0,255] """"" src_inital[dst>0.08*dst.max()]=[0,0,255] 这句话来分析一下 dst>0.08*dst.max()这么多返回是满足条件的dst索引值,根据索引值来设置这个点的颜色 这里是设定一个阈值 当大于这个阈值分数的都可以判定为角点 dst其实就是一个个角度分数R组成的,当λ1和λ2都很大,R 也很大,(λ1和λ2中的最小值都大于阈值)说明这个区域是角点。 那么这里为什么要大于0.08×dst.max()呢 注意了这里R是一个很大的值,我们选取里面最大的R,然后只要dst里面的值大于百分之八的R的最大值  那么此时这个dst的R值也是很大的 可以判定他为角点,也不一定要0.08可以根据图像自己选取不过如果太小的话 可能会多圈出几个不同的角点 """"" cv.imshow("inital_window",src_inital) cv.waitKey(0) cv.destroyAllWindows() 目标: 理解Harris角点检测的概念 使用函数cv2.cornerHarris(),cv2.cornerSubPix() 原理: Harris 角点检测的方法大概原理就是建立一个窗口区域,然后以当前窗口为中心向各个方向进行偏移。 如上图所示,第一个窗口向各个方向偏移的时候,像素值没有变化,因为窗口偏移的时候没有遇到任何边缘信息。 第二个图,窗口当中有一个直线(即block是在边缘上),如果当前窗口进行上下的移动,也没有像素值发生变化(在其他方向上灰度值也会变化)。 第三个图,窗口覆盖了一个“拐角”,如果窗口进行偏移,任何方向上都会有像素变化。 所以,第三张图片判断为检测到角点。 判断特征点是否为角点的依据:R只与M值有关,R为大数值正数时特征点为角点,R为大数值负数时为边缘,R为小数值时为平坦区 寻找R位于一定阈值之上的局部最大值,去除伪角点。 方向导数IxIx和IyIy可以使用cv2.Sobel()函数得到 Harris角点检测的结果是灰度图,图中的值为角点检测的打分值。需要选取合适的阈值对结果进行二值化来检测角点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值