0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的系统结合了两个视频流以提供3D视频

星星科技指导员 来源:ADI 作者:Witold Kaczurba 2023-02-02 15:09 次阅读

视频系统在消费类应用中已经无处不在,在汽车、机器人工业领域越来越普遍。这种向非消费类应用的增长主要是由于HDMI标准以及更快、更高效的DSPFPGA的引入。

本文概述了使用模拟或HDMI摄像机实现立体视觉(3D视频)的要求。它描述了一个基于 FPGA 的系统,该系统将两个视频流组合成一个 3D 视频流,以便通过 HDMI 1.4 发射器传输,以及一个基于 DSP 的系统,与从两个摄像头接收数据通常需要的带宽相比,该系统节省了 DMA 带宽。此外,它还展示了一种实现并排格式的方法,用于3D相机或需要3D视频的系统。

一般概述

立体视觉需要两个相距约5.5厘米的摄像机,这是人眼之间的典型间距。

图2所示的高级框图使用两个使用相同视频标准的同步摄像机、两个视频解码器和一个FPGA。为了确保完全相同的帧速率,摄像机必须行锁定到公共定时参考。如果没有同步,则无法在不使用外部存储器存储完整视频帧的情况下组合输出。

pYYBAGPbYcSAU-MQAAAsf2z-2Sw381.jpg?la=en&imgver=1

图2.高级框图。

图 3 显示了两个线路锁定的视频流被合并到单个立体图像中。图 4 显示了如何在不将整个视频帧保存在外部存储器中的情况下无法合并异步视频流。

poYBAGPbYciAKhJCAACa1p2VAuQ077.jpg?la=en&imgver=1

图3.合并两个同步的视频流。

pYYBAGPbYc2AV6EaAABx76AR4Os414.jpg?la=en&imgver=1

图4.如果不使用外部存储器,则无法合并异步视频流。

然后,两个同步摄像机的输出由视频解码器(如用于模拟摄像机的ADV7181D、ADV7182或ADV7186)进行数字化; 或通过HDMI接收器,如带有数字摄像机的ADV7610或ADV7611。

视频解码器和HDMI接收器使用内部锁相环(PLL)在其输出总线上产生时钟和像素数据。这意味着在数字化模拟视频或接收HDMI流时,将为两个相机生成两个独立的时钟域。此外,两个视频流可能会未对齐。这些时序差异和失调必须在FPGA等后端设备中进行补偿,将数据带到公共时钟域,然后再将两个视频图像合并为单个立体视频帧。然后,同步视频流通过支持HDMI 1.4 3D的HDMI发射器(如ADV7511或ADV7513)发送,或者呈现给DSP,例如ADSP-BF609 黑鳍金枪鱼处理器®—用于进一步处理。

时钟架构

视频解码器有两个不同的时钟源,具体取决于它们是锁定还是解锁。当视频PLL锁定到输入同步信号(视频解码器的水平同步或HDMI的TMDS时钟)时,它会生成一个锁定到输入视频源的时钟。当视频锁定丢失或PLL处于强制自由运行模式时,视频PLL不会锁定到输入的同步信号,而是产生锁定到晶体时钟的时钟输出。此外,由于LLC时钟驱动器在复位后设置为高阻抗模式,因此复位后时钟可能无法输出。

因此,如果系统具有来自视频解码器或HDMI接收器的两个或多个视频路径,则即使向两个视频解码器或HDMI接收器提供相同的晶体时钟,它也会具有两个具有不同频率和相位的不同时钟域,因为每个设备都会基于自己的PLL生成自己的时钟。

带锁定视频解码器的同步系统

对于使用两个源的典型立体视频,每个视频解码器锁定到输入的视频信号,并根据输入的水平同步或TMDS时钟生成自己的时钟。当两台摄像机同步或锁定到同一时序参考时,帧线将始终对齐。由于两个独立的视频解码器接收相同的水平同步,因此像素时钟将具有相同的像素时钟频率。这允许将两条数据路径引入一个公共时钟域,如图5所示。

poYBAGPbYdaAfbAQAABORAm-VKw844.jpg?la=en&imgver=1

图5.两个摄像机同步到一个公共参考。两个视频解码器接收相同的同步信号,因此它们也被锁定。

