Image processing 为什么我的离散数据双三次插值看起来很难看?

Image processing 为什么我的离散数据双三次插值看起来很难看?,image-processing,bicubic,Image Processing,Bicubic,我有一个128x128高程数据数组(从-400m到8000m的高程用9种颜色显示),我需要将其调整为512x512。我用了双三次插值,但结果看起来很奇怪。在图片中,您可以看到原始的、最近的和双三次的。注意:仅插值高程数据,而不插值颜色本身(保留色域)。在双三次图像上看到的这些伪影是我的错误插值代码造成的还是离散(9步)数据插值造成的 虽然双三次插值有时会生成超出原始范围的插值值(您能验证这是否发生在您身上吗?)。作为一般规则,双三次解应该比最近邻解更平滑 编辑:我收回这一点,我在图像中没有看到超

我有一个128x128高程数据数组(从-400m到8000m的高程用9种颜色显示),我需要将其调整为512x512。我用了双三次插值,但结果看起来很奇怪。在图片中,您可以看到原始的、最近的和双三次的。注意:仅插值高程数据,而不插值颜色本身(保留色域)。在双三次图像上看到的这些伪影是我的错误插值代码造成的还是离散(9步)数据插值造成的


虽然双三次插值有时会生成超出原始范围的插值值(您能验证这是否发生在您身上吗?)。作为一般规则,双三次解应该比最近邻解更平滑


编辑:我收回这一点,我在图像中没有看到超出原始范围的插值。不过,我认为奇怪的是,当你使用双三次曲线时,你会发现“锯齿状”,你可能需要仔细检查一下。

你使用的双三次曲线代码一定有问题。下面是我对Python的结果:

外部周围的黑色边框是由于铃声导致结果超出调色板的位置

以下是制作上述内容的程序:

from PIL import Image
im = Image.open(r'c:\temp\temp.png')

# convert the image to a grayscale with 8 values from 10 to 17
levels=((0,0,255),(1,255,0),(255,255,0),(255,0,0),(255,175,175),(255,0,255),(1,255,255),(255,255,255))
img = Image.new('L', im.size)
iml = im.load()
imgl = img.load()
colormap = {}
for i, color in enumerate(levels):
    colormap[color] = 10 + i
width, height = im.size
for y in range(height):
    for x in range(width):
        imgl[x,y] = colormap[iml[x,y]]

# resize using Bicubic and restore the original palette
im4x = img.resize((4*width, 4*height), Image.BICUBIC)
palette = []
for i in range(256):
    if 10 <= i < 10+len(levels):
        palette.extend(levels[i-10])
    else:
        palette.extend((i, i, i))
im4x.putpalette(palette)
im4x.save(r'c:\temp\temp3.png')
从PIL导入图像
im=Image.open(r'c:\temp\temp.png')
#将图像转换为8个值(从10到17)的灰度
水平=((0,0255),(1255,0),(255255,0),(255,0,0),(255175175),(255,0255),(1255255),(255255))
img=图像新建('L',图像大小)
iml=im.load()
imgl=img.load()
colormap={}
对于i,枚举中的颜色(级别):
颜色映射[颜色]=10+i
宽度、高度=im尺寸
对于范围内的y(高度):
对于范围内的x(宽度):
imgl[x,y]=彩色贴图[iml[x,y]]
#使用双三次调整大小并恢复原始调色板
im4x=img.resize((4*宽,4*高),Image.BICUBIC)
调色板=[]
对于范围内的i(256):

如果10你用什么软件来做双三次插值?我用的是这家伙的库:
和这家伙的代码片段:
但两者都产生相同的结果,所以我错误地实现了它们,或者双三次插值不适合这种情况。无论如何,我要尝试第三种方法:这也是我的第一个想法,但从样本来看,我不认为是这样。是的。。。事实并非如此。不过,锯齿状是很奇怪的。海的海拔值为-9999,与零高度的陆地不同,所以灰点(海底高度)是可以的。是的,锯齿是问题所在。我会在颜色上做双三次曲线来检查例程。我可以发布代码,但不想打扰你。这看起来正是我想要的。所以双三次曲线是正确的。现在我知道问题出在哪里了,可以继续前进了。谢谢