最近新完成了一个有关CMOS的成像电路,传感器采用比利时CMOSIS公司出的CMV4000图像传感器。CMOSIS是由Cypress公司分离出来的大多数科研人员组成的,公司成立于2008年1月份,总部位于比利时的安特卫普。CMOSIS进行专业图像传感器的设计及生产,致力于医疗、机器视觉、运动分析、空间、生物计量及国防应用提供解决方案。

该公司的标准货架产品列表如下:

Product

Resolution

Shutter Type

Pixel Size

Optical Format

Frame Rate

Output Interface

Applications

CMV300

0,3MP - 648(H) x 488(V)

Pipelined global shutter with true CDS

7.4 x 7.4 μm2

1/3''

300 fps (10 bit)

4 LVDS outputs @ 300 Mbps - 10-bit CMOS output @ 50 Mhz (150 fps)

3D imagingMachine VisionMotion AnalysisBarcode

CMV2000

2MP - 2048 (H) x 1088 (V)

Pipelined global shutter with true CDS

5.5 x 5.5 μm2

2/3''

340 fps (10 bit)
70 fps (12 bit)

16 LVDS outputs @ 480 Mbps

3D imagingITSMachine VisionMotion AnalysisVideo/Broadcast

CMV4000

4MP - 2048(H) x 2048 (V)

Pipelined global shutter with true CDS

5.5 x 5.5 μm2

1''

180 fps (10 bit)
37 fps (12 bit)

16 LVDS outputs @ 480 Mbps

3D imagingITSMachine VisionMotion AnalysisVideo/Broadcast

CMV12000

12MP - 4096(H) x 3072(V)

Pipelined global shutter with true CDS

5.5 x 5.5 μm2

APS-like

150 fps (10 bit)
90 fps (12 bit)

150 fps (10 bit) - 90 fps (12 bit)

ITSMachine VisionMotion AnalysisVideo/Broadcast

CMV20000

20MP - 5120(H) x 3840(V)

Pipelined global shutter with true CDS

6,4 x 6,4 μm2

35mm

30 fps (12 bit)

16 LVDS channels @ 480 Mbps

3D imagingMachine VisionMotion AnalysisITSScientificMedical

CHR70M

70MP - 10000 (H) x 7096 (V)

Electronic rolling shutter with true CDS correction

3.1 x 3.1 μm2

35mm

3 fps

8 analog channels

Document ScannerMedicalMachine VisionSecurityScientific

我的设计针对CMV4000芯片,分辨率为2048x2048,采用12bitsADC和12bitsLVDS模式,4output方式。CMV4000主时钟采用20MHz,数据率为240Mbps。

多通道间相位差IPD如何计算 PYTHON 多通道成像_图像处理

            FPGA使用ALTERA公司的EP2C8Q208,该芯片有4个bank,将一个bank设置为LVDS工作方式,其他3个bank为LVTTL IO。CMV4000的4个输出通道直接连接到FPGA芯片引脚。FPGA产生CMV4000工作所需的时钟信号和控制信号,还有SPI配置信号。

其中包括:CMV_CLK  CMV4000主时钟,20MHz

                    CMV_RESN  CMV4000复位信号

                    F_REQ     图像请求信号

                    T_INT1/2  外部曝光控制信号

                    SPI_EN    SPI使能信号

                    SPI_CLK   SPI时钟

                    SPI_IN    SPI数据输入

                    SPI_OUT   SPI数据输出

                    LVDS_CMV_CLKN/P CMV4000LVDS时钟输入

手册中给出了CMV4000的上电时序,必须严格按照CMV4000的上电时序来做。

多通道间相位差IPD如何计算 PYTHON 多通道成像_fpga开发_02

按照大多数的cmos图像传感器工作特点,CMOS在上电后需要对内部工作寄存器进行初始化,才用VHDL语言编写SPI物理层接口程序,和CMV4000初始化配置程序,配置CMOS的工作方式、设置曝光时间、增益、通道设置等参数。

多通道间相位差IPD如何计算 PYTHON 多通道成像_图像处理_03



多通道间相位差IPD如何计算 PYTHON 多通道成像_数据_04


            

   MV4000上电配置结束后,FPGA发送图像请求,随即开始接收来自LVDS接口的串行数据,程序设置位对齐检测模块,当正确接收到字节/字数据之后,启动有效数据接收模块,在行场有效信号的同步下,正确接收图像数据。

硬件上设置了两片2048x8bits的SRAM芯片,用于存储图像数据。由于整帧图像大小为2048x2048,所以需要将图像分为上下两部分分别存储在两片SRAM中。

另外由于采用4通道模式,四个通道的像元数据同时到达,所以必须在12个像素位周期内存储完4个同时到达的四个像素数据。

多通道间相位差IPD如何计算 PYTHON 多通道成像_fpga开发_05



  所以,存入SRAM1中的字节依次为,第一行第一个像素,第一行第512个像素,第一行第1024个像素,第一行第1536个像素,然后是第一行第二个像素,第一行第513个像素,第一行第1025个像素....

第二行的数据依次类推...

所以在SRAM读出的过程中,如果是依次读出SRAM中的数据,则数据传输到PC机之后,采集软件需要根据SRAM的存储次序,将图像数据重新排序回来,还原为原始的正常的图像。

这里,硬件设计采用单通道LVDS接口,将图像数据传输到PC机的LVDS采集卡,上位机软件进行读取。该LVDS接口采用10MHz速度,所以传输一帧图像的速度较慢,大概为3s左右。

硬件电路如下图所示:

多通道间相位差IPD如何计算 PYTHON 多通道成像_fpga开发_06



多通道间相位差IPD如何计算 PYTHON 多通道成像_人工智能_07

下面是上位机采集软件采集的完整的图像,图像大小为2048x2048.

多通道间相位差IPD如何计算 PYTHON 多通道成像_fpga开发_08


     为了调试方便,初始化过程中,曝光时间设置约为10ms,而在该系统的测试环境中,10ms的曝光时间太少了,传感器对于图像的电荷累计不足,而且在存储和读出SRAM过程中,均选取12bits图像中的低8位数据,所以上面的图像看起来,整体偏暗,且部分区域已经有了翻转的现象。但是整个数据采集和传输流程是没有问题的。

接下来就是根据实际的应用环境,适当的设置曝光时间、增益等参数,选择图像的高位信息进行图像处理,以达到后端数据处理单元所需的最终效果。

进一步提高fps:

目前CMV4000采用的设计思路是4通道输出,12bits模式,数据率为240MHz。按照手册中的典型值:
   4通道输出,12bits模式,数据率480MHz,帧率37.5fps。
   按照如上计算,理论上,我们采用240MHz的数据率,帧率应该是18.75fps。每帧耗时53.333ms。

如果数据率仍然使用240MHz,但是数据宽度改为10bits模式,则一个像素数据将减少2个数据时钟,即在10个数据时钟,即可输出一个像素数据。即,每个像素节省了2*1/240MHz=8.333ns。

按此计算,一帧数据2048*2048个像素总共节省时间为:8.333ns*2048*2048=34.951ms。

用当前设计的每帧耗时,减去可以节省下来的时间,就是10bits模式时,每帧图像的耗费时间:
   T=53.333ms-34.951ms=18.382ms。

则在240MHz数据率,10bits模式下,理论帧率为:1/18.382=54.4fps。

当然,这个值只是理论计算值,具体帧率还要根据实际测量得到。可通过测量FVAL信号宽度和周期计算得知。

电脑模拟的星点图:

多通道间相位差IPD如何计算 PYTHON 多通道成像_人工智能_09