首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用FPGA来加速采用OpenCL的多功能打印机图像处理之二

用FPGA来加速采用OpenCL的多功能打印机图像处理之二

图字:
M每页扫描线

N每扫描线像素

像素;减少的滤波矩阵;有相同颜色的条目分享共同系数

工作矩阵对称滤波器计算的高度概括,针对左到右滑动进行了优化,包括:

1.针对每一个加载的新的像素栏3种加法A

2.针对属于图4所示4×7矩阵中相同滤波器系数像素的18种加法

3.针对每个系数一个C0至C9的10种乘法M

4.计算系数乘法最终结果的9种加法

那么,计算的总数是10M + 3A + 18A + 9A = 10M + 30A.图5示出了计算树。



图5:滤波算法的图形表示


随着滤波器在图像上从左至右的滑动,仅需要加载最右侧像素列,即7个像素。逻辑上,这涉及将内部像素列移到左边,并在右侧加上新的像素列。

B.缩放

缩放模块使用双线性插值来减小和/或放大一幅图像。双线性插值是一个众所周知的算法,在所需的新输出像素周围使用了4个输入像素。图6示出了要测试像素的双线性插值输入和输出网格。



图6:双线性插值


图字:输入网格;输出网格;输入像素;输出像素

输出像素OP1,1可以用下面的公式来计算:

C.色彩空间转换

CCP采用设备无关的色彩空间数据,通常是LAB格式,并将其转换为设备相关的CMYK色彩空间。不幸的是,没有公式化的方法来直接转换L*a*b*至CMYK.每台打印机的着色剂以非线性方式进行交互。打印行业的公认方法是打印测试斑点,测量所得色,并创建一组C、M、Y和K查找表,即LUT.关键是要尽量减少LUT的大小,同时提供最高的色彩保真度。为了计算这些存储在LUT之间的值,我们必须使用一个插值方案。有许多方法来执行插值,但四面体插值法被广泛认为是最准确的。

顾名思义,四面体插值法使用4个已知点来计算一个中间点。在我们的L*a*b*情况下,这些已知点的每一个都具有对应于输入色彩空间的三个维度。三个输入维度L、a、b形成一个我们可以用来确定输出像素的立方体。图7示出了色彩空间和LUT概念。注意每个输出彩色平面都有独立的LUT.



图7:CMYK LUT和单位正方体


图字:

第一张图:

L*a*b*色彩空间

下方注解:

对于每24位输入L*a*b*像素,可能有224个32位CMYK输出像素。这相当于64MB LUT!

第二张图:

青色点阵

单位立方体

格点——凭经验测量

感兴趣的像

要使LUT大小降低到一个合理水平,我们可执行以下操作:

每彩色平面有各自的LUT

每个LUT有代表点阵点的4096个条目

算法首先发现期望像素点驻留的单位立方体

一旦算法确定了哪一个单位立方体包含要测试的输出像素,我们必须从一组8个已知像素中计算出输出像素。这是三线性插值的实际情形。四面体插值法利用一个单位立方体可以被划分成一组6个非重叠四面体的方法,其每个终点都位于单位立方体的顶点。使用一个四面体(有4个点)内插来削减一半像素数时,我们必须使用插值结果。图8以图形示出了六个四面体。



图8:CST四面体


CST算法首先确定了输出像素(P)驻留在哪个四面体中,并使用了4个已知输出像素插入最终结果——见图7.图9示出了四面体5中的像素P.该算法计算了每个单位立方体轴端点和像素dx、dy、dz之间的距离,并使用了已知点之间的线性插值距离。



图9:CST四面体5分解图

D. TRC调整
TRC调整算法是一个简单的LUT.它允许C、M、Y、K值的进一步调整,以校正非线性色调再现。具体C、M、Y、K LUT条目凭经验来测量。

E.误差扩散

最后阶段执行半色调功能。彩色激光MFP产品使用一个激光系统来消除感光介质上的电荷。无论电荷清除的是C、M、Y、K,墨粉都不能转移到感光体。激光束扫过移动的感光体,被调制来创建一个倒置的图像。调制的最小时间周期是一个像素。在反转图像被写入感光体后,它经过一个墨粉分配器附近。然后,带有相反电荷的墨粉被吸引到电荷存在的感光区。墨粉“粘”到感光体上。最后一个步骤是将感光体上的图像转印到纸张或其他介质上。单个像素或开或关,实现二进制的1过程。来自TRC内核的8位CMYK像素必须半色调或二进制化,以驱动打印机中的激光系统。有许多算法可以将连续色调数据转换为二进制数据。误差扩散是MFP/打印机中使用的一种通用算法。我们选择了实施众所周知的弗洛伊德-斯坦伯格(Floyd-Steinberg)误差扩散算法的一个变种,它有简单的算术修正系数[7].

