1

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

http://i.stack.imgur.com/Qx2cl.png

4

2 回答 2

2

您使用的双三次代码一定有问题。这是我使用 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')

编辑:显然 Python 的 Bicubic 也不是最好的。以下是我在 Paint Shop Pro 中能够使用与上述大致相同的步骤手动完成的操作。

Paint Shop Pro 中的双三次

于 2012-07-24T02:08:41.087 回答
0

虽然双三次插值有时会产生超出原始范围的插值(你能验证这是否发生在你身上吗?)看起来你确实可能有一个错误,但如果不看代码就很难说。作为一般规则,双三次解应该比最近邻解更平滑。

编辑:我收回这一点,我在您的图像中看不到原始范围之外的插值值。不过,我认为奇怪的部分是你在使用双三次时得到的“锯齿状”,你可能需要仔细检查一下。

于 2012-07-23T17:49:17.537 回答