两个视频解码器接收相同的同步信号,因此它们也被锁定。

异步视频系统

遗憾的是,其中一个解码器可能会由于视频源信号质量差而失去锁定,如图6所示;或者相机可能会因视频链路断开而失去同步,如图7所示。这将导致两条数据路径中的频率不同,从而导致进入后端的数据量不对称。

poYBAGPbYdqAZbMCAABDV-q3cJ4106.jpg?la=en&imgver=1

图6.具有未锁定视频解码器的线锁定摄像机。

poYBAGPbYd6AY_cwAABFLxKS0JM586.jpg?la=en&imgver=1

图7.带锁定视频解码器的解锁摄像机。

通过使用中断(SD视频解码器的中断SD_UNLOCK,分量视频解码器的中断CP_UNLOCK或HDMI接收器中的TMDSPLL_LCK寄存器)可以在延迟后启动来检测丢失的视频锁定。视频解码器集成了平滑不稳定水平同步的机制,因此检测丢失的视频锁定可能需要几行时间。这种延迟可以通过控制FPGA内的丢失锁来减少。

时钟三态模式

在设计FPGA时钟资源时,重要的是要知道,默认情况下,许多视频解码器和HDMI产品在复位后将时钟和数据线置于三态模式。因此,LLC像素时钟将不适合同步复位。

两个视频流中的数据未对齐

为了简化系统并减少合并两个图像所需的内存,到达FPGA的数据应同步,以便N千M 的像素千来自第一个相机的线与 N 一起接收千M 的像素千来自第二个摄像头的线。

这可能很难在FPGA输入端实现,因为两条视频路径可能具有不同的延迟:线路锁定相机可能输出未对齐的线路,不同的连接长度可能导致未对齐,视频解码器可能会引入可变的启动延迟。由于这些延迟,预计具有线锁定摄像头的系统将具有许多未对准的像素。

线锁定相机未对准

即使是线路锁定的摄像机也可以输出未对齐的视频线。图8显示了来自两个摄像头CVBS输出的垂直同步信号。一台摄像机(同步主站)向另一台摄像机(同步从站)提供线路锁定信号。380 ns的未对准清晰可见。图9显示了视频解码器在这些摄像机输出端传输的数据。可以看到 11 像素的偏移。

4712-2-fig08.jpg?la=en&imgver=1

图8.线路锁定摄像机之间的 380 ns 视频未对准。

4712-2-fig09.jpg?la=en&imgver=1

图9.数字域中未补偿的 11 像素视频未对准。

不同的连接长度

所有电气连接都会引入传播延迟,因此请确保两个视频路径具有相同的轨道和电缆长度。

视频解码器/HDMI 接收器延迟

所有视频解码器都会引入延迟,延迟可能因启用的功能而异。此外,某些视频部分包含可能会增加随机启动延迟的元素,例如深色FIFO。使用视频解码器的典型立体系统可能具有大约5像素时钟的随机启动延迟。如图10所示,包含HDMI发射器和接收器的系统可能具有约40像素时钟的随机启动延迟。

poYBAGPbYfaAU4MJAAA7F2JTivU159.jpg?la=en&imgver=1

图 10.管道延迟测量设置。

不对中补偿

图11显示了一个系统,其中来自每个摄像头的模拟信号由视频解码器数字化。每个视频路径的数据和时钟是分开的。两个视频路径都连接到FIFO,FIFO缓冲输入数据以补偿数据错位。在输出数据时,FIFO使用来自其中一个解码器的公共时钟。在锁定系统中,两条数据路径应具有完全相同的时钟频率,确保只要摄像机被锁定并且视频解码器被锁定,就不会有FIFO溢出或下溢。

通过启用或禁用FIFO输出,控制块可保持FIFO电平,以最大程度地减少像素错位。如果补偿正确进行,FPGA模块的输出应该是与第一个像素对齐的两条数据路径。然后将该数据提供给FPGA后端用于3D格式制作。

pYYBAGPbYf-AKjhtAACieOFLH8M548.jpg?la=en&imgver=1

图 11.使用数字FIFO重新对齐视频图片。

未对准测量

