APP下载

一种利用特征点检测实现可交互式地图的方法

2018-08-03奚家泉

数字通信世界 2018年7期
关键词:角点斑点纸质

奚家泉

(上海邮电设计咨询研究院有限公司,上海 200050)

1 引言

传统纸质地图是融合科学和艺术于一体的重要测绘成果,在经济建设、国防建设、科研教育和百姓生活中发挥着重要的作用。相对于电子地图、虚拟地理环境等新型地图,纸质地图有使用方便、便于携带、无需外设等优点。但相比于网络电子地图而言竞争劣势也比较明显:首先纸质地图由于受版面限制,内容单一有限,无法承载丰富的数据量;其次,纸质地图表现形式单调,只能附加文字和图片;第三,单向资讯传播,无法实现与读者间的信息交互;第四,纸质地图更新周期长,地图出版后新的内容无法实时更新。

2 可交互地图的设计思路

本文提出一种交互式地图的设计思路,通过手机APP拍照来实现纸质地图的位置匹配,进而实现加载专题信息,数据回传等可交互式应用。程序主要分为三个模块,纸质地图初始化模块、特征点识别匹配模块以及专题信息加载模块。其中特征点匹配模块是应用的重点和难点。可交互式地图的主要功能如下:

(1)地图识别和匹配:手机摄像头对准纸质地图拍照,手机实景画面中加载专题位置标签,点击标签可以浏览专题的详细信息。

(2)加载专题信息:采用文字、全景图片、模型、音视频等方式展现专题信息,方便工程人员掌握实时内容。

(3)纸质地图初始化:对现有的纸质地图进行拍照以及特征点提取、存储。

(4)位置标签初始化:对地图范围内的分类别进行标签化,用来关联纸质地图和专题信息。

可交互式地图的应用场景包括区域地质地貌、区域地下空间、旅游景点宣传、广告位宣传、政府单位办事指南等。

3 特征点检测技术

特征检测的方法很多[1],主要包括颜色特征、纹理特等、形状特征以及局部特征点等。其中局部特征点具有很好的稳定性,不容易受外界环境的干扰;局部特征点主要有斑点与角点,斑点通常是指与周围有着颜色和灰度差别的区域,如草原上的一棵树或一栋房子。斑点是一个区域,角点是图像中一边物体的拐角或者线条之间的交叉部分。

在技术实现上,斑点检测的主要原理是检测出图像中比它周围像素灰度值大或比周围灰度值小的区域[2]。一般有两种方法来实现这一目标:第一种基于求导的微分方法,这类的方法称为微分检测器;如高斯拉普拉斯(Laplace of Gaussian,LOG)算子检测图像斑点;第二种基于局部极值的分水岭算法。如OPENCV中的斑点检测算子。

在技术实现上,角点检测算法通常有三种方法[3]:第一种基于灰度图像检测,又可分为基于梯度、基于模板和基于模板梯度组合3类方法;第二种基于二值图像的角点检测和第三种基于轮廓曲线的角点检测。

4 方法实现

传统地图在实用过程中会有褪色、变形、褶皱,在拍摄和匹配过程中会产生倾斜角度、旋转、亮度差异等问题,因此本文提出的交互式地图匹配方法采用的是SURF特征点检测方法,同时在计算匹配度方面,应用了特征距离筛选经验数值,最终达到较高的匹配比例,同时性能和时间方面也满足了程序的应用需求。

4.1 地图样例

纸质地图采用的是中国行政地图,有褪色和褶皱现象,如下图所示:

图1 纸质地图

图2 测试1

图3 测试2

4.2 核心算法

static void calcLayerDetAndTrace(const Mat& sum,int size,int sampleStep,Mat& det,Mat& trace){

const int NX=3,NY=3,NXY=4;

const int dx_s[NX][5]={{0,2,3,7,1},{3,2,6,7,-2},{6,2,9,7,1}} ;

const int dy_s[NY][5]={{2,0,7,3,1},{2,3,7,6,-2},{2,6,7,9,1}} ;

const int dxy_s[NXY][5]={{1,1,4,4,1},{5,1,8,4,-1},{1,5,4,8,-1},{5,5,8,8,1}} ;

SurfHF Dx[NX],Dy[NY],Dxy[NXY];

if(size > sum.rows-1 || size > sum.cols-1)return ;

resizeHaarPattern(dx_s,Dx,NX,9,size,sum.cols);

resizeHaarPattern(dy_s,Dy,NY,9,size,sum.cols);

resizeHaarPattern(dxy_s,Dxy,NXY,9,size,sum.cols);

int samples_i=1+(sum.rows-1-size)/sampleStep;

int samples_j=1+(sum.cols-1-size)/sampleStep ;

int margin=(size/2)/sampleStep;

for(int i=0;i < samples_i;i++){

const int* sum_ptr=sum.ptr(i*sampleStep);

fl oat* det_ptr=&det.at< fl oat>(i+margin,margin);

fl oat* trace_ptr=&trace.at< fl oat>(i+margin,margin);

for(int j=0;j < samples_j;j++){

fl oat dx=calcHaarPattern(sum_ptr,Dx,3);

fl oat dy=calcHaarPattern(sum_ptr,Dy,3);

fl oat dxy=calcHaarPattern(sum_ptr,Dxy,4);

sum_ptr+=sampleStep;

det_ptr[j]=dx*dy-0.81f*dxy*dxy;

trace_ptr[j]=dx+dy;

}}}

4.3 应用实例

(1)原始地图特征点提取

程序匹配的第一步是提取地图的特征点,结果如下:

图4 特征点提取(局部)

把原始地图的特征点提取之后,持久化保存在数据库中,后续匹配时无需再次提取原始图的特征点。

(2)测试匹配

通过两次不同角度、不同距离和不同分辨率的拍照,得到两张待匹配的纸质地图照片,分别为测试1和测试2;在分别提取了特征点之后,与原始地图进行特征点匹配,结果如下:

图5 测试1匹配

图6 测试2匹配

从上图可以看出,粗略的匹配结果大量较多的误判,很难得到获取真实的位置结果。因此需要进一步应用特征距离进行筛选。

(3)特征筛选

本文选取了50张测试图片,选取了0.8,0.85,0.9,0.95四种不同的特征距离进行经验测试,最终按照需求选取了0.9作为特征距离。过滤后的匹配如下图所示:

图7 测试1匹配过滤

图8 测试2匹配过滤

(4)性能结果

本文选取1.4*1米中国行政挂图作为原始纸质地图,目标匹配图片测试1是3000*4000分辨率手机照片,测试2是300*300分辨率手机照片,测试机是普通双核CPU,2G内存电脑,性能结果(平均)如下:

原图 测试1 测试2特征点数量 703556 27351 217匹配数量 8925 84过滤后数量 1711 23特征点提取时间(毫秒) 1350 30特征点匹配时间(毫秒) 468 230特征点过滤时间(毫秒) 22 3匹配总时间(毫秒) 1840 263

5 结束语

本文通过实例测试,获取了经验特征距离数值用来过滤特征点匹配数组,在满足性能要求的条件下取得了较好的应用效果。

猜你喜欢

角点斑点纸质
可爱的小斑点
斑点豹
四川省图书馆发布2019年阅读报告
猪身上起红斑点怎么办?
基于FAST角点检测算法上对Y型与X型角点的检测
基于边缘的角点分类和描述算法
基于圆环模板的改进Harris角点检测算法
全媒体时代纸质图书出版思考
独立书店浪漫的纸质生活
摆脱病毒