国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺述Sobel算子在HLS上的實(shí)現(xiàn)教程

FPGA之家 ? 來(lái)源:FPGA科技室 ? 作者:FPGA科技室 ? 2021-07-23 14:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Sobel 原理介紹

索貝爾算子(Sobel operator)主要用作邊緣檢測(cè),在技術(shù)上,它是一離散性差分算子,用來(lái)運(yùn)算圖像亮度函數(shù)的灰度之近似值。在圖像的任何一點(diǎn)使用此算子,將會(huì)產(chǎn)生對(duì)應(yīng)的灰度矢量或是其法矢量Sobel 卷積因子為:

31c07d38-e10c-11eb-9e57-12bb97331649.png

該算子包含兩組 3x3 的矩陣,分別為橫向及縱向,將之與圖像作平面卷積,即可分別得出橫向及縱向的亮度差分近似值。如果以 A 代表原始圖像,Gx 及 Gy 分別代表經(jīng)橫向及縱向邊緣檢測(cè)的圖像灰度值,其公式如下:

31c8e838-e10c-11eb-9e57-12bb97331649.png

具體計(jì)算如下:

Gx = (-1)*f(x-1, y-1) + 0*f(x,y-1) + 1*f(x+1,y-1)

+(-2)*f(x-1,y) + 0*f(x,y)+2*f(x+1,y)

+(-1)*f(x-1,y+1) + 0*f(x,y+1) + 1*f(x+1,y+1)

= [f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1)]-[f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1)]

Gy =1* f(x-1, y-1) + 2*f(x,y-1)+ 1*f(x+1,y-1)

+0*f(x-1,y) 0*f(x,y) + 0*f(x+1,y)

+(-1)*f(x-1,y+1) + (-2)*f(x,y+1) + (-1)*f(x+1, y+1)

= [f(x-1,y-1)+2f(x,y-1)+f(x+1,y-1)]-[f(x-1, y+1) + 2*f(x,y+1)+f(x+1,y+1)]

其中 f(a,b), 表示圖像(a,b)點(diǎn)的灰度值;

圖像的每一個(gè)像素的橫向及縱向灰度值通過(guò)以下公式結(jié)合,來(lái)計(jì)算該點(diǎn)灰度的大小:

31d47bf8-e10c-11eb-9e57-12bb97331649.png

通常,為了提高效率 使用不開平方的近似值

31de8f8a-e10c-11eb-9e57-12bb97331649.png

Sobel 算子根據(jù)像素點(diǎn)上下、左右鄰點(diǎn)灰度加權(quán)差,在邊緣處達(dá)到極值這一現(xiàn)象檢測(cè)邊緣。對(duì)噪聲具有平滑作用,提供較為精確的邊緣方向信息,邊緣定位精度不夠高。當(dāng)對(duì)精度要求不是很高時(shí),是一種較為常用的邊緣檢測(cè)方法。

Sobel 算子在 HLS 上的實(shí)現(xiàn)

工程創(chuàng)建

Step1:打開 Vivado HLS 開發(fā)工具,單擊 Creat New Project 創(chuàng)建一個(gè)新工程,設(shè)置好工程路徑和工程名,一直點(diǎn)擊 Next 按照默認(rèn)設(shè)置

Step2:出現(xiàn)如下圖所示界面,時(shí)鐘周期 Clock Period 按照默認(rèn) 10ns,Uncertaintly 和 Solution Name 均按照默認(rèn)設(shè)置,點(diǎn)擊紅色箭頭部分選擇芯片類型,然后點(diǎn)擊 OK。

點(diǎn)擊 Finish,出現(xiàn)如下界面

32508d6a-e10c-11eb-9e57-12bb97331649.png

Step4:右單擊 Source 選項(xiàng),選擇 New File,創(chuàng)建一個(gè)名為 Top.cpp 的文件。(一定要加cpp后綴)

Step5:打開剛剛新建的cpp文件,進(jìn)入編輯狀態(tài),輸入以下代碼

325a9c06-e10c-11eb-9e57-12bb97331649.png

Top.cpp代碼

