slam需要单帧提供什么权重信息

1. 距离权重

近距离点云噪声低,权重高;远距离点云可能因稀疏性降权。
image

2. 灰度权重

高反射区域(如金属、镜面)可能导致解码错误(过曝或饱和),权重降低。
低反射区域(如黑色物体)信号弱,噪声大,权重降低。
image

3. 匹配得分权重

左右相机匹配的相似度(如NCC、SAD分数)。低匹配得分的像素点深度可能不可靠,权重降低。
计算视差时的评分构成权重图,评分越低,权重越高。
image

4. 边缘权重

物体边缘的深度可能因遮挡或视差跳跃不连续,需降低权重。可通过深度图的梯度检测边缘区域。
在深度差值法中,可以通过深度差异来定义权重,核心思想是:相邻像素的深度差异越大,当前像素属于边缘的可能性越高,其权重应越低。
image

5. 曲率权重

高曲率区域(如棱角)通常特征丰富,权重较高;平坦区域可能降权。
与边缘权重区别:

权重类型 目标 高权重区域 低权重区域 适用场景
曲率权重 增强几何特征(棱角、复杂曲面) 高曲率区(如棱角、边缘) 平坦区 三维重建、特征提取
边缘权重 抑制深度不连续导致的噪声 平坦区 深度突变区(如遮挡

image
曲率权重计算方式:
image

曲率归一化到[0,1]
curvature_normalized = (curvature - curvature.min()) / (curvature.max() - curvature.min())
曲率权重(指数增强)
k = 2.0 # 控制增强强度
weights = np.exp(k * curvature_normalized)

6.纹理权重

高纹理区域(如图案、角点)比低纹理区域更可靠。权重更大。
计算综合法向、颜色、灰度:
`
import numpy as np

def compute_pixel_texture_weight(
center_pixel,
neighbor_pixels_rgb,
neighbor_pixels_normals,
neighbor_pixels_depth,
lambda_color=0.1,
depth_threshold=0.05
):
"""
计算单个像素的纹理权重(综合颜色、法向量和深度)

参数:
    center_pixel: 中心像素的属性字典,格式为 {
        'rgb': [R, G, B], 
        'normal': [nx, ny, nz], 
        'depth': d
    }
    neighbor_pixels_rgb: 邻域像素的RGB值列表,形状为 (N, 3)
    neighbor_pixels_normals: 邻域像素的法向量列表,形状为 (N, 3)
    neighbor_pixels_depth: 邻域像素的深度值列表,形状为 (N,)
    lambda_color: 颜色梯度的权重系数
    depth_threshold: 深度突变的阈值(相对值)

返回:
    该像素的纹理权重(float,范围[0,1])
"""
# --- 1. 颜色梯度权重 ---
if len(neighbor_pixels_rgb) > 0:
    # 计算中心像素与邻域像素的灰度差(转为灰度简化计算)
    center_gray = 0.299 * center_pixel['rgb'][0] + 0.587 * center_pixel['rgb'][1] + 0.114 * center_pixel['rgb'][2]
    neighbor_gray = 0.299 * neighbor_pixels_rgb[:, 0] + 0.587 * neighbor_pixels_rgb[:, 1] + 0.114 * neighbor_pixels_rgb[:, 2]
    color_diff = np.abs(neighbor_gray - center_gray)
    w_color = 1 - np.exp(-lambda_color * np.mean(color_diff))
else:
    w_color = 0.0  # 无邻域时默认低权重

# --- 2. 法向量变化权重 ---
if len(neighbor_pixels_normals) > 0:
    normal_diff = np.linalg.norm(neighbor_pixels_normals - center_pixel['normal'], axis=1)
    w_normal = np.mean(normal_diff)
else:
    w_normal = 0.0

# --- 3. 深度一致性权重 ---
if len(neighbor_pixels_depth) > 0:
    depth_diff = np.abs(neighbor_pixels_depth - center_pixel['depth'])
    w_depth = 1.0 if np.mean(depth_diff) < depth_threshold else 0.2
else:
    w_depth = 1.0  # 无邻域时默认高权重

# --- 综合权重 ---
combined_weight = w_color * w_normal * w_depth
return np.clip(combined_weight, 0.0, 1.0)

`

7. 投影角度权重

入射角(投影仪与表面法向夹角)过大会导致解码误差,权重降低
image

posted @ 2025-07-11 18:31  aisuanfa  阅读(11)  评论(0)    收藏  举报