当前位置: 首页 > news >正文

008-关于FPGA/ZYNQ直接处理图像传感器数据输出的若干笔记(裸板采集思路)

文章目录

  • 前言
  • 一、图像传感器厂商
  • 二、图像传感器的参数解析
  • 三、图像传感器中的全局曝光和卷帘曝光
  • 四、处理传感器图像数据流程
    • 1.研究当前图像传感器输出格式
    • 2.FPGA处理图像数据
  • 总结


前言

最近也是未来需要考虑做的一件事情是,如何通过FPGA/ZYNQ去做显微镜图像观测下的图像采集传输与后续的处理。目前显微镜观测领域通常是以PC端连接工业相机接口,这个接口可以是USB3.0,可以是网口,也可以是其它传输方式。常常通过工业相机输出的为视频流数据,厂商会提供对应的协议,只需要用他们的软件去进行控制即可,但这种方式,明显不自由,也会受一些限制。如果能够做一款自己的工业相机出来,是不是会把这种限制给解决。

当然,这个要解决的问题需要很多,我最近也在研究和调研这个方向的知识。目前国际上做图像传感器做的比较好的有很多厂商,外国的厂商是占据明显优势的,当然我们国内的厂商也不容小觑,豪威,格科微,思特威,长光辰芯,锐芯微蓬勃发展。就显微镜图像观测这个领域,国内也在不断的发力,相信在未来能取得更大的发展。未来我或许也会从事这个行业的工作,希望能为国产显微镜这个领域,贡献出自己的一份力量,虽说道阻且长,但是一辈一辈人的奋斗,总能够在未来取得成效。为了让更多人了解这个方向和市场,更多的发散自己的思维,今天决定写这篇文章简单的将一些知识做一些汇总,后续如果有一些成果我也会与大家分享一下(碍于是为平台做的设计,所以核心的东西没有办法分享,但是思路是共享的)


一、图像传感器厂商

从CIS供应商来看,索尼和三星一直都是属于图像传感器行业的龙头老大,据网上搜到的数据和信息,2020年索尼在销售额占比约为40%,三星22%,国内的龙头豪威占12%,ST占6%,国内格科微占4%,安森美占4%,SK海力士占2%,思特微占1%。前十里面有三家国产的CIS厂商,总共营收占比合计17%。国内还有一些做的比较好的图像传感器厂商,例如长光辰芯,瑞芯微等等。

我们不评价整体大的市场形式,但国产化肯定是未来中国市场的主流,无论是FPGA,ZYNQ还是各类芯片(包括图像传感器),经历了卡脖子事件,我相信无论是国家还是各个企业,都已经在筹备许多器件国产化的替代。这个过程虽然会比较漫长,但是未来肯定是我们主要投入心思进去的一个方向。

在做这个图像传感器数据采集的过程,既然sony这个品牌卖的最好,销量最高,就先要搞清楚人家的一个参数,对比外国产品和国内产品的一个差距,只能说,人家确实做的不错,产品面也做得很全。这方面网上有很多调研,今天写这篇文章的主要目的不是这个。

二、图像传感器的参数解析

1、分辨率:相机能够输出像素点的多少,比如分辨率为4096*4096,则代表感光区域为正方形,边长为4096个像素点。

2、光学尺寸:传感器的大小

3、像素尺寸:传感器中像素点的宽度和高度尺寸大小

4、感光面积:相机或传感器上光敏元件的面积大小,通常以平方毫米为单位

5、快门类型:卷帘快门或者全局快门

6、峰值量子效率:特定条件下,光电器件再单位时间内能转换为电信号的最高效率

7、满阱容量:是指填满一个像素所需要的电子数,因此更大的像素面积将容纳更多的电子数

8、输入时钟频率:同步电路中时钟的基础频率

9、读出噪声:相机测量它在一次信号采集中捕获到的每个像素的光子数量时,总是存在一定程度的误差,这种不准确性被称为读出噪声

10、暗电流:镜头无光线透过的条件下观测到的电流,是传感器成像过程中的一种非理想因素

11、动态范围:相机能够捕捉到的最大和最小亮度的比率

12、最高帧率:每秒能够采集并输出的最大帧率