#include “top.h”

void hls_sobel(AXI_STREAM& INPUT_STREAM, AXI_STREAM&

OUTPUT_STREAM, int rows, int cols)

{

//Create AXI streaming interfaces for the core

#pragma HLS INTERFACE axis port=INPUT_STREAM

#pragma HLS INTERFACE axis port=OUTPUT_STREAM

#pragma HLS RESOURCE core=AXI_SLAVE variable=rows metadata=“- bus_bundle CONTROL_BUS”

#pragma HLS RESOURCE core=AXI_SLAVE variable=cols metadata=“-bus_bundle CONTROL_BUS”

#pragma HLS RESOURCE core=AXI_SLAVE variable=return metadata=“-bus_bundle CONTROL_BUS”

#pragma HLS INTERFACE ap_stable port=rows

#pragma HLS INTERFACE ap_stable port=cols

RGB_IMAGE img_0(rows, cols);

RGB_IMAGE img_1(rows, cols);

RGB_IMAGE img_2(rows, cols);

RGB_IMAGE img_3(rows, cols);

RGB_IMAGE img_4(rows, cols);

RGB_IMAGE img_5(rows, cols);

RGB_PIXEL pix(50, 50, 50);

#pragma HLS dataflow

hls::AXIvideo2Mat(INPUT_STREAM, img_0);

hls::Sobel《1,0,3》(img_0, img_1);

hls::SubS(img_1, pix, img_2);

hls::Scale(img_2, img_3, 2, 0);

hls::Erode(img_3, img_4);

hls::Dilate(img_4, img_5);

hls::Mat2AXIvideo(img_5, OUTPUT_STREAM)

}

Step6:再在 Source 中添加一個(gè)名為 Top.h 的庫(kù)函數(shù),并添加如下程序:

32656f00-e10c-11eb-9e57-12bb97331649.png

Top.h代碼

#ifndef TOP_H

#define TOP_H

#include “hls_video.h”

// maximum image size

#define MAX_WIDTH 512

#define MAX_HEIGHT 512

// I/O Image Settings

#define INPUT_IMAGE “l(fā)ena.jpg”

#define OUTPUT_IMAGE “result.jpg”

#define OUTPUT_IMAGE_GOLDEN “result_golden.jpg”

// typedef video library core structures

typedef hls::stream《ap_axiu《32,1,1,1 style=“font-size: inherit;color: inherit;line-height: inherit;”》》 AXI_STREAM;

typedef hls::Scalar《3, unsigned char》 RGB_PIXEL;

typedef hls::MatRGB_IMAGE;

// top level function for HW synthesis

void hls_sobel(AXI_STREAM& src_axi, AXI_STREAM& dst_axi, int rows, int cols);

#endif《/ap_axiu《32,1,1,1》

Step7:在 Test Bench 中,用同樣的方法添加一個(gè)名為 Test.cpp 的測(cè)試程序。添加如下代碼:

326e7546-e10c-11eb-9e57-12bb97331649.png

Test.cpp代碼

#include “top.h”

#include “opencv_top.h”

using namespace std;

using namespace cv;

int main (int argc, char** argv)

{

//獲取圖像數(shù)據(jù)

IplImage* src = cvLoadImage(INPUT_IMAGE);

IplImage* dst = cvCreateImage(cvGetSize(src), src-》depth, src-》nChannels);

//使用HLS庫(kù)進(jìn)行處理

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);

//使用OPENCV庫(kù)進(jìn)行處理

opencv_image_filter(src, dst);

cvShowImage(“cv_dst”, dst);

cvSaveImage(OUTPUT_IMAGE_GOLDEN,dst);

waitKey(0);

//釋放內(nèi)存

cvReleaseImage(&src);

cvReleaseImage(&dst);

}

Step8:用同樣的方法,再在 Test Bench 中創(chuàng)建一個(gè) opencv_top.cpp 和 opencv_top.h 文件,添加如下程序:

3278679a-e10c-11eb-9e57-12bb97331649.png

Opencv_top.cpp代碼

#include “opencv_top.h”

#include “top.h”

