阿齐兹的PyCV学习笔记——匹配地理标记图像

本文介绍了一种基于特征匹配的地理标记图像处理方法,通过计算图像间的匹配特征数量并利用pydot工具进行可视化展示。该方法首先读取图像特征,进行两两匹配并统计匹配点数,然后依据匹配点数阈值建立图像间联系,最终生成可视化图像网络。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

匹配地理标记图像

在imlist和featlist列表中保存图像文件名,对所有组合图像进行逐个匹配,并将每对图像间的匹配特征数保存在matchscores矩阵中:

import sift

nbr_images = len(imlist)

matchscores = zeros((nbr_images,nbr_images))
for i in range(nbr_images):
    for j in range(i,nbr_images): #仅仅计算上三角
        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_matches

#复制值
for i in range(nbr_images):
    for j in range(i+1,nbr_images): #不需要复制对角线
        matchscores[j,i] = matchscores[i,j]

[pydot][7]工具包是功能强大的[GraphViz][8]图形库的Python接口,使用pydot创建一个图:

import pydot

g = pydot.Dot(graph_type='graph')

g.add_node(pydot.Node(str(0),fontcolor='transparent'))
for i in range(5):
    g.add_node(pydot.Node(str(i+1)))
    g.add_edge(pydot.Edge(str(0),str(i+1)))
    for j in range(5):
        g.add_node(pydot.Node(str(j+1)+'-'+str(i+1)))
        g.add_edge(pydot.Edge(str(j+1)+'-'+str(i+1),str(j+1)))
g.write_png('graph.png',prog='neato')

效果图:
这里写图片描述

使用pydot可视化地连接匹配的图像,为了得到图像需要使用图像的全路径,为了使图像更美观将每幅图像尺度化为缩略图形式:

import pydot

threshold = 2 #创建关联需要的最小匹配数目

g = pydot.Dot(graph_type='graph') #不使用默认的有向图
for i in range(nbr_images):
    for j in range(i+1,nbr_images):
        if matchscores[i,j] > threshold:
            #图像对中的第一幅图像
            im = Image.open(imlist[i])
            im.thumbnail((100,100))
            filename = str(i)+'.png'
            im.save(filename) #需要一定大小的临时文件
            g.add_node(pydot.Node(str(i),fontcolor='transparent',shape='rectangle',image=path+filename))

            #图像对中的第二幅图像
            im = Image.open(imlist[j])
            im.thumbnail((100,100))
            filename = str(j)+'.png'
            im.save(filename) #需要一定大小的临时文件
            g.add_node(pydot.Node(str(j),fontcolor='transparent',shape='rectangle',image=path+filename))

            g.add_edge(pydot.Edge(str(i),str(j)))

g.write_png('whitehouse.png')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值