Step1: 介绍

当我们提到嵌入式视觉系统时,我们通常想到的是电磁频谱中可见光部分的解决方案。但是,人类的可见光谱仅覆盖了EM光谱的一小部分,在可见EM光谱之外的数据同样重要。例如利用红外线来检测工业系统或低照度/夜间条件下的热点。

EM spectrum

电磁光谱


根据EM频谱中的不同区域,我们需要针对传感器采用不同的半导体技术。

电荷耦合器件– X射线可见,并延伸至近红外

     CMOS成像器传感器– X射线可见并延伸到近红外

     非冷却红外–微型测微计–通常在中红外至长红外范围内运行

     冷却的红外-基于HgCdTe或InSb的解决方案需要冷却

随着波长的增加,由于电子能量不足以弥合硅中的带隙,因此激发电子变得更加困难。所以说要在红外领域工作,我们通常需要比硅特殊的半导体,例如HgCdTe或InSb。

在这个项目中,我们将创建一个图像处理系统,该系统可以同时“看到”在可见光域和IR光谱。我们将使用低成本的FPGA板来实现这一点。


Step2: 硬件设计

该设计将使用FLIR Lepton 2,HDMI摄像机和HDMI显示器来输出来自可见光和IR域的图像。

为此,在Vivado中,我们将使用以下IP:

1.Digilent DVItoRGB-将HDMI转换为RGB

2.Digilent RGBtoDVI-将RGB转换为HDMI

3.视频定时控制器-用于检测和生成视频定时

4.VDMA-将HDMI图像从DDR存储器中移出,将HDMI和热图像读入输出视频管道

5.四路SPI-配置为单个SPI以从Lepton接收VoSPI数据

6.GPIO-提供HDMI热插拔检测接收和生成

红外成像仪的读取实际上是由SW进行的,并通过VDMA输出。这与HDMI可见通道相反,HDMI可见通道首先通过HDMI输入,然后存储在DDR中,最后通过软件合成两部分图像。

Overall design

整体设计



Step3: 与Lepton传感器接口

我们正在使用的是Lepton 2传感器,输出60个164字节的数据包,以组成80像素乘60线的图像。额外的四个字节包含一个header,以确保我们可以与图像输出同步。

通过使用I2C通信总线对Lepton传感器进行控制和配置。使用这个接口,我们可以设置平场校正,自动增益控制和一系列其他配置。

从Lepton输出的图像通过SPI输出,称为VoSPI,它仅使用SCLK,CS和MISO线。

为了使图像有效传输,我们需要保持同步。为了符合输出条件,要降低Lepton的帧速率,输出速度约为9帧/秒(FPS)。有效帧取决于标头字段(header field),如果第一个字节为0xFF,则该该数据包无效应将其丢弃。

与电影不同,大多数热像仪实际上使用的是灰度,而不是其他颜色。从lepton输出的像素以14位灰度输出,但是,如果我们确实希望使用带颜色的方案,则可以使用RBG888方案,该方案为每个数据包提供244个字节。在这种情况下,我们每个像素三个字节,需要启用自动增益控制(AGC)。

为了正确连接Lepton,我们需要设置以下硬件配置

1.I2C地址0x2A

2.SPI主机操作

3.SPI for CPOL = 1,CPHA = 1

在硬件上,我将FLIR Lepton连接到了Arty Board的跳线2。使用这种方法,我们可以确保I2C,SDA和SCL线在Arty和Lepton上一致。

Positioning of the FLIR Lepton

FLIR Lepton的位置



Step4: 与可见光传感器接口

可见传感器可以使用HDMI输入或连接到Pmod接口(例如TDNext)的摄像机/传感器接收。在本项目中,我使用了一个小型HDMI运动相机,因为它具有最大的灵活性,可以将两个相机相互对齐。

与HDMI摄像机接口时,我们必须记住的一件事是,我们需要确定热插拔检测信号,以确保摄像机可以输出视频。否则,将不会生成视频,这可能意味着您需要花费大量时间调试Vivado设计,却一无所获。

为了接收视频,我们将使用视频输入到AXI流模块。然后,将接收到的视频移至DDR内存中。一旦进入DDR内存,我们选择的处理器就可以创建最终映像。

HDMI Input Chain

HDMI输入链



Step5: 图像创建概述

当FLIR Lepton视频被处理器接收并存储在DDR中时,为了创建合并图像,还需要将可见图像存储在同一DDR内存中。

Image positioning in the frame buffer

图像在帧缓冲区中的位置

然后,我们可以使用SW应用程序创建输出框架。与我们在PL中有两个(或更多)视频流并想要合并它们的情况不同。在这种情况下,我们可以使用Video Mixer IP,但是软件将创建一个更大的框架,然后将可见光和IR传感器安装到该框架上。

Step6: 软件开发

该软件可以实现以下功能

1.图像处理链配置(VDMA)

2.使用I2C配置Lepton

3.使用VoSPI读出Lepton Image

4.按照串行链接上的命令在IR和可见光之间切换

要向Lepton发出命令,我们需要使用以下结构

I2C command structure for the thermal imager

热像仪的I2C命令结构

要从lepton写或读命令,我们使用以下方法

  • 将命令写入从地址0x0008开始的数据寄存器中(如有需要)。

  • 将命令数写入寄存器0x0006

  • 将命令写入命令寄存器0x0004,命令寄存器将采用以下结构。

Command Structure

命令结构

以下示例说明如何设置AGC

截屏2020-05-1517.19.18.png

截屏2020-05-1517.19.31.png

接收VoSPI

截屏2020-05-1517.20.29.png

FLIR Lepton的分辨率有限,该软件会将图像放大到640像素*480线的图像。这使得缩放非常容易,因为每个像素可以以8的因子输出分辨率。

SW算法在将图像写出到帧缓冲区时执行缩放。

image_20200515_c572d81986887.png

可见的HMDI视频使用VDMA更易于接收

截屏2020-05-1517.23.39.png

合并图像时,可见光和IR成像器均写入同一帧缓冲区。只是帧缓冲区大于可见图像和IR图像,这使我可以在同一帧上复制可见图像和IR图像。

为此,我将可见光成像器从像素0(第0行)开始,将占据前480个像素。IR图像在第0行从640像素到1280像素占据640像素。

整体帧输出为1280 x 720,这为输出两个图像提供了足够的空间。

当然,VDMA传输可以正确定位可见图像,而该软件旨在写入帧错误中的正确位置以使图像出现。

可以使用Arty Z7中的Arm A9或基于FPGA的Arty中的MicroBlaze来实现此软件。

Step7: 测试

实施FLIR Lepton SW后,我想检查它是否正常工作,为此,我仅输出IR图像。

输出图像非常简单明了,表明lepton是有效图像,不会因丢弃的帧而损坏。但是,我还想确保其设置正确,包括自动增益控制。

First testing of the IR image

红外图像的首次测试

为了测试这一点,我在场景中插入了一个冷的物体,并观察秤适应新温度范围的情况。

Finger prints shown on a bottle

瓶子上显示的指纹

最后,为了说明热成像的敏感性,我在录制了一段视频,您可以看到在从冷瓶中移开手指很久之后,成像器就会检测到我的手指印。

测试的最后阶段是启用可见视频通道并正确缩放输出视频。

当我将它们放在一起时,我们可以看到并排的可见图像和热图像。

Step8: 结论于进一步工作

这是对这两个领域的成像的非常简单的介绍,接下来的潜在步骤可能包括:

  • 使用PL放大热像仪上的视频

  • 仔细对准两个成像器,使图像重叠-Alpha混合

  • 根据环境光自动在可见光和红外线之间切换


评论