void opencv_image_filter(IplImage* src, IplImage* dst)

{

IplImage* tmp = cvCreateImage(cvGetSize(src), src-》depth, src-》nChannels);

cvCopy(src, tmp);

cv::Mat)tmp, (cv::Mat)dst, -1, 1, 0);

cvSubS(dst, cvScalar(50,50,50), tmp);

cvScale(tmp, dst, 2, 0);

cvErode(dst, tmp);

cvDilate(tmp, dst);

cvReleaseImage(&tmp);

}

void sw_image_filter(IplImage* src, IplImage* dst)

{

AXI_STREAM src_axi, dst_axi;

IplImage2AXIvideo(src, src_axi);

hls_sobel(src_axi, dst_axi, src-》height, src-》width);

AXIvideo2IplImage(dst_axi, dst);

}

opencv_top.h代碼

#ifndef OPENCV_TOP_H___ #define ___OPENCV_TOP_H

#include “hls_opencv.h”

void opencv_image_filter(IplImage* src, IplImage* dst);

void sw_image_filter(IplImage* src, IplImage* dst);

#endif

Step7:在 Test Bench 中添加一張名為 lena.jpg的測(cè)試圖片

接下來(lái)對(duì)工程進(jìn)行編譯和仿真

Step1:?jiǎn)螕?Project-Project settings 或直接單擊快捷按鈕。

329dac1c-e10c-11eb-9e57-12bb97331649.png

Step2:選擇 Synthesis 選項(xiàng),然后點(diǎn)擊 Browse.。指定一個(gè)頂層函數(shù),選定 hls_sobel 為頂層函數(shù),

單擊 開始綜合

32b39afe-e10c-11eb-9e57-12bb97331649.png

在協(xié)議類型里面我們可以看到我們主要使用了三種協(xié)議,分別是 axis、ap_stable 和 ap_ctrl_hs 三種,這些協(xié)議的詳細(xì)解釋我們均可以在官方手冊(cè) ug902 中找到,其中 ap_ctrl_hs 的時(shí)序操作如下圖所示,說(shuō)簡(jiǎn)單點(diǎn)就是復(fù)位完成等待 ap_start 信號(hào)開始進(jìn)行操作

綜合完畢,我們對(duì)代碼進(jìn)行仿真測(cè)試,單擊 開始仿真

33ed078e-e10c-11eb-9e57-12bb97331649.png

仿真結(jié)果如下,與通過(guò) OPENCV 實(shí)現(xiàn)的 Sobel 檢測(cè)結(jié)果基本一致。

33f6f532-e10c-11eb-9e57-12bb97331649.png

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • sobel
    +關(guān)注

    關(guān)注

    0

    文章

    12

    瀏覽量

    8210

