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

使用DPT-Large生成Midas深度图时锐边出现异常线条的解决咨询

问题:DPT-Large生成深度图时缩放图像出现白色线条伪影

我使用DPT-Large模型生成深度图时,发现当输入缩放至600x413尺寸的图像时,生成的深度图背景山脉上方会出现白色小线条伪影;但输入原始尺寸(1148x790)的图像时无此问题。该问题在官方演示页面和本地克隆代码运行时均能复现。

我无法修改Midas模型本身,只能通过预处理或后处理操作来解决,希望得到可行的替代方案(不想仅依赖原始尺寸图像)。


可行解决方案

一、预处理优化:调整缩放逻辑

DPT模型的输入尺寸需要与内部特征图的下采样倍数(常见为8、16)对齐,600和413都不是这类倍数,容易导致特征拼接时出现伪影。

  • 对齐缩放尺寸到模型兼容倍数:
    将图像缩放至最近的、能被8或16整除的尺寸,比如把600x413调整为600x416(416是16的倍数),或者592x416(两者均为16的倍数)。示例代码:

    from PIL import Image
    
    img = Image.open("your_image.jpg")
    target_width = 600
    # 计算对齐到16倍数的高度
    target_height = (img.height * target_width // img.width + 15) // 16 * 16
    resized_img = img.resize((target_width, target_height), Image.Resampling.LANCZOS)
    
  • 使用高质量缩放算法:
    缩放时优先选择LANCZOS这类抗锯齿算法,避免低质量缩放带来的边缘失真被模型放大成伪影。

二、后处理修复:清除伪影

如果已经生成带伪影的深度图,可以通过简单图像处理操作去除白色线条:

  • 模糊+阈值过滤:
    先做轻度模糊消除细微噪点,再过滤异常高亮区域。示例代码:

    import cv2
    import numpy as np
    
    depth_map = cv2.imread("depth_map.png", cv2.IMREAD_GRAYSCALE)
    # 轻度高斯模糊
    blurred = cv2.GaussianBlur(depth_map, (3,3), 0)
    # 设定阈值,替换高亮线条为周围像素均值
    threshold = 240  # 根据自身深度图亮度调整
    mask = blurred > threshold
    depth_map[mask] = cv2.medianBlur(depth_map, 5)[mask]
    cv2.imwrite("fixed_depth_map.png", depth_map)
    
  • 形态学开运算:
    通过先腐蚀再膨胀的操作,去除细小的高亮线条:

    import cv2
    import numpy as np
    
    depth_map = cv2.imread("depth_map.png", cv2.IMREAD_GRAYSCALE)
    # 创建结构元素
    kernel = np.ones((2,2), np.uint8)
    # 开运算清除伪影
    fixed_depth = cv2.morphologyEx(depth_map, cv2.MORPH_OPEN, kernel)
    cv2.imwrite("fixed_depth_map.png", fixed_depth)
    

三、额外尝试

在官方示例的预处理环节,尝试给输入图像增加轻度高斯模糊,或者微调归一化参数,减少输入的高频噪声,也可能降低伪影出现的概率。


内容的提问来源于stack exchange,提问作者Laurent Claessens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:40:48