图匹配算法

目录

1.子图同构算法实现图的匹配

2.利用点构建无向图


1.子图同构算法实现图的匹配

给你两个点集,如何判断两个点集是不是相同的,可以利用子图同构算法进行匹配。程序如下:

# -*- coding: utf-8 -*-
"""
Created on Thu Jun  1 11:24:23 2023

@author: whd
"""

import networkx as nx

# 创建第一个图
G1 = nx.Graph()
G1.add_edges_from([(1, 2), (1, 3), (2, 3), (3, 4)])

# 创建第二个图
G2 = nx.Graph()
#G2.add_edges_from([(10, 20), (10, 30), (20, 30), (30, 40)])
G2.add_edges_from([(30, 40),(10, 20), (20, 30), (10, 30)])

# 使用子图同构算法进行匹配
GM = nx.algorithms.isomorphism.GraphMatcher(G1, G2)

# 打印匹配结果
if GM.is_isomorphic():
    print("图匹配成功!")
    mapping = GM.mapping
    print("匹配节点映射关系:", mapping)
else:
    print("图匹配失败!")
  • 所有点放大相同倍数,变换点的位置,都能完成匹配。【比如这里的将所有的点放到10倍或者100倍,或者调换任意结果点的位置,均能完成匹配】
  • 但是将只要任何一个值,不是同比例的放大,比如最后一个值变为(10,31),则匹配失败。该算法完成的是硬性的匹配,对尺度变化和仿射均极度敏感。

2.利用点构建无向图

"""
Created on Thu Jun  1 11:17:50 2023

@author: whd
"""

import networkx as nx
import matplotlib.pyplot as plt

# 创建一个空的无向图
graph = nx.Graph()

# 添加节点
points = [(0, 5), (2, 10), (3, 6),(4,8)]
for i, point in enumerate(points):
    graph.add_node(i, pos=point)  # 将点坐标作为节点属性保存

# 添加边
# 这里可以根据需要定义边的连接关系,例如根据距离或其他几何条件来决定是否添加边
# 这里以连接所有节点为例,将所有节点两两之间都添加边
for i in range(len(points)):
    for j in range(i + 1, len(points)):
        graph.add_edge(i, j)

# 可视化图
pos = nx.get_node_attributes(graph, 'pos')
nx.draw(graph, pos=pos, with_labels=True, node_size=200)
plt.show()

效果如下:

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无敌三角猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值