色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于FPGA的鐵軌檢測算法設(shè)計與研究

          基于FPGA的鐵軌檢測算法設(shè)計與研究

          作者: 時間:2011-09-27 來源:網(wǎng)絡(luò) 收藏


          3.2 OpenCV仿真結(jié)果
           本項目程序首先實現(xiàn)OpenCV仿真,然后移植到FPGA中。OpenCV提供的算法非常豐富,并且部分程序以C語言編寫,處理得當,不需要添加新的外部支持就可以完整的編譯連接生成執(zhí)行程序進行算法移植。本次仿真只運用“cv.h”和“highhui.h”兩個OpenCV庫,主要是運用其圖像加載、圖像顯示等函數(shù),而中值濾波、邊緣檢測、鐵軌搜索函數(shù)自行編寫。仿真結(jié)果如圖4所示。

          基于FPGA的鐵軌檢測算法設(shè)計與研究

          3.3 FPGA程序移植過程
          3.3.1 圖像輸入與顯示[3]

           本項目把圖像數(shù)據(jù)轉(zhuǎn)換為.ELF文件格式,燒錄到NOR-Flash,在XPS的菜單下點擊Program Flash Memory,選擇自動格式轉(zhuǎn)換,即可進行燒錄,而且可以指定燒錄數(shù)據(jù)的位置。數(shù)據(jù)格式轉(zhuǎn)換利用Matlab軟件完成,程序如下:
          fid = fopen(′pic.elf′, ′w′);//打開文件
          img =imread(′Image03.BMP′);//讀圖像數(shù)據(jù)
          imshow(img);//顯示圖像
          fwrite(fid,img.′);//寫數(shù)據(jù)
          fclose(fid);//關(guān)閉文件
           由于是灰度圖像,只讀取其亮度值。圖像分辨率為640×480。寫數(shù)據(jù)可以用fprintf函數(shù)或fwrite函數(shù),但是實驗表明使用fprintf函數(shù)寫數(shù)據(jù),文件大小302 kB,顯示圖像不正常;而使用fwrite函數(shù)寫數(shù)據(jù)文件僅300 kB,顯示圖像正常。說明兩種函數(shù)寫數(shù)據(jù)方式本質(zhì)不同,造成寫入數(shù)據(jù)格式不同。
           圖像顯示過程:先從Flash中每次一行把數(shù)據(jù)讀入BRAM,然后把每一位亮度值移位變?yōu)镽、G、B三位,再從BRAM讀數(shù)據(jù)到SDRAM顯存,如此循環(huán)480次,用以顯示圖片。由于R、G、B值相同,顯示的便是灰度圖像。如果直接從Flash讀數(shù)據(jù)到SDRAM顯存,顯示圖像每行有不規(guī)則不連續(xù)的黑點,甚至顯示不正常。顯存的設(shè)置在TFT-Controller IP中完成,顯存空間為2 MB,起始地址與SDRAM起始地址相同。
          3.3.2 程序移植[3]
           由于開發(fā)環(huán)境不同,移植后程序在獨立系統(tǒng)上運行,需要對OpenCV仿真程序做一些改正。FPGA編程系統(tǒng)支持C語言標準庫函數(shù),所以打印輸出顯示函數(shù)print()、動態(tài)內(nèi)存分配函數(shù)malloc()可以直接使用。盡管printf()函數(shù)也可以用于打印輸出結(jié)果,但目的是把程序放入大小為32 KB的BRAM,實驗表明它比print()函數(shù)占用空間大一倍。在OpenCV中,可以直接使用cvShowImage()、cvReleaseImage()、cvDestroyWindow()函數(shù)顯示圖像和釋放內(nèi)存空間,在移植程序中要自行設(shè)計這些函數(shù)。移植程序中subplot()函數(shù)用于在屏幕上顯示4幅圖像(降低分辨率源圖像、濾波圖像、閾值分割圖像、圖像),DeleteAllPointElems()函數(shù)用于釋放內(nèi)存空間。其他函數(shù),例如降低分辨率函數(shù)Dec()、濾波函數(shù)filter()、邊緣檢測函數(shù)edge(),可以完全使用OpenCV中的程序,不需要做修改。移植后主程序如下:
          int main()
          { print("rn-- Entering main() --rn");
          SourceImage=(Xuint8*)malloc(640×480);
          DecImage=(Xuint8*)malloc(320×240);
          FilterImage=(Xuint8*)malloc(320×240);
          EdgeImage=(Xuint8*)malloc(320×240);
          ResultImage3=(Xuint8*)malloc(320×240);
          //為圖像分配內(nèi)存空間
          if (SourceImage==NULL)
          {print("rn--mem allo fail--rn");
          exit(1);}//驗證空間是否分配成功
          XTft_Initialize(Tft, TFT_DEVICE_ID);
          //TFT顯示初始化
          XromTftTestColor("black", 0);
          //顯示背景設(shè)置為黑色
          flbuf=(unsigned char*)Flash_BASEADDR;
          //設(shè)置Flash圖像基地址指針
          p=SourceImage;//設(shè)置源圖像指針
          for (y=0;yHEIGHT;y++)
          {rowpoint1=flbuf+y*WIDTH;
          for(x=0;xWIDTH;x++)
          {data1=*(rowpoint1+x);
          *p++=data1;
          } }//讀源圖像數(shù)據(jù)
          dec(SourceImage,DecImage);
          filter(DecImage,F(xiàn)ilterImage,320);
          edge(FilterImage,EdgeImage,320);
          //圖像降低分辨率、濾波、邊緣化
          nt areanum=0;
          GetFeature(EdgeImage,320,240,
          ConnLabel,pFeatures,areanum);
          //邊緣提取,搜索連通域
          GetRailArea(320,240,pFeatures,
          areanum,lowLeftRail,lowRightRail);
          //搜索鐵軌區(qū)域,獲得左右軌
          int i, j;
          for (i=1; i = areanum;i++){
          DeleteAllPointElems(pFeatures[i]);}
          //釋放內(nèi)存空間
          int Left,Right;
          for(i=1;i240; i++){
          Left=lowLeftRail[i];
          Right=lowRightRail[i];
          if((Left>0)(Right>0)){
          for(j=Left;j=Right;j++){
          *(TrackImage+i*320+j)=255;}}}
          //填充鐵軌左右軌之間區(qū)域
          subplot(DecImage,1);
          subplot(FilterImage,2);
          subplot(EdgeImage,3);
          subplot(TrackImage,4);
          //顯示4幅處理圖像
          print("-- Exiting main() --rn");
          }
           FPGA結(jié)果如圖5所示。

          基于FPGA的鐵軌檢測算法設(shè)計與研究

           本文實現(xiàn)基于FPGA的算法,首先完成OpenCV程序仿真,然后移植到FPGA構(gòu)建的硬件系統(tǒng)中,可以成功檢測出鐵軌所在區(qū)域,并在一定條件下進行鐵軌智能延長。研究結(jié)果表明,檢測一幅分辨率為640×480圖像,大約需要30 s,如果應(yīng)用于實時視頻流系統(tǒng)中,則硬件平臺設(shè)計需要進行精簡,以提高速度。也可考慮基于硬核、多核技術(shù),來提高處理速度,以滿足實時視頻流處理。


          上一頁 1 2 下一頁

          關(guān)鍵詞: 圖像處理 鐵軌檢測

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