13、输出接口:LVDS,MIPI接口等等,高速图像数据传输接口

14、最大数据率:Gbps/s这种格式,每秒能传输多大的像素数据量。

15、色彩:彩色数据或者黑白数据

16、功耗:传感器运行过程中消耗的功率

17、供电电压:传感器正常工作的电压大小

18、封装形式:具体的封装规格

三、图像传感器中的全局曝光和卷帘曝光

一般而言,CCD相机是全局曝光,而CMOS相机则存在卷帘曝光。

全局曝光就是光圈打开后,整个图像芯片同时曝光,因此曝光时间与机械的开关速度有关,那么就存在理论上的最小曝光时间。

卷帘曝光的方式与卷帘概念相关。这种方式是光圈打开后,还存在具有一定间隔的卷帘来控制传感器的曝光时间。卷帘的方式是从左到右的。因此,曝光时间长短完全取决于卷帘的开口大小与卷帘的运动速度,也就是说卷帘运动的越快,眷恋间距就越小,其传感器的曝光时间就越小,因此意味着卷帘曝光方式能够有更小的曝光时间。

全局曝光优点是所有像素点同时曝光。缺点是曝光时间存在局限,存在机械极限的最小曝光时间。

卷帘曝光的优点是具有更小的曝光时间。其缺点是由于逐行的是在不同时间进行曝光取向,如果图像是高速运动的,则存在明显的拖影。因此,卷帘曝光不适合拍摄高速运动的物体。

总结来说就是对于拍摄运动速度快的物体全局曝光有优势,静态物体卷帘曝光速度快,曝光时间短。无论何种方式,FPGA都能够进行处理,像素点的输出方式已经确定了,只需要采集数据即可

曝光时间的问题就是相机采集图像过程中的两个部分。第一部分是曝光,第二部分是曝光后,从传感器的寄存器中读出数据并传送出去。曝光时间越长,拍摄速度越慢,但是曝光时间越短,进光量就会变少,此时就需要调大光圈,增加光照,才能保证图像的亮度。
在这里插入图片描述
逐行曝光sensor 实现如上图逐行曝光模式所示。与全局曝光不同,逐行曝光从第一行开始曝光,一个行周期之后第二行才开始曝光。依次类推,经过N-1 行后第N 行开始曝光。第一行曝光结束后开始读出数据,读出一行需要一行周期时间(含行消隐时间)。至第一行完全读出后,第二行刚好开始读出,依次类推,当第N-1 行读完后,第N 行开始读出,直到整幅图像完全读出。逐行曝光的sensor 技术难度较全局曝光sensor 低,价格便宜,且分辨率较大,对于一些静态图像拍摄是不错的选择。

全局曝光Sensor的所有行同时开始曝光,并同时结束曝光,在曝光结束后,Sensor将所有电子从感光区转到存储区,之后逐行地读出像素数据。这样曝光的好处是获得图像每一行的曝光时间比较一致,并且在拍摄运动物体时图像不会出现偏移和歪斜。

不管是全局曝光还是卷帘曝光,我们都不用担心FPGA采集的问题。这两者的区别主要是在于针对的方向不同,全局曝光在动态物体运动拍摄上有优势,但是存在机械限制,卷帘曝光的帧率可以很高,但是拍摄速度快的物体就容易出现重影的问题。

四、处理传感器图像数据流程

1.研究当前图像传感器输出格式

一般的图像传感器输出方式都是LVDS信号输出,我们需要做一个图像传感器底板,让图像传感器芯片能够正常工作,并且将图像传感器能够输出的信号接口引出底板,以FPC排线的方式或者直接集成到我们的主控FPGA上。以我的板子为例,由于只有mipi2lane的接口,因此就需要将lvds转成2lane的mipi接口数据,在板子上进行解析。

一般的图像传感器都会说明数据传输的格式,以下图为例,图中的左下角就是数据流的输出接口,通过搜集手册也可知道其属于CSI的接口,我们就可以用MIPI接口进行数据的解析,这个过程需要我们进行数据的采集和解包,具体的拆解过程要对照图像传感器芯片手册的输出格式来。
在这里插入图片描述
再例如下图,这个芯片就采用lvds 8通道输出,我们就需要对照其输出格式做一个lvds的传输底板,再转换成我们能接收的数据解码。这个过程一定要对准好,完成了数据的解析基本上工作就已经完成了一大半了(前提是底板电路做好了,而且你高速接口板子也没什么问题)
在这里插入图片描述

