如何计算图像采集应用所需的带宽?

更新 May 14, 2024

环境

硬件

  • Sony Camera
  • Starter Kit for ISC-178x Smart Cameras
  • Camera Link Cable
  • Basler 1394 Camera
  • Camera Link I/O Board

驱动

  • IMAQ Vision

我正在开发一个图像采集的应用,需要知道图像采集所需的带宽。应该如何计算采集的每秒字节数?

当考虑图像采集所需的带宽时,我们需要关注的是两种不同的数据传输速率,即瞬时速率和平均速率。下面就向大家来详细介绍这两种速率的概念以及他们的计算方法,同时在本文的最后为大家提供了一个案例。

瞬时数据传输速率

数据传输速率中最重要,最需要考虑的就是瞬时数据传输速率。它是指相机将数据流向采集卡的传输速率,它是由相机的像素时钟速率所决定的。如果该速率过高,采集卡就不能够将相机的图像及时有效地将数据从总线上取走,导致缓冲区溢出的错误。

要计算瞬时数据速率,我们需要知道:
  • 像素深度(bytes/pixel)*
  • 摄像机的像素时钟频率(MHz)
  • 拍数(The number of taps)
* 10和12位图像在内存中表示为16位。

使用下面的公式来计算瞬时数据传输速率:
瞬时数据传输速率(MB/s)=像素时钟速率(MHz)x像素深度 (Bytes)x 拍数
一旦我们知道了瞬时数据速率,我们就可以判断我们的硬件是否能够应付图像采集的任务。如果图像采集卡的数据吞吐量大于瞬时数据传输速率,那么我们就不会得到缓冲区溢出的错误。

如果采集卡的吞吐量小于瞬时数据传输速率,那么我们就需要考虑板载FIFO的填充速率了。如果一帧图像还没有采集完成FIFO就已经溢出,我们同样会得到一个缓冲区溢出的错误,即使我们只采集了一帧图像

使用以下公式计算FIFO填充速率:

FIFO填充速率(MB / s)= 瞬时数据传输速率 - 采集卡总线吞吐量
我们同时需要知道从相机采集一帧图像所需要的时间。该参数会随着相机的帧速率而改变,但它是由相机的时钟速率来决定的:

帧时间 (s/frame)= 分辨率 /(拍数 × 像素时钟速率 )
我们可以通过FIFO填充速率和帧时间来确定每帧图像所需要的FIFO大小:
FIFO大小 = FIFO填充速率 x 帧时间

平均数据速率
平均数据速率是指软件从相机接收一整帧图像的速率,它是由帧速率来决定的。如果像素帧太大而导致在指定的时间内数据不能从总线上传输到软件中,那么我们会得到一个采集超时的错误。

要计算平均数据速率,您需要知道:
  • 图像的分辨率(也称为百万像素)
  • 像素深度(bytes/pixel)
  • 帧率(Hz)
按照以下步骤计算采集的每秒位数。
  1. 宽度x高度= 分辨率 (以像素为单位)
  2. 分辨率 x像素深度= 字节数/帧
  3. 字节数/帧 x帧速率= 字节数/秒
注意:此数字的大小应为10 ^ 6,或Mbytes/s。

Additional Information

我要使用PCIe-1427图像采集卡来采集一个1280x1024 12-bit 的图像,帧速率为10 fps (frames per second)。我的相机速率为80 MHz,采集卡的接口为1x PCIe接口,采集时配置的拍数为2,我能够顺利的采集一帧图像吗?

注意: PCIe-1427具有16KB的板载内存。1xPCIe插槽的最大吞吐量为200MB/s。

  1. 计算瞬时数据速率。

80M pulses/s x 2 pixels/pulse x 2 Bytes/pixel = 320 MB/s
因为 320 MB/s > 200 MBs,所有我们需要将数据缓存到板载的FIFO上面。

  1. 计算FIFO填充速率。

320 MB/s – 200 MB/s = 120 MB/s

  1. 计算帧时间

(1280 pixels/line x 1024lines/frame) / (2 pixels/pulse x 80 pulses/s) = 8.2e-3 s/frame

  1. 计算FIFO要求。

120 MB/s x 8.2e-3 s/frame = 984 KB/frame


因为所需要的FIFO大于板载的内存大小(984 KB > 16 KB),所以我们不能够有效的采集一帧图像,同时会在采集过程中得到一个缓冲区溢出的错误。