【问题标题】:Why is my bicubic interpolation of discrete data looking ugly?为什么我的离散数据的双三次插值看起来很难看?
【发布时间】:2012-07-21 21:54:30
【问题描述】:

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

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

【问题讨论】:

  • 你用什么软件做双三次插值?
  • 我正在使用这个人的库:link
    和这个人的代码 sn-p:link
    但是两者都产生相同的结果,所以我错了实现它们或双三次插值不适合这种情况。无论如何,我要尝试第三个:link

标签: image-processing bicubic


【解决方案1】:

您使用的双三次代码一定有问题。这是我使用 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 中使用与上述大致相同的步骤手动完成的操作。

【讨论】:

  • 这看起来完全符合我的要求。所以双三次没问题。现在我知道问题出在哪里,可以继续前进。谢谢!
【解决方案2】:

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

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

【讨论】:

  • 这也是我的第一个想法,但从样本来看,我认为这里不是这种情况。
  • 是的...不是那样的。不过,锯齿状很奇怪。
  • 海的海拔值为 -9999,与零高度的陆地不同,因此灰点(海底水平)是可以的。是的,锯齿状是问题所在。我将对颜色进行双三次检查以检查例程。我可以发布代码,但不想打扰你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多