python - 从 JPEG 或 png 文件中获取绘图数据

标签 python matplotlib scipy jupyter-notebook python-imaging-library

我正在编写一个从图形(JPEG)中获取绘图数据的程序。
纵轴是对数的。
我成功制作了一个将水平轴和垂直轴理解为线性(不是对数)的程序,请参阅下面的代码:

enter image description here

%matplotlib inline

from PIL import Image
from scipy import *
from pylab import *

im = array(Image.open('fig1.jpg'))

hh = im.shape[0]
ww = im.shape[2]

imshow(im)    
print(im[100,0,:])

Col = array([255,0,0])#赤
bnd = 30

yax = linspace(0.5,2e-4,hh)
xax = linspace(1,14,ww)

for i in range(hh):
    for j in range(ww):
        im[i,j,:] = 255*(any(im[i,j,:]>Col+bnd) or any(im[i,j,:]<Col-bnd))

mapim = abs(im[:,:,0]/255-1).astype(bool)

yval = array([average(yax[mapim[:,t]]) for t in range(ww)])

rlt = interp(range(100),xax,yval)

我不知道如何修改它以使其理解对数轴。
请帮帮我。

最佳答案

您只需要将 y 最大值和最小值转换为对数刻度:

ymax_lin = log10(0.5)
ymin_lin = log10(2e-4)

yax = linspace(ymax_lin,ymin_lin,hh)

并转换回线性 yval最后的值:
yval = 10**yval

完整的工作代码在这里:
%matplotlib inline

from PIL import Image
from scipy import *
from pylab import *

im = array(Image.open('fig1.jpg'))

hh = im.shape[0]
ww = im.shape[1]

imshow(im)    
print(im[100,0,:])

Col = array([255,0,0])
bnd = 30


ymax_lin = log10(0.5)
ymin_lin = log10(2e-4)

yax = linspace(ymax_lin,ymin_lin,hh)
xax = linspace(1,14,ww)

for i in range(hh):
    for j in range(ww):
        im[i,j,:] = 255*(any(im[i,j,:]>Col+bnd) or any(im[i,j,:]<Col-bnd))

mapim = abs(im[:,:,0]/255-1).astype(bool)


yval = array([average(yax[mapim[:,t]]) for t in range(ww)])

yval = 10**yval

rlt = interp(range(100),xax,yval)

关于python - 从 JPEG 或 png 文件中获取绘图数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39806992/

相关文章:

python - 如何将 python 脚本的输出(一组 float )写入文本文件?

python - 如何将多个数据框对象连接成一个字符串

python - 如何在图例中添加多边形

python - 使用 NumPy 将向量保存到 Python 文件中

python - scipy和numpy sobel梯度计算的区别

Python 命令参数

python - 在不制作文件的情况下使用 Imagemagick?

python - Matplotlib imshow/matshow 在图上显示值

python - Matplotlib 散点图轴自动缩放对于小数据值失败

python - 将模型二维拟合到 Python 中的图像