Python interp1d类型=”;“线性”;给出不精确的结果
我注意到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样”结果? 对我来说,问题不在于像素的值,而是暗像素之间的距离。我对线性插值很满意,不需要立方,但我把它包括在了科学(和比较)问题中 用于插值的我的代码Python interp1d类型=”;“线性”;给出不精确的结果,python,scipy,scaling,interpolation,Python,Scipy,Scaling,Interpolation,我注意到interp1d给出的结果可能是错误的。 至少这些结果与Gimp和Photoshop中模拟过程的结果不同。Gimp和Photoshop的结果几乎相同。 也许这与scipy代码中的一些舍入有关 你知道如何消除这些差异吗?我有理由怀疑图形软件的结果更接近完美 在以下所有情况下,我只使用1行像素并执行水平缩放。为了清晰起见,图像包含更多行 这是非常奇特的原始图像(#000000像素均匀分布在#0000FF背景上): 未缩放图像 下面是scipy缩放结果以及gimp和Photoshop的结果。
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。