36、计算机视觉中的动态规划与脉动阵列立体匹配

计算机视觉中的动态规划与脉动阵列立体匹配

动态规划立体匹配

反向传播

在算法执行过程中,最终确定阶段是前向传播之后、反向传播之前的计算阶段。此阶段的目的是为反向传播选择一个起始点,该起始点必须是最终列中成本最小的节点。在三种参考系统中,起始点固定为三角形的最后一个点。对于左右参考系统,起始点是 𝜂(N - 1, 0),因为它们的指针矩阵配置相同;而中心参考系统可以从 𝜂(2N, 0) 或 𝜂(0, 0) 开始。

反向传播在最终确定状态完成后开始。从右参考系统的图像像素末端(左参考系统则相反)开始,依次读取指针数组中的指针,并将指针作为结果写入视差图。以下是用 Verilog HDL 表示的代码:

4:
begin: FINALIZATION
    //DP finalization
    state <= 5;
    //go to the next state
    pointer <= 0;
    //starting pointer
    count <= 0;
    //reset counter
end
5:
begin: BACKWARD
    //DP backward pass
    ‘ifdef LRC //LR reference
        if (count <‘WIDTH)
        begin
            pointer <= queue[‘WIDTH - 1 - count][pointer];
            //recursion
            ‘ifdef LEFT
                res[id(0,count,0)] <= queue[‘WIDTH - 1 - count][pointer];
            ‘else
                res[id(0,(‘WIDTH-count),-3)] <= queue[‘WIDTH-1-count][pointer];
            ‘endif
        ‘else
            //center reference
            if (count < 2*‘WIDTH + 1’b1)
            begin
                pointer <= queue[‘WIDTH*2 - count][pointer];
                ‘ifdef LEFT //center left reference
                    res[id(0,(‘WIDTH - ((count+pointer-1)>>1)),- 3)]
                        <= queue[2*‘WIDTH - count][pointer];
                ‘else //center right reference
                    pointer <= queue[‘WIDTH*2 - count][pointer];
                    res[id(0,(‘WIDTH - ((count-pointer-1)>>1)),- 3)]
                        <= queue[2*‘WIDTH - count][pointer];
                ‘endif
            ‘endif
            count <= count + 1’b1;
        end else begin
            state <= 6;
            //next state
            count <= 0;
        end
    end

视差结果仅写入第一个通道,另外两个通道留作其他可能的算法使用。需要注意的是,存在从缓冲区空间到图像空间的坐标转换,提供了一个组合电路来监控变量并提供适当的坐标值。

组合电路

组合电路和函数在当前模拟时间内完成,主要包括三个部分:坐标转换、权重计算和局部成本计算。
- 坐标转换 :根据给定的缓冲区坐标计算数组索引,可通过 Verilog 函数轻松实现。
- 成本计算 :需要两个距离度量,即平滑度度量和局部距离度量。
- 平滑度度量定义为两个参数的绝对值:$\mu(k, j) \triangleq |k - j|$。
- 局部距离度量使用相同的绝对值度量:$\rho(i, j) \triangleq ||I_l^R(i) - I_r^R(j)|| + ||I_l^G(i) - I_r^G(j)|| + ||I_l^B(i) - I_r^B(j)||$。

以下是相关的 Verilog 代码:

//coordinates transformation: (row,column,channel) -> id
function [‘ADDR_BITS - 1:0] id;
    input signed [9:0] row, column, channel;
begin
    id = 3*(‘WIDTH*(((‘LINES-1)>>1)+ row) +column) + channel;
end
endfunction
//absolute distance measure with threshold
function [‘DATA_BITS - 1:0] weight;
    //smoothness constraint
    input [‘DATA_BITS - 1:0] a, b;
begin
    weight = (((a > b)? (a-b) : (b - a)) < 5)?
        ((a > b)? (a-b) : (b - a)):
        ‘DMAX;
    //threshold
end
endfunction
//image intensity distance measure
function [‘DATA_BITS - 1:0] distance;
    //intensity distance
    input [‘DATA_BITS - 1:0] a, b;
begin
    distance = (a > b)? (a-b): (b - a);
    //distance measure
end
endfunction
//corresponding points for the given disparity
‘ifdef LRC
    ‘ifdef LEFT
        //left coordinate
        assign xl = ‘WIDTH-1-i;
        assign xr = ‘WIDTH-1-i-jj;
        //right coordinate
    ‘else
        //right coordinate
        assign xl = i + jj;
        //left coordinate
        assign xr = i;
        //right coordinate
    ‘endif
‘else
    assign xl = (i + jj - 1)>>1;
    //left coordinate
    assign xr = (i - jj - 1)>> 1;
    //right coordinate
