You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建拉普拉斯金字塔时如何实现一致的上采样与下采样?

拉普拉斯金字塔上下采样正确实现方案

核心实现原则

拉普拉斯金字塔的残差计算要求每一层低分辨率图上采样后的尺寸,必须和上一层高分辨率图尺寸完全一致,同时要避免下采样的混叠效应、上采样的能量损失,才能实现完美重建。

下采样实现步骤

  • 先记录输入图像的原始高、宽,作为后续对应层上采样的目标尺寸,避免通过下采样结果反推尺寸带来的不匹配问题
  • 对输入图像做边界填充:如果图像高度为奇数,在底部补1行;如果宽度为奇数,在右侧补1列,优先选择镜像填充、边缘复制填充,避免边缘突变带来的伪影
  • 对填充后的图像做高斯模糊:使用3x3或5x5高斯核进行卷积,消除下采样带来的频率混叠
  • 取模糊后图像的偶数行、偶数列,得到下采样结果,存入高斯金字塔

上采样实现步骤

  • 以上一层记录的原始尺寸为目标,创建相同尺寸的全0矩阵
  • 将下采样得到的低分辨率图像的所有像素,依次放入全0矩阵的偶数行、偶数列位置
  • 使用和下采样阶段完全相同的高斯核对矩阵做卷积,卷积结果乘以4做能量补偿(插0操作会导致整体能量降低为原来的1/4),得到最终上采样结果

示例伪代码(Python)

import cv2
import numpy as np

# 下采样方法
def gaussian_pyr_down(orig_img):
    orig_h, orig_w = orig_img.shape[:2]
    target_size = (orig_h, orig_w)
    # 边界填充为偶数尺寸
    pad_bottom = orig_h % 2
    pad_right = orig_w % 2
    padded_img = cv2.copyMakeBorder(orig_img, 0, pad_bottom, 0, pad_right, cv2.BORDER_REFLECT)
    # 高斯模糊去混叠
    blurred_img = cv2.GaussianBlur(padded_img, ksize=(5,5), sigmaX=1, sigmaY=1)
    # 下采样取偶数行列
    down_img = blurred_img[::2, ::2]
    return down_img, target_size

# 上采样方法
def gaussian_pyr_up(low_res_img, target_size):
    up_img = np.zeros(target_size, dtype=low_res_img.dtype)
    # 低分辨率像素放入偶数位置
    up_img[::2, ::2] = low_res_img
    # 高斯卷积+能量补偿
    up_img = cv2.GaussianBlur(up_img, ksize=(5,5), sigmaX=1, sigmaY=1) * 4
    return up_img

按上述流程实现后,上采样输出尺寸与上一层原始图像完全一致,直接做差即可得到拉普拉斯金字塔层,逐层累加就能完美重建原始图像。如果不需要保留边缘的原始值,也可以选择裁剪重建后图像的填充像素,得到和输入完全一致的原始尺寸图像。

内容的提问来源于stack exchange,提问作者Luis Fernández

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:24:03