中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

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

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

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


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

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

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

         本項(xiàng)目把圖像數(shù)據(jù)轉(zhuǎn)換為.ELF文件格式,燒錄到NOR-Flash,在XPS的菜單下點(diǎn)擊Program Flash Memory,選擇自動(dòng)格式轉(zhuǎn)換,即可進(jìn)行燒錄,而且可以指定燒錄數(shù)據(jù)的位置。數(shù)據(jù)格式轉(zhuǎn)換利用Matlab軟件完成,程序如下:
        fid = fopen(′pic.elf′, ′w′);//打開(kāi)文件
        img =imread(′Image03.BMP′);//讀圖像數(shù)據(jù)
        imshow(img);//顯示圖像
        fwrite(fid,img.′);//寫(xiě)數(shù)據(jù)
        fclose(fid);//關(guān)閉文件
         由于是灰度圖像,只讀取其亮度值。圖像分辨率為640×480。寫(xiě)數(shù)據(jù)可以用fprintf函數(shù)或fwrite函數(shù),但是實(shí)驗(yàn)表明使用fprintf函數(shù)寫(xiě)數(shù)據(jù),文件大小302 kB,顯示圖像不正常;而使用fwrite函數(shù)寫(xiě)數(shù)據(jù)文件僅300 kB,顯示圖像正常。說(shuō)明兩種函數(shù)寫(xiě)數(shù)據(jù)方式本質(zhì)不同,造成寫(xiě)入數(shù)據(jù)格式不同。
         圖像顯示過(guò)程:先從Flash中每次一行把數(shù)據(jù)讀入BRAM,然后把每一位亮度值移位變?yōu)镽、G、B三位,再?gòu)腂RAM讀數(shù)據(jù)到SDRAM顯存,如此循環(huán)480次,用以顯示圖片。由于R、G、B值相同,顯示的便是灰度圖像。如果直接從Flash讀數(shù)據(jù)到SDRAM顯存,顯示圖像每行有不規(guī)則不連續(xù)的黑點(diǎn),甚至顯示不正常。顯存的設(shè)置在TFT-Controller IP中完成,顯存空間為2 MB,起始地址與SDRAM起始地址相同。
        3.3.2 程序移植[3]
         由于開(kāi)發(fā)環(huán)境不同,移植后程序在獨(dú)立系統(tǒng)上運(yùn)行,需要對(duì)OpenCV仿真程序做一些改正。FPGA編程系統(tǒng)支持C語(yǔ)言標(biāo)準(zhǔn)庫(kù)函數(shù),所以打印輸出顯示函數(shù)print()、動(dòng)態(tài)內(nèi)存分配函數(shù)malloc()可以直接使用。盡管printf()函數(shù)也可以用于打印輸出結(jié)果,但目的是把程序放入大小為32 KB的BRAM,實(shí)驗(yàn)表明它比print()函數(shù)占用空間大一倍。在OpenCV中,可以直接使用cvShowImage()、cvReleaseImage()、cvDestroyWindow()函數(shù)顯示圖像和釋放內(nèi)存空間,在移植程序中要自行設(shè)計(jì)這些函數(shù)。移植程序中subplot()函數(shù)用于在屏幕上顯示4幅圖像(降低分辨率源圖像、濾波圖像、閾值分割圖像、圖像),DeleteAllPointElems()函數(shù)用于釋放內(nèi)存空間。其他函數(shù),例如降低分辨率函數(shù)Dec()、濾波函數(shù)filter()、邊緣檢測(cè)函數(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);}//驗(yàn)證空間是否分配成功
        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的鐵軌檢測(cè)算法設(shè)計(jì)與研究

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


        上一頁(yè) 1 2 下一頁(yè)

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

        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