‘endif
//local distance: four-neighborhood
assign ldistance =
    distance(img1[id(0,xl,0)],img2[id(0,xr,0)]) //center pixel
    + distance(img1[id(0,xl,1)],img2[id(0,xr,1)])
    + distance(img1[id(0,xl,2)],img2[id(0,xr,2)])
    //south neighborhood
    + ((‘LINES < 2)? 0:
        (((distance(img1[id(1,xl,0)],img2[id(1,xr,0)])
        //south neighbor
        + distance(img1[id(1,xl,1)],img2[id(1,xr,1)])
        + distance(img1[id(1,xl,2)],img2[id(1,xr,2)])
        //north neighborhood
        + distance(img1[id(-1,xl,0)],img2[id(-1,xr,0)]) //north neighbor
        + distance(img1[id(-1,xl,1)],img2[id(-1,xr,1)])
        + distance(img1[id(-1,xl,2)],img2[id(-1,xr,2)])
        //east neighborhood
        + (((xl < ‘WIDTH - 1) && (xr < ‘WIDTH - 1))?
            //east neighbor
            distance(img1[id(0,(xl+1),0)],img2[id(0,(xr+1),0)]) //boundary
            + distance(img1[id(0,(xl+1),1)],img2[id(0,(xr+1),1)])
            + distance(img1[id(0,(xl+1),2)],img2[id(0,(xr+1),2)]): 0)
        //west neighborhood
        + (((xl > 0) && (xr > 0))?
            //west neighbor
            distance(img1[id(0,(xl-1),0)],img2[id(0,(xr-1),0)]) //boundary
            + distance(img1[id(0,(xl-1),1)],img2[id(0,(xr-1),1)])
            + distance(img1[id(0,(xl-1),2)],img2[id(0,(xr-1),2)]): 0))>>2)));

这个模板包含一个局部距离度量,使用四个邻域的四个像素以及中心像素。要开启邻域计算,缓冲区必须至少包含三行。超出边界的像素被赋予边界值,也可以采用镜像图像或其他类型的边界定义。此外,虽然邻域定义为四邻域系统,但可以扩展为更大的邻域系统。

模拟

对代码进行了模拟和综合测试。由于强调代码的可读性而非优化,出现了许多警告信号。在实际实现之前,必须通过尽可能纠正这些警告来清理和优化代码。

使用一对 225 × 188 的图像进行测试,这些测试图像可以测试动态规划(DP)机器的各种版本。参考模式包括左参考、右参考、中心右参考和中心左参考。中心参考有两种模式,取决于视差图投影的位置:左图像平面或右图像平面。在距离度量方面,有许多变化,特别是点操作和邻域操作的性能需要进行比较。

第一次测试是 DP 机器中的点操作。将视差级别 D 限制为 32,平滑度参数限制为 5,从匹配节点到遮挡节点的惩罚设置为 10。缓冲区仅包含一行图像,自动关闭局部邻域操作,仅保留点操作。原始视差图是单通道灰度图,为了更好地渲染,将视差图转换为三通道,进行直方图均衡化和颜色编码,结果是一个彩色图,每个级别用不同的颜色表示。

以下是模拟测试的相关信息表格:
| 测试类型 | 视差级别 D | 平滑度参数 | 匹配到遮挡节点惩罚 | 缓冲区图像行数 | 操作类型 |
| ---- | ---- | ---- | ---- | ---- | ---- |
| 点操作测试 | 32 | 5 | 10 | 1 | 点操作 |

脉动阵列立体匹配

搜索空间

对于一对极线 $(I_l(\cdot, y), I_r(\cdot, y))$,立体匹配的目的是在左右参考系统的空间 ${(x, d)|x \in [0, N - 1], d \in [0, D - 1]}$ 以及中心参考系统的空间 ${(x, d)|x \in [0, 2N - 2], d \in [0, D - 1]}$ 中找到视差。三个参考系统的可测量区域是梯形,是矩形区域内的子集。

三个参考系统中梯形内部的区域定义如下:
- 右参考:$R_r = {(x_r, d)|x_r \in [0, N - 1], d \leq \min{D - 1, N - 1 - x_r}}$
- 左参考:$R_l = {(x_l, d)|x_l \in [0, N - 1], d \leq \min{D - 1, x_l}}$
- 中心参考:$R_c = {(x_c, d)|x_c \in [0, 2N - 2], d \leq \min{D - 1, x_c, N - 1 - x_c}, x_c + d = \text{even}}$

在中心参考中,只有满足 $x_c + d = \text{even}$ 的节点才能投影到两个图像上,在计算视差时,将此方程作为搜索区域的约束条件。

脉动变换

