图匹配算法

目录

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倍,或者调换任意结果点的位置,均能完成匹配】图匹配算法_第1张图片
  • 但是将只要任何一个值,不是同比例的放大,比如最后一个值变为(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()

效果如下:图匹配算法_第2张图片

 

 

你可能感兴趣的:(机器学习,#图匹配算法)