两个数字化数据流之间的未对准可以在视频FIFO的输出端使用一个时钟计数器来测量,该计数器在其中一个输入信号的垂直同步(VS)脉冲上复位。图 12 显示了两个未对齐 4 像素的视频流(vs_a_in 和 vs_b_in)。计数器使用清单 1 中所示的方法测量未对准。计数从 VS1 的上升沿开始,在 VS2 的上升沿停止。

如果帧的总像素长度已知,则可以通过从帧长度中减去计数值来计算负偏斜(VS2 在 VS1 之前)。当偏差超过像素帧长度的一半时,应计算此负值。结果应用于重新调整存储在FIFO中的数据。

4712-2-fig12.jpg?la=en&imgver=1

图 12.未对准测量。

清单 1.简单的错位测量(Verilog)。

module misalign_measurement(
input wire reset,
input wire clk_in,
input wire vs_a_in,
input wire vs_b_in,
output reg [15:0] misalign,
output reg ready);

reg [15:0] cnt;
reg cnt_en, cnt_reset;
reg vs_a_in_r, vs_b_in_r;
assign vs_a_rising = vs_a_in > vs_a_in_r;
assign vs_b_rising = vs_b_in > vs_b_in_r;

always @(posedge clk_in)
begin
vs_a_in_r <= vs_a_in;
vs_b_in_r <= vs_b_in;
end

always @(posedge clk_in)
if (reset)
begin
{ ready, cnt_en } <= 2'b00;
misalign <= 0;
end else begin
if ((vs_a_in == 1'b0) && (vs_b_in == 1'b0))
{ ready, cnt_reset } <= 2'b01;
else
cnt_reset <= 1'b0;

/* beginning */
if (vs_a_rising && vs_b_rising)
begin
misalign <= 0;
{ ready, cnt_en } <= 2'b10;
end
else if ((vs_a_rising > vs_b_in) || (vs_b_rising > vs_a_in))
{ ready, cnt_en } <= 2'b01;