考虑一个数组 ${PE(d)|d \in [0, D - 1]}$,其中处理元素仅在相邻元素之间连接。线性卷积和视差计算本质上是相同的概念,视差是两个图像之间空间关系的结果,如果图像以流的形式提供,空间关系就变成了时间关系,这种转换可以通过倾斜垂直扫描线来实现。

下面是推导脉动阵列的 mermaid 流程图:

graph LR
    A[简单电路] --> B[拓扑和时序变换]
    B --> C[脉动阵列]

以右参考系统为例,一种简单的电路形式是将右图像广播到所有节点,左图像以流水线方式移入节点。在这个电路中,左图像按原始顺序进入阵列,右图像延迟 $D - 1$ 个时钟进入,以确保两个流正确同步。每个节点只需计算两个输入数据流以进行视差计算,节点 $PE(d)$ 执行以下操作:
$I_l^o(d) \leftarrow I_l^i(d)$
$y(d) \leftarrow T(I_r^i (d), I_l^i(d))$,$\forall d \in [0, D - 1]$

这种结构由于广播效率较低,需要修改电路拓扑使其连接规则且局部连接。修改后的节点函数增加了一个额外的虚拟输入和输出端口,将输入数据传递到输出。

电路拓扑规则后,仍然存在长组合路径,需要使用流水线技术,通过交错(在脉动术语中称为 k - 慢)增加寄存器数量,虽然电路速度减慢,但交错数据可以用于其他用途。

脉动阵列立体匹配(续)

基本电路类型

通过上述的脉动变换,最终得到了八种基本电路,可分为两种类型:
- 前向 - 后向(FB) :两个信号流方向相反。
- 后向 - 后向(BB) :两个信号流方向相同。

这些电路的多样性源于数据方向、首尾以及左右参考的二元性或自由度。

电路设计与工作原理

分别设计了 FB 和 BB 电路作为代表性电路。电路的主要组件包括执行实际计算的脉动阵列和驱动阵列的控制单元。这两个系统在公共系统时钟的同步下完美工作,除了起始信号外,无需任何握手消息,从而实现了非常快速的处理。

以下是对 FB 和 BB 电路设计与工作原理的详细说明表格:
| 电路类型 | 信号流方向 | 主要组件 | 工作特点 |
| ---- | ---- | ---- | ---- |
| FB | 相反 | 脉动阵列、控制单元 | 在公共时钟同步下工作,无需握手消息,处理速度快 |
| BB | 相同 | 脉动阵列、控制单元 | 在公共时钟同步下工作,无需握手消息,处理速度快 |

代码实现与分析

在 Verilog HDL 中实现这些电路时,关键在于理解节点的行为和数据的流动。以下是对节点行为的代码分析:

// 节点 PE(d) 的操作
Il
o(d) ←Il
i(d);
y(d) ←T(Ir
i (d), Il
i(d));
∀d ∈[0, D −1];

在这个代码中, Il o(d) 接收 Il i(d) 的数据,而 y(d) 是通过对 Ir i (d) Il i(d) 进行 T(⋅) 操作得到的中间结果。这个操作 T(⋅) 代表了前向传播的具体计算。

性能优化与改进

为了提高电路的性能,可以从多个方面进行优化:
- 拓扑结构优化 :通过调整电路的连接方式,减少长组合路径,提高数据处理的并行性。例如,将广播结构改为局部连接结构,减少信号传输的延迟。
- 流水线技术 :如前面提到的交错技术,虽然会使电路速度减慢,但可以增加寄存器数量,提高电路的稳定性和可扩展性。同时,交错的数据可以用于其他计算,提高资源的利用率。
- 距离度量改进 :可以采用更复杂的距离度量方法,如 Pott’s 模型、边缘和特征等,而不仅仅依赖于简单的强度值。这样可以提高视差计算的准确性。

以下是性能优化的步骤列表:
1. 分析当前电路的拓扑结构,找出长组合路径和瓶颈点。
2. 根据分析结果,调整电路连接方式,实现局部连接。
3. 应用流水线技术,增加寄存器数量,确保数据的正确同步。
4. 选择合适的距离度量方法,提高视差计算的准确性。

不同参考系统的应用

在实际应用中,不同的参考系统(左参考、右参考、中心参考)具有不同的特点和适用场景。
- 左参考和右参考 :适用于需要明确左右图像对应关系的场景,例如在机器人导航中,需要根据左右图像的视差来判断障碍物的位置。
- 中心参考 :具有两种模式,根据视差图投影的位置(左图像平面或右图像平面)而定。适用于需要综合考虑左右图像信息的场景,例如在三维重建中,可以通过中心参考系统更准确地计算物体的深度信息。

