Hls平台實現sobel算法(一)


   索貝爾(Sobel)算子主要用於邊緣檢測,根據像素點的上下、左右鄰點的灰度加權差與閾值進行比較,在邊緣處達到極值的方法實現邊緣檢測。

                                                                                                                                                                                                                             -------------序

一、原理性運行

   流水線操作,將輸入圖像從

(1)、hls::AXIvideo2Mat(INPUT_STREAM, img_0);
(2)、hls::Sobel<1,0,3>(img_0, img_1);
(3)、hls::SubS(img_1, pix, img_2);

(4)、hls::Scale(img_2, img_3, 2, 0);
(5)、hls::Erode(img_3, img_4);
(6)、hls::Dilate(img_4, img_5);
(7)、hls::Mat2AXIvideo(img_5, OUTPUT_STREAM);

第(1)步:

  將圖像轉換為Mat格式,是3個8位的像素數據,將轉換為mat格式的圖像命名為img_0,行、場高度為宏定義

第(2)步:

  將轉換為mat格式的圖像使用Sobel函數進行邊緣檢測,<1,0,3>分別代表橫向檢測、縱向檢測、檢測結果的size,可以為3x3,5x5,7x7。

第(3)步:

   元素級的從數組中間去標量,就是img_1減去輸入標量pix(10,10,10)

第(4)步:

    對sobel函數處理完畢的圖像進行比例計算,2為乘法因子,0為加法因子,

第(5)步: 第(6)步:

 首先對圖像進行膨脹處理,這樣邊緣更加明顯,然后進行侵蝕,作用是濾除毛刺

第(7)步:

   將膨脹、侵蝕的結果轉換為AXI形式,這樣才能在硬件平台進行傳輸

 

二、平台驗證

       

int main (int argc, char** argv)
{
    //獲取圖像數據
    IplImage* src = cvLoadImage(INPUT_IMAGE);
    IplImage* dst = cvCreateImage(cvGetSize(src), src->depth, src->nChannels);

    //使用HLS庫進行處理
    AXI_STREAM  src_axi, dst_axi;
    IplImage2AXIvideo(src, src_axi);
    hls_sobel(src_axi, dst_axi, src->height, src->width);
    AXIvideo2IplImage(dst_axi, dst);
    cvSaveImage(OUTPUT_IMAGE,dst);
    cvShowImage("hls_dst", dst);

//釋放內存 cvReleaseImage(&dst); }

其流程為:

      從頭文件中獲取輸入圖像,然后在內存空間中開辟出一塊源圖像大小的,每個像素占用為數為depth,源通道數目的存儲空間。

      然后將圖像轉為AXIstream格式加載到處理函數中,最后將輸出圖像dst進行顯示

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM