基于多線陣CCDS相機的大幅面掃描儀高精度實時拼接實現新方法
0 引言
本文引用地址:http://butianyuan.cn/article/174975.htm基于多線陣CCDS相機的拼接型高精度大幅面掃描儀的研制一直是國內、外學者及產業(yè)界關注的重點領域,但是由于涉及精密光路設計心1、復雜機械平臺、完備硬件系統(tǒng)H1、友好人機界面、智能算法實現這五個關鍵技術,其中高精度實時拼接技術又是其中的重點難點。迄今為止,基于多線陣CCDS相機的拼接型高精度大幅面掃描儀的全部關鍵技術基本上被國外跨國公司與大型研究機構所壟斷,國內完全依靠進口。
高精度實時拼接技術是多線陣CCDS相機的大幅面掃描儀中的重點難點。由于線陣CCDS相機的視場有限,在視場范圍要求大掃描精度高的大幅面掃描儀應用背景下,單個三線陣CCDS相機顯然不能滿足需求,因此需要多個三線陣相機拼接實現。
拼接最重要的指標是保證圖像信息不丟失不錯位,最理想的情況是,所有三線陣CCDS相機保持在同一水平面,相鄰兩個相機采集圖像的像素連續(xù)。
為了適應拼接型多線陣CCDS大幅面掃描儀這一應用需求,通常采用光學拼接或光學拼接加入軟件后續(xù)處理¨01.光學拼接通過分光棱鏡將多個線陣CCDS相機首位相連,即前一級CCDS相機最后一個有效像素與下一級CCDS相機第1個有效像素相連,其精度要求偏差在1個像素以內,且多個CCDS相機所有像素必須在同一個水平面上,這對機械加工精度要求非常高,相應成本也非常高,其拼接精度隨著使用時間增加而降低。光學拼接加入軟件后續(xù)處理通過將相鄰兩個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個相機采集到的每一行數據分別連續(xù)存儲到SDRAM開辟的3個地址分塊里,因為SDRAM的地址與數據一一對應,知道每一行數據的首地址,通過對偏移量的設置,從指定每行數據首地址位開始連續(xù)讀取數據即可對3個相機的數據進行實時拼接。
1.2拼接過程中出現的實際情況與處理方法
實際過程中,由于機械平臺加工的精度問題,3個相機可能不在同一水平面上,并且相鄰兩相機的重疊像素部分也不一定相同,就造成常規(guī)數據傳輸中有錯位現象產生。根據實驗與分析,拼接過程中會出現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連續(xù)寫人H1+1行數據后需對寫入地址初始化,相機3連續(xù)寫人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連續(xù)寫入H1+H2+1行數據后需對寫入地址初始化,相機2連續(xù)寫入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連續(xù)寫入H1+1行數據后需對寫入地址初始化,相機3連續(xù)寫人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連續(xù)寫入Hl+l行數據后需對寫入地址初始化,相機3連續(xù)寫人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連續(xù)寫入H2一HI+1行數據后需對寫入地址初始化,相機2連續(xù)寫入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連續(xù)寫入H1+1行數據后需對寫入地址初始化,相機3連續(xù)寫入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方法執(zhí)行過程
多線陣CCDS相機的大幅面掃描儀高精度實時拼接實現新方法流程如圖3所示。根據主要器件的特性,上電后需對FPGA、SDRAM初始化,使其處于正常工作狀態(tài)。從上位機獲取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種狀態(tài)。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)。獲取預設值后就進行數據緩存,按照相機編號逐行讀出圖像數據,判斷讀地址是否需要初始化,按照相機編號逐行寫人圖像數據,判斷寫地址是否需要初始化,最后判斷是否接收到上位機發(fā)出的結束信號。
評論