Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python interp1d类型=”;“线性”;给出不精确的结果_Python_Scipy_Scaling_Interpolation - Fatal编程技术网

Python interp1d类型=”;“线性”;给出不精确的结果

Python interp1d类型=”;“线性”;给出不精确的结果,python,scipy,scaling,interpolation,Python,Scipy,Scaling,Interpolation,我注意到interp1d给出的结果可能是错误的。 至少这些结果与Gimp和Photoshop中模拟过程的结果不同。Gimp和Photoshop的结果几乎相同。 也许这与scipy代码中的一些舍入有关 你知道如何消除这些差异吗?我有理由怀疑图形软件的结果更接近完美 在以下所有情况下,我只使用1行像素并执行水平缩放。为了清晰起见,图像包含更多行 这是非常奇特的原始图像(#000000像素均匀分布在#0000FF背景上): 未缩放图像 下面是scipy缩放结果以及gimp和Photoshop的结果。

我注意到interp1d给出的结果可能是错误的。 至少这些结果与Gimp和Photoshop中模拟过程的结果不同。Gimp和Photoshop的结果几乎相同。 也许这与scipy代码中的一些舍入有关

你知道如何消除这些差异吗?我有理由怀疑图形软件的结果更接近完美

在以下所有情况下,我只使用1行像素并执行水平缩放。为了清晰起见,图像包含更多行

这是非常奇特的原始图像(#000000像素均匀分布在#0000FF背景上):

未缩放图像

下面是scipy缩放结果以及gimp和Photoshop的结果。我在上述软件以及python插值中尝试了许多不同的缩放选项。实际上,在这个非常激进的情况下,不同类型的缩放(立方、线性)在scipy中给出相同的结果

(您可能需要在浏览器中放大图像。我不想执行其他缩放以不影响原始结果)

gimp/scipy type=“linear”

scipy-linear/photoshop/scipy-cubic

配置文件 (我剪下了没有意义的纯蓝色长间隔)

在剖面图上,问题不太明显——特别是在gimp scipy的情况下。在位图上,差异非常明显。中间线完全重叠,但我们越往两边移动,就越能看到距离上的差异。如何获得更合适的“gimp样”结果? 对我来说,问题不在于像素的值,而是暗像素之间的距离。我对线性插值很满意,不需要立方,但我把它包括在了科学(和比较)问题中

用于插值的我的代码

import numpy as np
from scipy.interpolate import interp1d
import pygame

def splineDecodeColors2(oldchain,newchain):
   L0,L1 = len(oldchain[0]),len(newchain[0])
   chain0 = np.array(oldchain)
   x0 = np.linspace(0, L0-1, L0)
   chain1 = np.array(newchain)


   for color in xrange(3):
     try:
        f = interp1d(x0, chain0[color], kind= 'linear')
        x  = np.linspace(0, L0-1, L1)
        chain1[color] = f(x).round()
     except ValueError, error:
        print error # possibly len(chain)==1
        chain1[color]=chain0[color]


   return chain1.T



def saveToPNG(img,name):
    name=str(name)
    img = np.array([img,img,img])
    img  = np.rot90(img,3)
    pygame.image.save(pygame.surfarray.make_surface(img),name+".png")



def main():
    a = np.array([[ 0., 0., 0.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 0.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 0.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 0.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 0.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 0.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 0.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 0.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.], [ 0., 0., 255.]]).T

    b= np.zeros([3,592])
    c = splineDecodeColors2(a,b)
    saveToPNG(c,"interlpolated")

if __name__ == '__main__':
    main()

你能告诉我如何重现结果吗?根据要求,我更新了代码以重现结果(只需复制+粘贴并运行)。你的代码只考虑最左边和最右边像素的半像素宽,因为你没有将数据点放在像素的中心。interp1d工作正常,但您要求它做的不是您试图做的事情。@pv。谢谢你的建议很有道理,但我不确定如何以像素为中心进行数据处理。需要更改的是“np.linspace”行吗?但是,怎么做呢?我试图通过附加额外的条目来增加输入数组的大小,但它也不能给出正确的结果。另外,如果你能把你的答案作为一个单独的帖子,我可以把它标记为anwser。