DIY编程器网

标题: 用FPGA来加速采用OpenCL的多功能打印机图像处理 [打印本页]

作者: admin    时间: 2015-4-27 16:08
标题: 用FPGA来加速采用OpenCL的多功能打印机图像处理
在高性能计算、娱乐和科学计算市场,OpenCL的采用在持续增长。OpenCL的灵活性和便携性使之成为了一个开发图像处理应用的优秀平台。然而,OpenCL尚未应用到硬拷贝打印机和多功能打印机(MFP)市场。传统上,打印机/MFP市场使用全定制系统级芯片(SoC或ASIC)、专用集成电路进行图像处理。在本文中,我们探讨了配合Altera SoC FPGA(现场可编程门阵列)的OpenCL在核心MFP图像处理流水线中的应用。核心图像处理流水线以每分钟大于90页信纸大小的全色RGB持续速率运行,图像分辨率为600DPI(每英寸点数),同时采用了成本有效的FPGA器件。相比运行在嵌入式CPU上的基于C语言的软件流水线,OpenCL流水线可实现至少40倍的性能提升,在高端台式CPU上的运行改善了5倍。
       
        I.引言
       
        历史上,MFP和打印机厂商都是开发定制ASIC或SoC器件来执行图像处理操作。这些ASIC/SoC器件包括图像流水线,用以接受来自CCD或CIS传感器的RGB数据,执行滤波、缩小/放大、色彩空间转换、图像分割和半色调操作。然后,由此产生的经处理的图像使用减色着色剂进行打印:青色、品红、黄色和黑色。其目标是在打印副本上精确地再现原始文档,而不引入视觉假像。
       
        在底层技术(如DDR内存和USB连接)变得过时之前,ASIC/SoC器件通常有三年的有限寿命。随着硅技术的不断萎缩,开发一个定制ASIC/SoC所需的投资在继续增加。一个采用双核处理器、必要的连接、DDR3内存控制器、图像处理、GPU、LCD控制器等的28纳米SoC的设计、开发和交付需要花费超过1000万美元的成本。
       
        取决于许多因素,大型SoC/ASIC器件的开发周期要花18至30个月,包括新IP的数量和大小、利用以往设计的能力、设计团队经验和成熟的有针对性的硅技术。
       
        打印机/MFP市场的产品周期是24到36个月的时间。打印机/MFP市场成长速度平缓,增加了以较低成本和较短开发周期提供更多功能的竞争压力[1].
       
        随着ASIC/SoC开发周期接近同一时间MFP产品的生命周期,MFP/打印机厂商需要一个新的平台来缩短开发和部署周期。基于SoC的OpenCL和FPGA的组合为解决这一难题提供了一个有趣的解决方案。
       
        II. MFP图像处理流水线背景
       
        一个重要的研究机构已经在文档图像处理领域积累了近20年的经验[2][3].大部分早期工作都侧重于图像处理的基础知识,包括提供统一色彩的校准输入传感器数据、去除来自传感器噪声的滤波,实现图像尺寸缩小或放大的缩放算法,以及实现使用二进制像素打印连续色调图像数据的半色调。当前的文档图像处理研究和开发处于图像分析、内容提取和数据压缩技术领域。[4][5][6]
       
        所有MFP文档图像处理产品都可执行一系列基本功能——复印、扫描和打印。图1用图形说明了一台个MFP设备的基本功能或流水线。复印和扫描的操作相类似,开始于从一个扫描设备到设备无关的彩色空间的原始RGB数据转换。复印操作进一步处理设备无关的色彩空间图像,并创建用于打印的CMYK图像。扫描操作在设备无关的色彩空间图像上执行一组不同的图像处理操作。这些操作可以包括:图像分析、用不同频率内容将图像分割为多个图像层、OCR、光学字符识别和数据压缩。然后,所产生的图像转被移到任一本地存储介质,如USB闪存驱动器或网络设备。
       
       
        图1:简化的MFP图像处理流水线

         
        图字:
       
        来自CCD或基于CIS扫描仪的RGB;分割
       
        扫描仪接口;校准和调整;CST(RGB到Lab);滤波器;缩放R E;CST(Lab到CMYK);调整;误差扩散;无损或有损压缩;解压缩调整和/或操作
       
        来自网络的PS/PCL/其他PDL;解译;显示列表;渲染器;位图或字节图;调整;半色调;无损压缩;图像存储;无损解压缩;图像调整;引擎接口
       
        有损解压缩;有损压缩;至引擎
       
        出口处理;至网络
       
        外部接口;微观图像处理操作;图像存储;通用CPU操作;宏观图像处理操作
       
        打印功能接收一个采用PDL(页面描述语言)的编码,或图形显示接口格式的文件。在采用PDL文件的情况下,MFP设备必须首先解释文档语言,并创建一个原始对象列表。渲染器捕获这些对象,并将其转换成数字CMYK位图/位图图像。所产生的数字图像可被进一步处理和随意压缩。GDI打印机不需要解释过程,因为传送到打印机的图像是一个显示对象的列表。
       
        一旦打印或复印流水线创建了CMYK位图/位图图像,图像即被发送到引擎在所需介质上打印。
       
        本文的重点是一个OpenCL MFP核心复印流水线(CCP)的开发,如图2所示。
       
       
        图2:核心复印流水线

         
        图字:
       
        滤波器;缩放R E;CST(Lab到CMYK);调整;误差扩散
       
        图像存储
       
        源图像5100x6600x24位LAB;目标图像5100x6600x32位CMYK
       
        III. MFP核心复印流水线
       
        CCP由5个内核组成:7×7滤波器;用pad/crop缩放或减小与放大;色彩空间转换;调整和误差扩散。我们将简要地回顾各个算法和相关的内存需求。
       
        A. 7×7滤波器
       
        7×7滤波器是一个2D对称滤波器,可降低图像噪声。它的每一行需要跨连续7行乘连续7个像素的49个像素的上下文(context)。MFP应用通常使用一组系数来实现一个平均或锐化滤波器。7×7滤波器的一般形式是:
       
        图3示出了该系数阵列和输入像素阵列。系数C0 - C9足以定义一个7×7滤波器。
           
       
       

        7×7系数阵列
       
        7×7输入像素阵列
       
        图3:7×7系数和输入滤波器阵列

         

          由于系数值经常重复,滤波处理可以避免重复的乘法和加法。相反,乘以相同系数的像素可首先加入,然后与滤波器系数相乘一次。图4直观地显示了潜在的优化。这个数字仅为了清晰起见,并不代表OpenCL设计。
       
       
        图4:滤波器工作矩阵

        图字:
          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控制器的新模式。




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2