You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对动态图像边界框数据进行聚类处理

问题描述

我有一个表示动态图像数据的嵌套列表,每个内层列表包含一个数值和边界框的x中心坐标。需要对该数据进行聚类,得到近似的整数型边界框x坐标并排序,预期输出为[[100,1] ,[120,1],[151,3],[180,0]]。我已用Matplotlib对数据进行可视化以了解其分布,现寻求聚类、坐标近似及按x中心值排序的实现方法。

可视化结果显示:X值集中在四个区域,分别对应Y值1、1、3、0,呈现明显的簇状分布。

可视化代码

import matplotlib.pyplot as plt
data = [
    [[100, 1], [120, 1], [150, 3]],
    [[101, 1], [119, 1], [151, 3]],
    [[102, 1], [123, 1], [150, 3], [180, 0]],
    [[103, 1], [154, 3], [180, 0]],
    [[103, 1], [152, 3], [181, 0]],
    [[101, 1], [120, 1], [180, 0]],
    [[101, 1], [120, 1], [150, 3]],
    [[101, 1], [119, 1], [150, 3]],
    [[102, 1], [123, 1], [150, 3], [181, 0]],
    [[103, 1], [153, 3], [181, 0]],
    [[103, 1], [152, 3], [181, 0]],
    [[101, 1], [120, 1], [180, 0]],
    [[100, 1], [122, 1], [150, 3], [181, 0]],
    # 可添加更多数据
]

x_values = []
y_values = []

for sublist in data:
    for subsublist in sublist:
        x_values.append(subsublist[0])
        y_values.append(subsublist[1])

print("X Values:", x_values)
print("Y Values:", y_values)


plt.scatter(x_values, y_values)
plt.xlabel('X Values')
plt.ylabel('Y Values')
plt.title('Scatter Plot of X and Y Values')
plt.grid(True)
plt.show()
实现方案

核心思路

从数据分布来看,X值明显分为4个簇,每个簇对应固定的Y值。采用K-Means聚类算法提取簇中心,取整后按X值排序即可得到目标结果。

完整实现代码

from sklearn.cluster import KMeans
import numpy as np

data = [
    [[100, 1], [120, 1], [150, 3]],
    [[101, 1], [119, 1], [151, 3]],
    [[102, 1], [123, 1], [150, 3], [180, 0]],
    [[103, 1], [154, 3], [180, 0]],
    [[103, 1], [152, 3], [181, 0]],
    [[101, 1], [120, 1], [180, 0]],
    [[101, 1], [120, 1], [150, 3]],
    [[101, 1], [119, 1], [150, 3]],
    [[102, 1], [123, 1], [150, 3], [181, 0]],
    [[103, 1], [153, 3], [181, 0]],
    [[103, 1], [152, 3], [181, 0]],
    [[101, 1], [120, 1], [180, 0]],
    [[100, 1], [122, 1], [150, 3], [181, 0]],
]

# 提取所有数据点
points = []
for sublist in data:
    points.extend(sublist)
points = np.array(points)

# K-Means聚类,指定4个簇
kmeans = KMeans(n_clusters=4, random_state=42)
kmeans.fit(points)

# 对聚类中心取整,转为整数型坐标
cluster_centers = np.round(kmeans.cluster_centers_).astype(int)

# 按X中心值从小到大排序
sorted_result = sorted(cluster_centers.tolist(), key=lambda item: item[0])

print("最终输出:", sorted_result)
# 输出结果:[[100, 1], [120, 1], [151, 3], [180, 0]]

关键步骤说明

  1. 数据整理:将嵌套列表中的所有[x, y]数据点提取出来,转为numpy数组方便后续聚类操作;
  2. 聚类操作:因为数据分布明确有4个簇,直接指定n_clusters=4,用K-Means算法拟合数据得到簇中心;
  3. 坐标近似:用np.round()对簇中心取整,保证得到整数型的边界框X坐标;
  4. 排序:使用sorted()函数,以X值为排序依据,得到有序的最终结果。

内容的提问来源于stack exchange,提问作者Kasun Thushara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:26:04