原文標(biāo)題:Sobel 算子在 HLS 上的實(shí)現(xiàn)

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    一文掌握瑞芯微RK系列NPU算子支持全景:覆蓋6大平臺(tái),新增硬件加速算子,嵌入式AI開發(fā)不踩坑

    嵌入式 AI 領(lǐng)域,瑞芯微(Rockchip)RK 系列 NPU 憑借低功耗、高兼容性的特性,廣泛應(yīng)用于智能監(jiān)控、邊緣計(jì)算、物聯(lián)網(wǎng)設(shè)備等場(chǎng)景。近期發(fā)布的《RKNN Compiler Support
    的頭像 發(fā)表于 02-06 16:33 ?1026次閱讀
    一文掌握瑞芯微RK系列NPU<b class='flag-5'>算子</b>支持全景:覆蓋6大平臺(tái),新增硬件加速<b class='flag-5'>算子</b>,嵌入式AI開發(fā)不踩坑

    HLS設(shè)計(jì)中的BRAM使用優(yōu)勢(shì)

    高層次綜合(HLS)是一種將高級(jí)編程語(yǔ)言(如C、C++或SystemC)轉(zhuǎn)換為硬件描述語(yǔ)言(HDL)的設(shè)計(jì)方法。FPGA設(shè)計(jì)中,設(shè)計(jì)者可以靈活地利用FPGA內(nèi)部的資源,如塊RAM(BRAM)。雖然
    的頭像 發(fā)表于 01-28 14:36 ?244次閱讀

    通過(guò)vivado HLS設(shè)計(jì)一個(gè)FIR低通濾波器

    Vivado HLS是一款強(qiáng)大的高層次綜合工具,可將C/C++代碼轉(zhuǎn)換為硬件描述語(yǔ)言(HDL),顯著提升FPGA開發(fā)效率。
    的頭像 發(fā)表于 01-20 16:19 ?305次閱讀
    通過(guò)vivado <b class='flag-5'>HLS</b>設(shè)計(jì)一個(gè)FIR低通濾波器

    如何在TensorFlow Lite Micro中添加自定義操作符(2)

    一篇中,小編給大家抽絲剝繭的介紹了TFLm中實(shí)現(xiàn)一個(gè)算子所涉及的文件,以及每個(gè)文件的具體作用,包括:功能實(shí)現(xiàn)
    的頭像 發(fā)表于 12-26 10:53 ?1110次閱讀

    詳解JPEG解碼MCU實(shí)現(xiàn)挑戰(zhàn)

    物聯(lián)網(wǎng)和嵌入式應(yīng)用中,圖像處理早已不再是高性能處理器的專屬任務(wù)。越來(lái)越多的場(chǎng)景需要在資源受限的微控制器(MCU)實(shí)現(xiàn)圖像顯示,而JPEG (Joint Photographic Experts
    的頭像 發(fā)表于 12-26 10:29 ?997次閱讀

    蜂鳥處理器+OV5640攝像頭模塊開發(fā)

    的寄存器配置保存在查找表中,Reg Config模塊電后自動(dòng)將寄存器配置通過(guò)I2C接口發(fā)送給攝像頭;Frame Capture提供攝像頭的時(shí)鐘驅(qū)動(dòng),并接收其采集的RGB數(shù)據(jù),寫到FIFO中,F(xiàn)IFO實(shí)現(xiàn)
    發(fā)表于 10-31 07:59

    如何利用Verilog HDLFPGA實(shí)現(xiàn)SRAM的讀寫測(cè)試

    本篇將詳細(xì)介紹如何利用Verilog HDLFPGA實(shí)現(xiàn)SRAM的讀寫測(cè)試。SRAM是一種非易失性存儲(chǔ)器,具有高速讀取和寫入的特點(diǎn)。FPGA中
    的頭像 發(fā)表于 10-22 17:21 ?4341次閱讀
    如何利用Verilog HDL<b class='flag-5'>在</b>FPGA<b class='flag-5'>上</b><b class='flag-5'>實(shí)現(xiàn)</b>SRAM的讀寫測(cè)試

    深入解析面向不同市場(chǎng)的多樣化Arm計(jì)算子系統(tǒng)

    如果你曾基于 Arm 技術(shù)開發(fā)過(guò)產(chǎn)品,很大機(jī)會(huì)已經(jīng)感受到了 Arm 計(jì)算子系統(tǒng) (Arm Compute Subsystems, Arm CSS) 所帶來(lái)的強(qiáng)勁性能。
    的頭像 發(fā)表于 09-06 14:09 ?1020次閱讀
    深入解析面向不同市場(chǎng)的多樣化Arm計(jì)<b class='flag-5'>算子</b>系統(tǒng)

    使用VerilogFPGA實(shí)現(xiàn)FOC電機(jī)控制系統(tǒng)

    自動(dòng)駕駛、電動(dòng)滑板車、無(wú)人機(jī)甚至工業(yè)自動(dòng)化領(lǐng)域,高性能電機(jī)控制是不可或缺的核心技術(shù)。而如果你對(duì)硬件有足夠的熱情,你會(huì)發(fā)現(xiàn):傳統(tǒng)用 MCU 實(shí)現(xiàn) FOC(Field-Oriented Control,磁場(chǎng)定向控制)也能“搬”到 FPGA
    的頭像 發(fā)表于 08-21 15:27 ?5332次閱讀
    使用Verilog<b class='flag-5'>在</b>FPGA<b class='flag-5'>上</b><b class='flag-5'>實(shí)現(xiàn)</b>FOC電機(jī)控制系統(tǒng)

    基于切多道的晶圓切割 TTV 均勻性控制與應(yīng)力釋放技術(shù)

    一、引言 半導(dǎo)體制造中,晶圓總厚度變化(TTV)均勻性是決定芯片性能與良品率的關(guān)鍵因素,而切割過(guò)程產(chǎn)生的應(yīng)力會(huì)導(dǎo)致晶圓變形,進(jìn)一步惡化 TTV 均勻性。切多道工藝作為一種先進(jìn)的晶圓切割技術(shù),
    的頭像 發(fā)表于 07-14 13:57 ?612次閱讀
    基于<b class='flag-5'>淺</b>切多道的晶圓切割 TTV 均勻性控制與應(yīng)力釋放技術(shù)

    基于FPGA的壓縮算法加速實(shí)現(xiàn)

    本設(shè)計(jì)中,計(jì)劃實(shí)現(xiàn)對(duì)文件的壓縮及解壓,同時(shí)優(yōu)化壓縮中所涉及的信號(hào)處理和計(jì)算密集型功能,實(shí)現(xiàn)對(duì)其的加速處理。本設(shè)計(jì)的最終目標(biāo)是證明充分并行化的硬件體系結(jié)構(gòu) FPGA
    的頭像 發(fā)表于 07-10 11:09 ?2389次閱讀
    基于FPGA的壓縮算法加速<b class='flag-5'>實(shí)現(xiàn)</b>

    如何在Unified IDE中創(chuàng)建視覺(jué)庫(kù)HLS組件

    最近我們分享了開發(fā)者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 傳統(tǒng) IDE)和開發(fā)者分享|AMD Vitis HLS 系列 2:AMD
    的頭像 發(fā)表于 07-02 10:55 ?1439次閱讀
    如何在Unified IDE中創(chuàng)建視覺(jué)庫(kù)<b class='flag-5'>HLS</b>組件

    使用AMD Vitis Unified IDE創(chuàng)建HLS組件

    這篇文章開發(fā)者分享|AMD Vitis HLS 系列 1 - AMD Vivado IP 流程(Vitis 傳統(tǒng) IDE) 的基礎(chǔ)撰寫,但使用的是 AMD Vitis Unified IDE,而不是之前傳統(tǒng)版本的 Vitis
    的頭像 發(fā)表于 06-20 10:06 ?2327次閱讀
    使用AMD Vitis Unified IDE創(chuàng)建<b class='flag-5'>HLS</b>組件

    如何使用AMD Vitis HLS創(chuàng)建HLS IP

    本文逐步演示了如何使用 AMD Vitis HLS 來(lái)創(chuàng)建一個(gè) HLS IP,通過(guò) AXI4 接口從存儲(chǔ)器讀取數(shù)據(jù)、執(zhí)行簡(jiǎn)單的數(shù)學(xué)運(yùn)算,然后將數(shù)據(jù)寫回存儲(chǔ)器。接著會(huì)在 AMD Vivado Design Suite 設(shè)計(jì)中使用此 HLS
    的頭像 發(fā)表于 06-13 09:50 ?1865次閱讀
    如何使用AMD Vitis <b class='flag-5'>HLS</b>創(chuàng)建<b class='flag-5'>HLS</b> IP

    Vivado HLS設(shè)計(jì)流程

    為了盡快把新產(chǎn)品推向市場(chǎng),數(shù)字系統(tǒng)的設(shè)計(jì)者需要考慮如何加速設(shè)計(jì)開發(fā)的周期。設(shè)計(jì)加速主要可以從“設(shè)計(jì)的重用”和“抽象層級(jí)的提升”這兩個(gè)方面來(lái)考慮。Xilinx 推出的 Vivado HLS 工具可以
    的頭像 發(fā)表于 04-16 10:43 ?1622次閱讀
    Vivado <b class='flag-5'>HLS</b>設(shè)計(jì)流程