2.FPGA处理图像数据

LVDS图像采集主要分为几个阶段:

1、图像数据源的行程

2、数据信息的处理和缓存

3、帧数据的转发。

图像传感器作为图像数据的来源,为系统提供高分辨率的可见光和红外图像,考虑系统的实时性和高可靠性因素,一般的图像传感器都是采用LVDS接口实现数据长距离高速传输,解决传输瓶颈的问题,图像数据进入FPGA之前通过数据格式转换接口,采用MAX9218实现,将串行的数据转换成并行数据接口(这个是网上的一种方案,真正可实现的方案有很多,选择最适合你的去做,我也在学习之中,后期有好的方案会分享)。

高速图像传感器➡LVDS接口板➡接口转换➡接受缓存➡乒乓存储➡图像缓存显示。
最难的就是图像数据及相关参数信息的采集、缓存、组帧和图像数据的转发。FPGA根据图像源中帧同步、行同步、图像选择信号接收解串图像,存储至缓存区,并将图像附带的参数信息写入缓存后部,经组帧状态机形成所需的图像数据帧。

数据帧被FPGA进行解码以后再通过一系列的图像处理方式。比如如果是8bit的bayer数据输出,就需要经过时钟域同步,反马赛克,bayer转rgb888,rgb888转ycbcr等等一系列的操作,这些操作主要是为了获得我们所需的图像数据。若你想存储至PL端,则通过MIG核实现数据存储至DDR中,若你想存储到PS端,则通过AXI_DMA将数据传输至PSDDR,后续想要做一些图像的传输就通过PS端以太网,或者USB接口传输数据。


总结

今天吃的是湖南大碗菜,不得不说,农家一碗香就是嘎嘎好吃

相关文章:

  • Python实现深度迁移学习-CIFAR100-ResNet50
  • c++学习:STL库(框架)+字符串模板类string+vector容器+list链表
  • 免费简单好用的 webshell 在线检测:支持 php、jsp、asp等多格式文件
  • Go 语言 panic 和 recover 详解
  • C //练习 4-9 以上介绍的getch与ungetch函数不能正确地处理压回的EOF。考虑压回EOF时应该如何处理?请实现你的设计方案。
  • 国内有哪些比较好用的低代码开发平台?JNPF算一个
  • 深入Pandas(二):高级数据处理技巧
  • Java 常见缓存详解以及解决方案
  • 硬盘检测软件 SMART Utility mac功能特色
  • web第一次作业
  • 如何在OpenWRT部署uhttpd搭建服务器实现远程访问本地web站点
  • 超维空间M1无人机使用说明书——41、ROS无人机使用yolo进行物体识别
  • 【JAVA基础】JVM之类加载--双亲委派机制
  • C语言——结构体类型(二)【结构体内存对齐,结构体数组】
  • 美客多本土店与跨境店有何区别?本土店如何入驻运营?
  • __proto__ 和 prototype的关系
  • 【前端学习】-粗谈选择器
  • 77. Combinations
  • Android系统模拟器绘制实现概述
  • Angular数据绑定机制
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Javascript编码规范
  • leetcode98. Validate Binary Search Tree
  • Node + FFmpeg 实现Canvas动画导出视频
  • node-glob通配符
  • NSTimer学习笔记
  • redis学习笔记(三):列表、集合、有序集合
  • vue数据传递--我有特殊的实现技巧
  • webpack4 一点通
  • 阿里云前端周刊 - 第 26 期
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 关于使用markdown的方法(引自CSDN教程)
  • 基于组件的设计工作流与界面抽象
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 聊聊directory traversal attack
  • 聊聊sentinel的DegradeSlot
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 我感觉这是史上最牛的防sql注入方法类
  • 新书推荐|Windows黑客编程技术详解
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 译自由幺半群
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • (175)FPGA门控时钟技术
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (pojstep1.1.2)2654(直叙式模拟)
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)Dubbo快速入门、介绍、使用
  • ../depcomp: line 571: exec: g++: not found