/* ending */
if ((cnt_en == 1'b1) && (vs_a_rising || vs_b_rising))
begin
{ ready, cnt_en } <= 2'b10; 
misalign <= vs_a_rising ? (-(cnt + 1)) : (cnt + 1);
end
end

always @(posedge clk_in) /* counter */
if ((cnt_reset) || (reset))
cnt <= 0;
else if (cnt_en)
cnt <= cnt + 1;

endmodule

从两个对齐的视频流制作 3D 视频

一旦像素、线和帧数据真正同步,FPGA就可以将视频数据形成3D视频流,如图13所示。

poYBAGPbYg6AMsSqAABgLH5KOn0685.jpg?la=en&imgver=1

图 13.实现 3D 格式的简化架构。

传入的数据由公共时钟读入内存。同步时序分析仪检查输入的同步信号并提取视频时序,包括水平前后门廊长度、垂直前后门廊、水平和垂直同步长度、水平有源线长度、垂直有源线数和同步信号极化。将此信息与当前水平和垂直像素位置一起传递给同步时序再生器,使其能够生成经过修改以适应所需 3D 视频结构的时序。应延迟新创建的计时,以确保 FIFO 包含所需的数据量。

并排 3D 视频

就内存而言,要求最低的架构是并排格式,它只需要一个 2 行缓冲区 (FIFO) 来存储来自两个视频源的行的内容。并排格式的宽度应为原始传入格式的两倍。为此,应使用双倍时钟为重新生成的同步时序提供双倍水平线长度的时钟。用于为后端计时的双倍时钟将以双倍速率清空第一个FIFO,然后清空第二个FIFO,使其能够并排放置图片,如图14所示。并排图片如图 15 所示。

pYYBAGPbYhWAO_D9AAChyGiZkoo641.jpg?la=en&imgver=1

图 14.使用简单的 FPGA 线路缓冲器并排拼接两张图片。

4712-2-fig15.jpg?la=en&imgver=1

图 15.并排 576p 图片与视频计时

结论

ADI公司的解码器和HDMI产品以及简单的后处理可以创建并实现真正的立体3D视频传输。如图所示,可以使用简单的数字块实现3D视频,而无需昂贵的内存。该系统可用于需要3D视觉的任何类型的系统,从简单的视频录制相机到基于ADSP-BF609 DSP的专用系统,可用于跟踪物体及其距离。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • dsp
    dsp
    +关注

    关注

    544

    文章

    7685

    浏览量

    344376
  • FPGA
    +关注

    关注

    1602

    文章

    21323

    浏览量

    593214
  • 机器人
    +关注

    关注

    206

    文章

    27039

    浏览量

    201416
收藏 人收藏

    评论

    相关推荐

    3d蓝光光碟破解提取左右视频方法

    的m2ts是分离式的左右眼视频,左眼的视频与2D的一样,右眼的就不同,用一般的播放器不能播放。为何要3D蓝光光碟破解左右视频?~~可能有的人
    发表于 09-21 19:29

    [视频] 无触摸的3D跟踪界面

    `[视频] 无触摸的3D跟踪界面`
    发表于 07-11 17:52

    酷毙的全景汽车3D视频

    世界真是日新月异,特别是这种互联网思维结合,像谷歌、特斯拉以及据说中的小米汽车……,未来的汽车世界会像今天的手机么,很期待啊~据说是SIM-CEL的3D行车显示屏,实时显示汽车行驶中的3D环境
    发表于 12-26 14:31

    基于FPGA视频图形显示系统的DDR3多端口存储管理设计

    吞吐量大、功耗低的需求,因此选择DDR3 SDRAM作为机载视频图形显示系统的外部存储器。本文Kintex-7系列XC7K410T FPGA
    发表于 06-24 06:07

    为什么说FPGA主导3D视频处理市场?

    和Neytiri对世界美好的愿望和共同的追求,使双方互相看到了地球人和纳威人之间不可分割的联系,而观众则通过先进的3D视频处理技术,观赏到了3D电影的逼真效果,感受到这部电影带来的震撼。那么有谁知道,为什么说
    发表于 08-06 08:26

    Altium AD制作3D元件库视频教程

    altium AD制作3D元件库视频教程https://v.qq.com/x/page/u0915mlv3l7.html?start=18
    发表于 08-17 15:34

    如何通过合成视频流来提供3D视频

    视频系统目前已经深入消费应用的各个方面,在汽车、机器人和工业领域日益普遍。其在非消费应用中的增长主要源于HDMI标准以及更快、更高效的DSP和FPGA的出现。
    发表于 09-26 06:41

    如何读取FPGA视频

    ()和SysRealGuang-VGA()函数主要用于控制图像传感器(如果我错了,请纠正我)。我所拥有的是一具有8位并行数据的视频,FVAR、LVAR、像素时钟和DATAVALID信号。还需要什么来读取
    发表于 10-24 11:13

    基于FPGA系统通过合成视频流来提供3D视频

    简介视频系统,目前已经深入消费应用的各个方面,在汽车、机器人和工业领域日益普遍。其在非消费应用中的增长主要源于HDMI标准以及更快、更高效的DSP和FPGA的出现。
    发表于 11-03 08:00

    AR0237IR图像传感器推动3D成像技术的发展

      3D成像技术的不断发展,已经在众多领域得到应用。而且随着3D技术的不断成熟,在门禁和安防方面的作用已经显得尤为突出。为了增强3D技术的面部识别能力,简化智能门禁和智能视频方案的开发
    发表于 12-16 16:14

    PYNQ框架下如何快速完成3D数据重建

    演进行计时。对于作者定制的3D到2D投影算法,又设计覆盖层来加速乘法累加(MAC)操作,然后通过Jupyter笔记本在PYNQ板上进行测试。未来将为
    发表于 01-07 17:25

    如何通过合成视频流来提供3D视频

    一种基于FPGA和DSP技术的实现3D视频系统的设计
    发表于 06-02 06:06

    使用Arduino和网络摄像头的基本视频

    我知道很多人说 arduino 不是处理视频的最佳方式,但我在使用 OctoPi(基于 arduino 的 3D 打印平台,还具有网络摄像头)方面经验丰富,所以我知道它能够做我想做的事情想。 我
    发表于 05-04 06:51

    基于FPGA系统通过合成两条视频流来提供3D视频

    基于FPGA系统通过合成两条视频流来提供3D视频
    发表于 01-07 15:00 10次下载

    基于FPGA与DSP的系统实现3D视频

    本文将概要讨论利用模拟或HDMI摄像机实现立体视觉(3D视频)的各种要求。文章将描述一个基于FPGA系统,它将两个
    的头像 发表于 04-09 08:50 2804次阅读