摘要:提出了一种能实现多线阵CCDS相机大幅面扫描仪实时高精度拼接的新方法,并制作了国内首台大幅面扫描仪。该方法的基本原理是将传统大幅面扫描仪中采用复杂机械系统与软件系统相结合完成的快速高精度拼接工作,移植到FPGA与SDRAM相结合的硬件平台实现。实验结果及实际应用效果表明:采用该高精度实时拼接新方法的多线阵CCD相机的大幅面扫描仪,在1 200 DPI分辨率、AO幅面、2.54 cm/s扫描率下,能够实时拼接3个三线阵CCD相机的图像数据,拼接精度为+1/一1像素,能成功满足大幅面扫描仪的需求。据我们所知,在应用上成功实现大幅面拼接型高精度一次性成像扫描仪的高精度实时拼接,国内、未见报道。
0 引言
基于多线阵CCDS相机的拼接型高精度大幅面扫描仪的研制一直是国内、外学者及产业界关注的重点领域,但是由于涉及精密光路设计心1、复杂机械平台、完备硬件系统H1、友好人机界面、智能算法实现这五个关键技术,其中高精度实时拼接技术又是其中的重点难点。迄今为止,基于多线阵CCDS相机的拼接型高精度大幅面扫描仪的全部关键技术基本上被国外跨国公司与大型研究机构所垄断,国内完全依靠进口。
高精度实时拼接技术是多线阵CCDS相机的大幅面扫描仪中的重点难点。由于线阵CCDS相机的视场有限,在视场范围要求大扫描精度高的大幅面扫描仪应用背景下,单个三线阵CCDS相机显然不能满足需求,因此需要多个三线阵相机拼接实现。
拼接最重要的指标是保证图像信息不丢失不错位,最理想的情况是,所有三线阵CCDS相机保持在同一水平面,相邻两个相机采集图像的像素连续。
为了适应拼接型多线阵CCDS大幅面扫描仪这一应用需求,通常采用光学拼接或光学拼接加入软件后续处理¨01.光学拼接通过分光棱镜将多个线阵CCDS相机首位相连,即前一级CCDS相机最后一个有效像素与下一级CCDS相机第1个有效像素相连,其精度要求偏差在1个像素以内,且多个CCDS相机所有像素必须在同一个水平面上,这对机械加工精度要求非常高,相应成本也非常高,其拼接精度随着使用时间增加而降低。光学拼接加入软件后续处理通过将相邻两个CCDS相机有效像素进行重叠以此保证图像信息不丢失,然后将采集到的图像信息保存在电脑内存里,通过软件算法将每个相机采集到的图像数据上下左右平移进行拼接,这种拼接方式对机械的精度要求有所降低,但是对电脑配置要求较高,拼接时间较长需要2 s一3 s,对大幅面扫描仪的实时性有一定影响¨2|.
针对这一问题,笔者深人研究了FPGA/SDRAM/'CCDS的内部结构,通过多次试验验证,提出了一种新的基于多线阵CCDS相机的大幅面扫描仪高精度实时拼接实现新方法一硬件拼接法。
1 基本理论
1.1拼接原理
为了保证相邻相机首尾相连处数据不丢失,必须使两相机之间有效像素部分重合,如图1拼接原理图所示。
相机1与相机2重叠W1个像素,相机2与相机3重叠W2个像素。将SDRAM的地址分为3个地址分块,相机1对应的初始地址为ADDRESS-1,相机2对应的初始地址为ADDRESS-2,相机3对应的初始地址为ADDRESS_3.三线阵CCDS相机逐行扫描,将3个相机采集到的每一行数据分别连续存储到SDRAM开辟的3个地址分块里,因为SDRAM的地址与数据一一对应,知道每一行数据的首地址,通过对偏移量的设置,从指定每行数据首地址位开始连续读取数据即可对3个相机的数据进行实时拼接。
1.2拼接过程中出现的实际情况与处理方法
实际过程中,由于机械平台加工的精度问题,3个相机可能不在同一水平面上,并且相邻两相机的重叠像素部分也不一定相同,就造成常规数据传输中有错位现象产生。根据实验与分析,拼接过程中会出现6种可能情况,如图2(a)、2(b)、2(c)、2(d)、2(e)、2(f)所示。
图2(a)为相机l水平位置大于相机2水平位置。相机2水平位置大于相机3水平位置时,图像有效数据错位情况。图2(b)为相机1水平位置小于相机2水平位置,相机2水平位置小于相机3水平位置时。图像有效数据错位情况。图2(c)为相机2水平位置大于相机l水平位置,相机l水平位置大于相机3水平位置时,图像有效数据错位情况。
图2(d)为相机2水平位置大于相机3水平位置,相机3水平位置大于相机1水平位置时,图像有效数据错位情况。图2(e)为相机3水平位置大于相机1水平位置,相机1水平位置大于相机2水平位置时,图像有效数据错位情况。图2(f)为相机1水平位置大于相机3水平位置,相机3水平位置大于相机2水平位置时,图像有效数据错位情况。
因此需要先确定扫描仪3个相机处于何种位置情况,相机每一行像素个数为L=5340个,上位机根据特定情况设定H1、H2、W1、w2的值,根据H1、H2、W1、W2的预设值计算出需要缓存数据最大行数,相机2每行缓存数据的读出首地址与末地址,相机3每行缓存数据的读出首地址与末地址,最后顺序读写出每一个相机缓存数据传输到上位机实时显示。
图2所示6种情况中的写缓存初始地址都是一致的,即,相机1写缓存初始地址ADDRESS-WRITEBUFFER.1=ADDRESS一1,相机2写缓存初始地址ADDRESS-WRITEBUFFER_2=ADDRESS_2,相机写缓存初始地址ADDRESS-WRITEBUFFER一3=ADDRESS_3.
针对图2(a)的情况,需缓存BUFFER-LINE=H1+H2+1行数据,相机2连续写人H1+1行数据后需对写入地址初始化,相机3连续写人H1+H2+1行数据后需对写入地址初始化。相机1写初始地址ADDRESS-WRITE一1=ADDRESS一1+(H2一H1)·L+H2一H1,相机2写初始地址ADDRESS-WRITE一2=ADDREsS一2+H2·L+H2,相机3写初始地址ADDRESS-Wr{ITE_3=ADDRESS_3.相机1读初始地址ADDRESS-READ一1=ADDRESS一1+(H1+H2)·L+H1+H2,相机2读初始地址ADDRESS-READ_2=ADDRESS_2+H2·L+W1+H2,相机3读初始地址ADDRESS-READ_3=ADDRESS._3+W2.
针对图2(b)的情况,需缓存BUFFER-LINE=HI+H2+l行数据,相机1连续写入H1+H2+1行数据后需对写入地址初始化,相机2连续写入H2+l行数据后需对写人地址初始化。相机1写初始地址ADDRESS-WRITE一1=ADDRESS一1,相机2写初始地址ADDRESS-WrtlTE_2=ADDRESS_2+H1·L+H1,相机3写初始地址ADDRKSS_WRrI'E_3=ADDRESS_3+(H1+H2)·L+H1+H2.相机1读初始地址ADDRESS-READ一1=ADDRESS一1,相机2读初始地址ADDRESS-READ一2=ADDRESS一2+H1·L+W1+Hl,相机3读初始地址ADDRESS-READ一3=ADDRESS 3+(Hl+H2)·L+Hl+H2+W2.
针对图2(c)的情况,需缓存BUFFER-LINE=H2+1行数据,相机1连续写入H1+1行数据后需对写入地址初始化,相机3连续写人H2+1行数据后需对写入地址初始化。相机1写初始地址ADDRESS-WRITE一1=ADDRESS一1+(H2一H1)·L+H2一H1,相机2写初始地址ADDRESS-WRITE一2=ADDRESS一2+H2·L+H2,相机3写初始地址ADDRESS-WRITE_3=ADDRESS一3.相机1读初始地址ADDRESS_READ一1=ADDRESs一1+(H2一H1)·L+H2一H1,相机2读初始地址ADDRESS-READ一2=ADDRESS一2+I-12·L+w1+H2,相机3读初始地址ADDRESS_READ_3=ADDRESS_3+W2.
针对图2(d)的情况,需缓存BUFFER-LINE=Hl+1行数据,相机l连续写入Hl+l行数据后需对写入地址初始化,相机3连续写人H2+1行数据后需对写入地址初始化。相机1写初始地址ADDRESS-WRITE一1=ADDRESS一1,相机2写初始地址ADDRESS-WRITE一2=ADDRESS一2+H1·L+W1+HI,相机3写初始地址ADDRESS-WRITE一3=ADDRESS._3+(H1一H2)·L+HI-H2.相机1读初始地址ADDRESS-READ一1=ADDRESS一1,相机2读初始地址ADDRESS-READ一2=ADDRESS一2+Hl·L+W1+H1,相机3读初始地址ADDRESS-READ一3=ADDRESS_3+(H1一H2)·L+H1一H2+W2.
针对图2(e)的情况,需缓存BUFFER-LINE=H2+1行数据,相机1连续写入H2一HI+1行数据后需对写入地址初始化,相机2连续写入H2+1行数据后需对写入地址初始化。相机1写初始地址ADDRESS-WRITE一1=ADDRESS一1+H1·L+H1,相机2写初始地址ADDRESS-WRITE一2=ADDRESS一2,相机3写初始地址ADDRESS-WRITE-3=ADDRESS一3+H2·L+H2.相机1读初始地址ADDRESS-READ一1=ADDRESS一1+HI·L+H1,相机2读初始地址ADDRESS-rtE,~D._2=ADDRESS_2+Wl,相机3读初始地址ADDRESS-r{EAD_3=ADDRESS_3+H2·L+H2+W2.
针对图2(f)的情况,需缓存BUFFER-LINE=H1+l行数据,相机2连续写入H1+1行数据后需对写入地址初始化,相机3连续写入H1一H2+1行数据后需对写入地址初始化。相机1写初始地址ADDRESS-WRITE一1=ADDRESS一1+H1·L+H1,相机2写初始地址ADDRESS-WRITE一2=ADDRESS一2,相机3写初始地址ADDRESS_WRITE_3=ADDRESS_3+H2·L+H2.相机1读初始地址ADDRESS-READ一1=ADDRESS一1+H1·L+H1,相机2读初始地址ADDRESS-READ_2=ADDRESS_2+W1,相机3读初始地址ADDRESS-READ一3=ADDRESS一3+H2·L+H2+W2.
2实验结果与讨论
2.1方法执行过程
多线阵CCDS相机的大幅面扫描仪高精度实时拼接实现新方法流程如图3所示。根据主要器件的特性,上电后需对FPGA、SDRAM初始化,使其处于正常工作状态。从上位机获取H1、H2、W1、W2的预设值,判别相机位置处于何种情况。定义H1最高位为1时,相机l水平位置高于相机2水平位置,H1最高位位为0时,相机1水平位置低于相机2水平位置。定义I-12最高位为1时,相机2水平位置高于相机3水平位置,H2最高位为0时,相机2水平位置低于相机3水平位置。图2所示6种情况分对应H1、H2预设值的6种状态。H1最高位为1,H2最高位为l时对应图2(a);H1最高位为0,H2最高位为0时对应图2(b);HI最高位为0,I-12最高位为1,且Hl小于I-12时对应图2(c);H1最高位为0,H2最高位为l,且H1大于等于H2时对应图2(d);H1最高位为l,H2最高位为0,且H1小于H2时对应图2(e),Hl最高位为1,H2最高位0,且Hl大于等于H2时对应图2(f)。获取预设值后就进行数据缓存,按照相机编号逐行读出图像数据,判断读地址是否需要初始化,按照相机编号逐行写人图像数据,判断写地址是否需要初始化,最后判断是否接收到上位机发出的结束信号。
2.2大幅面扫描仪上的实际使用效果
采用多线阵CCDS相机的大幅面扫描仪高精度实时拼接实现新方法后,3个相机图像数据能够实时拼接传输,图像水平错位现象得以解决,重叠部分裁剪后实现无缝拼接。经分析测试,H1=56,H2=6,W1=118,W2=168,且Hl最高位为0,I-12最高位为0,即对应图2(b)所示情况。图4(a)为采用新方法前相机1与相机2拼接效果图,图4(b)为采用新方法后相机1与相机2拼接效果图。图5(a)为采用新方法前相机2与相机3拼接效果图,图5(b)为采用新方法后相机2与相机3拼接效果图。图6为拼接型大幅面扫描仪整机图,图7为硬件拼接核心板。
3 结论
通过对基于多线阵CCDS相机的大幅面扫描仪拼接方法的深入分析,并比较现有的通行方式,提出了一种高精度实时拼接的新方法,制作了国内第一台基于多线阵CDDS相机的拼接型大幅面扫描仪,解决了拼接过程中水平错位、无缝拼接的难题。
实验及测试结果表明:项目组制作的大幅面扫描仪最大幅面A0,光学分辨率高达l 200 DPI,扫描速度达到2.54 cm/s,扫描及拼接精度能达到+/一l像素,能够进行实时拼接传输。
高精度实时拼接新方法在该扫描装备的成功实施。解决了在基于多线阵CCDS相机的大幅面拼接型高精度扫描仪的诸多难题,填补了该领域的工程应用空白。据我们所知,在应用上成功实现大幅面拼接性高精度一次性成像扫描仪的高精度实时硬件拼接,国内、外未见报道。
在以后的工作中,将对高精度实时硬件拼接进行进一步的优化处理,并在速度保障的情况下,争取进一步提高图像质量,能够更加接近理想状态。