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

如何使用Python计算图像内无方程曲线对应给定点的数值或近似值

Python实现算图曲线数值查询的分步方案
  • 第一步:完成像素坐标与物理坐标的映射
    先定位算图坐标轴的四个基准点:找到x轴最小值、最大值分别对应的像素坐标,y轴最小值、最大值分别对应的像素坐标。如果图片是无畸变的正视图,直接用线性公式换算即可,注意图片的像素y轴默认从上到下递增,要和物理坐标的y轴(通常从下到上递增)做翻转处理;如果存在透视变形,用OpenCV的透视变换接口先把图片校正为正视图再做换算。
  • 第二步:提取每条曲线的离散点集
    如果不同曲线颜色区分明显,可以用OpenCV的颜色阈值分割功能自动提取每条曲线的像素点,过滤噪声后按曲线的数值打标签;如果颜色区分度低,可以用本地标注工具手动采样每条曲线的坐标点,按曲线数值分组存储。所有点集提取完成后,用样条插值给每条曲线生成连续的插值函数,方便后续查询。
  • 第三步:实现任意点的数值计算逻辑
    输入指定(x,y)后:
    1. 固定x值,遍历所有曲线的插值函数,拿到每条曲线在该x下对应的y值,和对应曲线的数值标签一起按y值从小到大排序
    2. 判断输入的y落在排序后的哪两个y值区间内,对区间两端的曲线数值做线性插值即可得到近似值;如果y值小于所有曲线的对应y值或大于所有曲线的对应y值,直接返回最接近的边界曲线数值即可。

核心代码参考(依赖numpy、scipy)

import numpy as np
from scipy.interpolate import interp1d

# 示例数据:已提取的两条曲线点集,分别对应数值10、20
curve_10 = np.array([[0, 1], [1, 2], [2, 3.5], [3, 6]])
curve_20 = np.array([[0, 2], [1, 3.5], [2, 5.7], [3, 8]])

# 生成曲线的三次样条插值函数
f10 = interp1d(curve_10[:,0], curve_10[:,1], kind='cubic')
f20 = interp1d(curve_20[:,0], curve_20[:,1], kind='cubic')

def get_curve_value(input_x, input_y):
    y_10 = f10(input_x)
    y_20 = f20(input_x)
    # 边界处理
    if input_y <= y_10:
        return 10.0
    if input_y >= y_20:
        return 20.0
    # 区间内线性插值
    return 10 + (20 - 10) * (input_y - y_10) / (y_20 - y_10)

# 测试调用
print(get_curve_value(1.5, 3.8))

优化建议

如果曲线数量较多,可以把所有曲线的插值函数和对应数值标签存在同一个列表里,每次查询时统一遍历排序,不需要单独写每个曲线的判断逻辑。

内容的提问来源于stack exchange,提问作者Ana Cláudia Faria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 20:18:05