首页 > 编程知识 正文

qpython,python地理信息可视化

时间:2023-05-05 22:30:56 阅读:29768 作者:196

基于python语言图像特征匹配及地理标记图像匹配目录基于python语言的图像特征匹配及地理标记图像匹配一, 相关概念和原理流程1.Harris角点检测Harris角点概述数学表达角点检测2.SIFT算子引言SIFT算子的特征SIFT能解决的问题SIFT算法实现步骤(二、图像特征匹配)一、实现代码)二、执行

一、相关概念和原理流程1.Harris转折点检测Harris转折点介绍

人眼对角的识别通常在局部小区域或小窗口中进行。 将该特征性的小窗口向各个方向移动,如果窗口内的区域灰度变化较大,则认为在窗口内遇到了角点。 即使该特定窗口沿图像的所有方向移动,只要窗口内的图像灰度不变化,窗口内就不存在角点; 如果窗口在一个方向上移动时,窗口中的图像灰度变化很大,而在另一个方向上没有变化,则窗口中的图像可能是一条直线。

数学表达

角点检测

2.SIFT算子引言SIFT算子(尺度不变特征变换) SIFT特征是物体上一些基于局部外观的兴趣点,与图像大小和旋转无关。 对光、噪声、微观视角的变化的容忍度也相当高。 由于这些特性,它们高度显着,比较容易提取,在母数庞大的特征数据库中,容易识别物体,误认较少。 使用SIFT特征描述对某些物体遮挡的检测率也相当高,只需要3个以上的SIFT物体特征就可以计算出位置和方位。 在当前计算机硬件速度和小型特征数据库条件下,识别速度接近实时运算。 SIFT的特点是信息量大,适合在大量数据库中快速准确地匹配。

*尺度空间不变:即图像经过尺度变换,得到图像多尺度空间表示,实现边缘、角点检测、不同分辨率的特征提取,满足特征点的尺度不变性。

SIFT算子的特点1.SIFT特征是图像的局部特征,对旋转、缩放、亮度变化保持不变性,对视角变化、仿射变换、噪声也保持一定的稳定性;

2 .区分性好,信息量丰富,适合在海量特征数据库中进行快速、准确的匹配

3 .多量性,少数物体也能生成大量的SIFT特征向量

4 .快速、优化的SIFT匹配算法能够满足实时要求;

5 .可扩展性,便于与其他形式的特征向量合作

SIFT可以解决的问题1 .目标的旋转缩放平移(RST ) ) ) ) ) ) )。

2 .图像仿射/投影变换

3 .弱光的影响

4 .部分目标屏蔽

5 .垃圾场景

6 .噪声

SIFT算法的实现步骤(1.关键点的提取

2 .在关键点上附加详细信息(局部特征)

3 .通过对特征点(上述特征向量伴随的关键点)的两种比较,找出若干相互匹配的特征点对,建立场景之间的对应关系

二、图像特征匹配(一)码frompilimportimageimportnumpyfrompylabimport * importsysfrompcv.localdescriptorsimportsiftiflen (sys sys.argv [2] else : # im1f=' ./data/SF _ view1. jpg ' # im2f=' ./data/SF _ vieew Lu building1. jpg ' Lu building2. jpg ' # im1f=' ./data/climbing _1_ small.jpg ' # im2f=' ./data/climbing _2_ small.jpg ' out_sift_1.txt ' ) l1,D1=sift.read _ features _ from _ file (out _ sift _1. txt ) figure ) subplot out_sift_2.txt'(L2,D2=sift.read _ features _ from _ file (out _ sift _2. txt ' ) subplot ) 122 )

, l2, matches, show_below=True)show() (二)运行结果 结果展示 ①特征点检测

②特征匹配结果

二、地理标记图像匹配 (一)实现代码

测试图片(已运行生成.sift文件)

代码

from pylab import *from PIL import Imagefrom PCV.localdescriptors import siftfrom PCV.tools import imtoolsimport pydot""" This is the example graph illustration of matching images from Figure 2-10.To download the images, see ch2_download_panoramio.py."""download_path = "D:/pythonCode/test/testimages" # set this to the path where you downloaded the panoramio imagespath = "D:/pythonCode/test/testimages" # path to save thumbnails (pydot needs the full system path)# list of downloaded filenamesimlist = imtools.get_imlist(download_path)nbr_images = len(imlist)# extract featuresfeatlist = [imname[:-3] + 'sift' for imname in imlist]for i, imname in enumerate(imlist): sift.process_image(imname, featlist[i])matchscores = zeros((nbr_images, nbr_images))for i in range(nbr_images): for j in range(i, nbr_images): # only compute upper triangle print('comparing ', imlist[i], imlist[j]) l1, d1 = sift.read_features_from_file(featlist[i]) l2, d2 = sift.read_features_from_file(featlist[j]) matches = sift.match_twosided(d1, d2) nbr_matches = sum(matches > 0) print('number of matches = ', nbr_matches) matchscores[i, j] = nbr_matchesprint("The match scores is: n", matchscores)# copy valuesfor i in range(nbr_images): for j in range(i + 1, nbr_images): # no need to copy diagonal matchscores[j, i] = matchscores[i, j]#可视化threshold = 2 # min number of matches needed to create linkg = pydot.Dot(graph_type='graph') # don't want the default directed graphfor i in range(nbr_images): for j in range(i + 1, nbr_images): if matchscores[i, j] > threshold: # first image in pair im = Image.open(imlist[i]) im.thumbnail((100, 100)) filename = path + str(i) + '.png' im.save(filename) # need temporary files of the right size g.add_node(pydot.Node(str(i), fontcolor='transparent', shape='rectangle', image=filename)) # second image in pair im = Image.open(imlist[j]) im.thumbnail((100, 100)) filename = path + str(j) + '.png' im.save(filename) # need temporary files of the right size g.add_node(pydot.Node(str(j), fontcolor='transparent', shape='rectangle', image=filename)) g.add_edge(pydot.Edge(str(i), str(j)))g.write_png('whitehouse.png') (二)运行结果

(1)6张图片测试

(2)9张图片测试

(三)结果分析

在进行地理标记匹配的过程中,当测试图片为6张时,可以从结果看出很好的匹配得到了对应的图片,原因可能是两组图片的差别较大,特征点差异明显,而同组之间的图片在进行拍摄时所选角度以及亮度差别较小,所以匹配结果较好。

当测试图片为9张时,可以发现,相同组图片还是可以很好的对应,但不同组图片有出现误判的情况。原因可能是因为不同组的某两张图片的特征点在图片中对应的位置想似,由于SIFT算法是匹配特征点的位置,可能导致即使是不同图片,但特征点位置在图片上的位置相同数量较多,也会导致程序误判两张图片相同。

总体来看,SIFT算法有较好的适用性,可以得出基本吻合的结果。对于旋转、尺度缩放保持不变性,对视角变化、噪声也保持一定程度的稳定性。但也有需要改进的地方,如:匹配特征点位置时是否需要根据特征点的特征进行再特征化从而从多方面(不单纯是位置)来匹配图像从而区别有较多想似特征点位置的不同图片。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。