python - 图像分析曲线拟合

标签 python image-processing curve-fitting

我有一堆这样的图片:

enter image description here

没有相应的数据。我需要在蓝色曲线上自动检索大约 100 个点(通常为 x 间距)。所有曲线都非常相似,所以我需要至少 1 个像素的精度,但最好是子像素。好消息是所有曲线都从 0,0 开始到 1,1 结束,所以我们可能会忘记网格。

关于 Python 库的任何提示或任何其他方法都有帮助吗?谢谢!

最佳答案

我将您的图像保存到文件 14154233_input.png。那么这个程序

import pylab as plt
import numpy as np

# Read image from disk and filter all grayscale
im = plt.imread("14154233_input.png")[:,:,:3]
im -= im.mean(axis=2).reshape(im.shape[0], im.shape[1], 1).repeat(3,axis=2)
im_maxnorm = im.max(axis=2)

# Find y-position of remaining line
ypos = np.ones((im.shape[1])) * np.nan
for i in range(im_maxnorm.shape[1]):
    if im_maxnorm[:,i].max()<0.01:
        continue
    ypos[i] = np.argmax(im_maxnorm[:,i])

# Pick only values that are set
ys = 1-ypos[np.isfinite(ypos)]
# Normalize to 0,1
ys -= ys.min()
ys /= ys.max()

# Create x values
xs = np.linspace(0,1,ys.shape[0])

# Create plot of both 
# read and filtered image and
# data extracted
plt.figure(figsize=(4,8))
plt.subplot(211)
plt.imshow(im_maxnorm)
plt.subplot(212, aspect="equal")
plt.plot(xs,ys)
plt.show()

产生这个情节:

Ausgabe

然后您可以随心所欲地使用xsys。也许您应该将这段代码放在一个返回 xs 和 ys 左右的函数中。

可以通过在每一列左右拟合高斯分布来提高精度。如果你真的需要它,请告诉我。

关于python - 图像分析曲线拟合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14154233/

相关文章:

c# - 自动增强扫描图像

image-processing - 如何从直方图中获取阈值?

python - 将具有透明背景的图像与普通图像(非透明背景)混合后如何调整 alpha 值?

r - 如何估计一系列线性段以拟合指数曲线?

r - fitdistr() 警告与 dbeta : "In densfun(x, parm[1], parm[2], ...) : NaNs produced"

python - 对于 int __pow__ int 的 python 类型提示,如何修复 mypy 错误 "Expression has type Any [misc]"?

python - GroupBy 并将元素与 Python 中的组分位数进行比较

python - 替换列表中的子字符串

python - 使用邮箱python提取附件?

MATLAB 曲线拟合 - 最小二乘法 - 使用高次错误 "fit"