以下是不同参考系统的应用场景表格:
| 参考系统 | 特点 | 适用场景 |
| ---- | ---- | ---- |
| 左参考 | 明确左图像对应关系 | 机器人导航判断障碍物位置 |
| 右参考 | 明确右图像对应关系 | 机器人导航判断障碍物位置 |
| 中心参考(左投影) | 综合左右信息,投影到左图像平面 | 三维重建计算物体深度信息 |
| 中心参考(右投影) | 综合左右信息,投影到右图像平面 | 三维重建计算物体深度信息 |

总结

通过对动态规划立体匹配和脉动阵列立体匹配的研究,我们了解了它们的原理、实现方法和性能优化策略。动态规划立体匹配通过反向传播和组合电路计算视差,而脉动阵列立体匹配则通过脉动变换得到高效的基本电路。在实际应用中,可以根据具体需求选择合适的参考系统和优化方法,以提高立体匹配的性能和准确性。

以下是整个流程的 mermaid 流程图总结:

graph LR
    A[动态规划立体匹配] --> B[反向传播]
    B --> C[组合电路]
    C --> D[模拟测试]
    A --> E[脉动阵列立体匹配]
    E --> F[搜索空间确定]
    F --> G[脉动变换]
    G --> H[基本电路设计]
    H --> I[性能优化]
    I --> J[不同参考系统应用]

希望这些内容能够帮助你更好地理解计算机视觉中的立体匹配技术,并在实际应用中发挥作用。在实际开发中,可以根据具体的需求和场景,进一步优化和改进这些方法,以实现更高效、准确的立体匹配。

内容概要:本文介绍了ENVI Deep Learning V1.0的操作教程,重点讲解了如何利用ENVI软件进行深度学习模型的训练应用,以实现遥感图像中特定目标(如集装箱)的自动提取。教程涵盖了从数据准备、标签图像创建、模型初始化训练,到执行分类及结果优化的完整流程,并介绍了精度评价通过ENVI Modeler实现一键化建模的方法。系统基于TensorFlow框架,采用ENVINet5(U-Net变体)架构,支持通过点、线、面ROI或分类图生成标签数据,适用于多/高光谱影像的单一类别特征提取。; 适合人群:具备遥感图像处理基础,熟悉ENVI软件操作,从事地理信息、测绘、环境监测等相关领域的技术人员或研究人员,尤其是希望将深度学习技术应用于遥感目标识别的初学者实践者。; 使用场景及目标:①在遥感影像中自动识别和提取特定地物目标(如车辆、建筑、道路、集装箱等);②掌握ENVI环境下深度学习模型的训练流程关键参数设置(如Patch Size、Epochs、Class Weight等);③通过模型调优结果反馈提升分类精度,实现高效自动化信息提取。; 阅读建议:建议结合实际遥感项目边学边练,重点关注标签数据制作、模型参数配置结果后处理环节,充分利用ENVI Modeler进行自动化建模参数优化,同时注意软硬件环境(特别是NVIDIA GPU)的配置要求以保障训练效率。
内容概要:本文系统阐述了企业新闻发稿在生成式引擎优化(GEO)时代下的全渠道策略效果评估体系,涵盖当前企业传播面临的预算、资源、内容效果评估四大挑战,并深入分析2025年新闻发稿行业五大趋势,包括AI驱动的智能化转型、精准化传播、首发内容价值提升、内容资产化及数据可视化。文章重点解析央媒、地方官媒、综合门户和自媒体四类媒体资源的特性、传播优势发稿策略,提出基于内容适配性、时间节奏、话题设计的策略制定方法,并构建涵盖品牌价值、销售转化GEO优化的多维评估框架。此外,结合“传声港”工具实操指南,提供AI智能投放、效果监测、自媒体管理舆情应对的全流程解决方案,并针对科技、消费、B2B、区域品牌四大行业推出定制化发稿方案。; 适合人群:企业市场/公关负责人、品牌传播管理者、数字营销从业者及中小企业决策者,具备一定媒体传播经验并希望提升发稿效率ROI的专业人士。; 使用场景及目标:①制定科学的新闻发稿策略,实现从“流量思维”向“价值思维”转型;②构建央媒定调、门户扩散、自媒体互动的立体化传播矩阵;③利用AI工具实现精准投放GEO优化,提升品牌在AI搜索中的权威性可见性;④通过数据驱动评估体系量化品牌影响力销售转化效果。; 阅读建议:建议结合文中提供的实操清单、案例分析工具指南进行系统学习,重点关注媒体适配性策略GEO评估指标,在实际发稿中分阶段试点“AI+全渠道”组合策略,并定期复盘优化,以实现品牌传播的长期复利效应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值