图像分析曲线拟合

Dr.*_*ulu 6 python image-processing curve-fitting

我有一堆像这样的图像:

在此输入图像描述

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

有关Python库的任何提示可能有所帮助或任何其他方法?谢谢 !

Tho*_*anz 6

我将您的图像保存到文件中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()
Run Code Online (Sandbox Code Playgroud)

产生这个情节:

Ausgabe

然后,您可以做的xsys任何你想要的.也许你应该将这段代码放在一个返回xs和ys左右的函数中.

人们可以通过在每列左右安装高斯人来提高精度.如果你真的需要它,请告诉我.