弗洛伊德-斯坦伯格误差扩散量化了基于一个阈值阵列的输入像素,然后将剩余误差分配到相邻像素。在我们的案例中,我们将一个8位输入像素减少到二进制输出像素。因此,我们的阈值阵列是一个127的值。大于127的输入像素成为了逻辑1.≤127的像素成为了0.该算法定义如下:


1. IP(x,y)是当前输入像素

2. EPP是来自以前像素的剩余阈值误差,IP(x-1,y)

3. EP是来自以前扫描线的误差矢量,y-1.

VII.扩展和增强

A.扩展CCP到整个系统

下一步骤是采用CCP并将其连接到数据输入的扫描装置和数据输出的打印装置。这将需要增加一个校准内核和简单的CST将RGB转换为L*a*b*.根据在扫描设备中使用的传感器阵列类型,即电荷耦合器件或接触式图像传感器,红、绿和蓝行数据可能无法在垂直方向对准。行数据的对准可能需要几十行缓冲区,这在FPGA内存资源方面是非常昂贵的。为了缓解这一问题,原始RGB数据将使用DMA暂时保存在HPS内存中。然后,红、绿、蓝、行数据的对准可以使用DMA指针和偏移来完成。然后校准对准的RGB数据,并通过通道传递到基本CST内核。

基本CST内核将依次使用通道直接将数据传递到滤波器输入模块。我们的期望是,这些额外内核将适合未使用的逻辑和内存资源。图22显示了完整的复印流水线。请注意,除了有全扫描仪接口的CCP,分割、无损压缩模块和引擎级都不适合Cyclone V SoC器件。完整的图像路径将需要更大型的FPGA.

B. ARM内核和NEON协处理

除了FPGA架构和OpenCL,Altera SoC系列器件还采用了双核ARM Cortex A9内核和NEON协处理器。图像处理流水线的某些模块可以卸载到CPU.在分割操作和完成压缩/解压缩功能的特定部分可以使用NEON提供的有SIMD加速的CPU来完成。

C.动态FPGA可重编程性

Altera SoC FPGA提供的动态重新配置允许用户重新编程FPGA架构,同时CPU运算继续运行。这个特点在MFP中特别有用,而其中的一些操作永远不可能同时发生。例如,扫描和复印操作共享6个共同输入功能,如图22所示。其余的复印操作、CST压缩,以及剩下的扫描输入功能、JPEG压缩将永远不会同时运行。因此,我们可以创建两套内核,其中包括共同的扫描仪功能和多种后端功能。这些流水线可以在给定所需时间基于MFP操作来动态加载。在一个传统ASIC中,这些模块和数据通路都必须包括在内。动态图像路径的重新配置可以实现更小的FPGA,从而实现更低成本的图像路径。

D. Arria V和Arria 10 SoC

Altera的Arria V和最近发布的Arria10 SoC为功能齐全的MFP图像路径解决方案提供了一个可扩展平台。增加的内存、更快的时钟速度,加上更高性能ARM内核的大型FPGA架构为图像处理和一般计算要求提供了完整解决方案。



图:完整的复印和扫描流水线


图字:

复印流水线

来自CCD或基于CIS扫描仪的RGB;分割;图像内存;无损解压缩;图像调整;引擎接口

扫描仪接口;校准和调整;CST(RGB到Lab);滤波器;缩放R E;CST(Lab到CMYK);调整;误差扩散;无损压缩;至引擎

扫描出口流水线

来自CCD或基于CIS扫描仪的RGB;分割;图像内存;JGEG解压缩;至网络

扫描仪接口;校准和调整;CST(RGB到Lab);滤波器;缩放R E;JGEG压缩;JGEG压缩;出口处理;无损压缩

通用内核/模块;流水线特定内核/模块

VIII.总结和结论

OpenCL和Altera的工具链有助于2名全职OpenCL软件工程师、1名全职硬件工程师和其他兼职人员的一个小型团队在约4.5个月内实现CCP.团队可从C语言算法开始,创建一个高水平的基于C语言的CCP图像流水线,将算法移植到OpenCL,在x86平台上测试OpenCL以验证基本功能,增加厂商特定扩展,学会Altera OpenCL工具流程,最后在Altera的参考平台上测试结果。团队还可开发一个测试环境来验证位级别OpenCL结果的正确性。此外,团队可创建一个基于Web的应用,允许用户选择源图像,通过一个基于C语言的CCP和OpenCL加速的CCP运行图像,显示半色调图像,并提供计时结果。软件工程师可以没有以往的FPGA经验,硬件工程师也可以没有以往的OpenCL经验。

这种新模式演示了一个小型团队如何可以快速从一组算法到全面功能,优化以硬件实现的流水线。大约50%的开发时间专注于优化,包括最大限度地提高性能和最大限度地减少FPGA资源利用。该团队预计,后续项目开发时间可减少50%。

MFP厂商不再需要投入数百万美元和多年时间来开发ASIC或SoC.OpenCL和Altera SoC器件提供了一种在最短时间内实现高性能、低成本MFP控制器的新模式。
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表