在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

FPGA圖像處理的Sobel邊緣檢測

FPGA之家 ? 來源:似猿非猿的FPGA ? 作者:似猿非猿的FPGA ? 2021-03-22 09:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Sobel邊緣檢測

Sobel邊緣檢測原理教材網上一大堆,核心為卷積處理。

Sobel卷積因子為:

587a489a-8924-11eb-8b86-12bb97331649.png

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

589be176-8924-11eb-8b86-12bb97331649.png

圖像的每一個像素的橫向及縱向灰度值通過以下公式結合,來計算該點灰度的大小:

58c78876-8924-11eb-8b86-12bb97331649.png

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

5903a144-8924-11eb-8b86-12bb97331649.png

最后,當計算出來的值大于某一閾值時即認為為邊緣像素點。

歸結起來,Sobel邊緣檢測分為三大步:卷積計算、灰度計算、閾值比較處理。結合上文實現的bufWindow,在SpinalHDL里實現Sobel邊緣檢測也就幾行代碼的事情(如果是寫Verilog我還是拒絕的)。

卷積計算

通過bufWindow,我們可以得到一個3x3的矩陣窗口,拿到結果第一步即是計算卷積,由于卷積因子是帶符號的,而在做卷積時又需要考慮位寬擴展的事情,在寫Verilog時還是需要小心的設計下的,而在SpinalHDL里,兩行代碼:

val Gx=(windowbuf.io.dataOut.payload(0)(2).expand.asSInt-^windowbuf.io.dataOut.payload(0)(0).expand.asSInt)+| ((windowbuf.io.dataOut.payload(1)(2).expand.asSInt-^windowbuf.io.dataOut.payload(1)(0).expand.asSInt)《《1)+| (windowbuf.io.dataOut.payload(2)(2).expand.asSInt-^windowbuf.io.dataOut.payload(2)(0).expand.asSInt)val Gy=(windowbuf.io.dataOut.payload(0)(0).expand.asSInt-^windowbuf.io.dataOut.payload(2)(0).expand.asSInt)+| ((windowbuf.io.dataOut.payload(0)(1).expand.asSInt-^windowbuf.io.dataOut.payload(2)(1).expand.asSInt)《《1)+| (windowbuf.io.dataOut.payload(0)(2).expand.asSInt-^windowbuf.io.dataOut.payload(2)(2).expand.asSInt)

首先將bufWindow輸出的窗口矩陣值擴展一位位寬轉換為有符號值,然后進行計算卷積。計算卷積運用了兩個運算符“-^”,“+|”來處理加減運算時的位寬處理(可參照SpinalHDL手冊或本公眾號的《SpinalHDL—數據類型:UInt/SIn》)。最終得到Gx、Gy。

灰度計算

灰度計算這里采用近似值,通過取絕對值的方式進行實現,在SpinalHDL里也就一行代碼的事情:

sobelResult.payload:= (sobelConv.payload(0).abs+| sobelConv.payload(1).abs).fixTo(cfg.dataWidth-1 downto 0,RoundType.ROUNDUP)

由于在卷積計算時有擴展位寬,這里計算最后調用fixTo進行高位飽和處理。最終得到位寬與輸入保持一致(想想你在Veirlog里實現這一步要做多少事情,少年)。

閾值比較

閾值比較就很簡單了,比較兩個值大小取兩個極端:

when(sobelResult.payload》io.thresholdValue){ io.dataOut.payload:=(default-》true) }otherwise{ io.dataOut.payload:=(default-》false) }

最終實現Sobel邊緣檢測代碼如下:

case class sobelProc(cfg:lineBufferCfg) extends Component{ require(cfg.lineNum==3) val io=new Bundle{ val thresholdValue =in UInt(cfg.dataWidth bits) val dataIn=slave Flow(UInt(cfg.dataWidth bits)) val dataOut=master Flow(UInt(cfg.dataWidth bits)) dataOut.valid.setAsReg().init(False) dataOut.payload.setAsReg().init(0) } noIoPrefix() val sobel=new Area{ val windowbuf=bufWindow(cfg) val sobelConv=Reg(Flow(Vec(SInt(),2))) val sobelResult=Reg(Flow(UInt(cfg.dataWidth bits))) sobelConv.valid.init(False) sobelResult.valid.init(False) io.dataIn《》windowbuf.io.dataIn val Gx=(windowbuf.io.dataOut.payload

(0)(2).expand.asSInt-^windowbuf.io.dataOut.payload(0)(0).expand.asSInt)+| ((windowbuf.io.dataOut.payload(1)(2).expand.asSInt-^windowbuf.io.dataOut.payload(1)(0).expand.asSInt)《《1)+| (windowbuf.io.dataOut.payload(2)(2).expand.asSInt-^windowbuf.io.dataOut.payload(2)(0).expand.asSInt) val Gy=(windowbuf.io.dataOut.payload(0)(0).expand.asSInt-^windowbuf.io.dataOut.payload(2)(0).expand.asSInt)+| ((windowbuf.io.dataOut.payload

(0)(1).expand.asSInt-^windowbuf.io.dataOut.payload(2)(1).expand.asSInt)《《1)+| (windowbuf.io.dataOut.payload(0)(2).expand.asSInt-^windowbuf.io.dataOut.payload(2)(2).expand.asSInt) sobelConv.valid:=windowbuf.io.dataOut.valid sobelConv.payload(0):=Gx sobelConv.payload(1):=Gy sobelResult.valid:=sobelConv.valid sobelResult.payload:= (sobelConv.payload(0).abs+| sobelConv.payload(1).abs).fixTo(cfg.dataWidth-1 downto 0,RoundType.ROUNDUP) io.dataOut.valid:=sobelResult.valid when(sobelResult.payload》io.thresholdValue){ io.dataOut.payload:=(default-》true) }otherwise{ io.dataOut.payload:=(default-》false) } }}

區區不到四十行代碼,簡潔而優雅,基本上就是描述算法,出錯概率應該很小吧!

仿真

做圖像處理的小伙伴想想在做仿真驗證時需要怎么搞,matlab生成灰度圖像二進制數據放在文件里,然后仿真時再導入,仿真完成后將結果保存到文件里,最后再在matlab里做對比。 太麻煩。SpinalHDL提供了仿真支持,而SpinalHDL是基于Scala的,可以完美實現整個仿真驗證流程:從圖片直接獲取數據,然后進行仿真驗證,仿真結果直接再次生成圖片。

原文標題:FPGA圖像處理——老戲新說

文章出處:【微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1645

    文章

    22021

    瀏覽量

    617241
  • 仿真
    +關注

    關注

    52

    文章

    4257

    瀏覽量

    135618

原文標題:FPGA圖像處理——老戲新說

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    FPGA上的圖像處理算法集成與優化

    本文詳細介紹了多種圖像處理技術,包括RG/GB單通道提取、亮度和對比度調整、圖像反轉、均值濾波、高斯濾波、圖像銳化、中值濾波、閾值分割、邊緣
    的頭像 發表于 02-14 13:46 ?602次閱讀
    <b class='flag-5'>FPGA</b>上的<b class='flag-5'>圖像</b><b class='flag-5'>處理</b>算法集成與優化

    基于FPGA圖像邊緣檢測設計

    今天給大俠帶來基于 FPGA圖像邊緣檢測設計,話不多說,上貨。 設計流程如下:mif文件的制作→?調用 ip 核生成rom以及仿真注意問題→?灰度
    的頭像 發表于 02-10 11:30 ?623次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>圖像</b><b class='flag-5'>邊緣</b><b class='flag-5'>檢測</b>設計

    FPGA圖像處理基礎----實現緩存卷積窗口

    像素行與像素窗口 一幅圖像是由一個個像素點構成的,對于一幅480*272大小的圖片來說,其寬度是480,高度是272。在使用FPGA進行圖像處理時,最關鍵的就是使用
    的頭像 發表于 02-07 10:43 ?777次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>圖像</b><b class='flag-5'>處理</b>基礎----實現緩存卷積窗口

    AI模型部署邊緣設備的奇妙之旅:如何在邊緣端部署OpenCV

    圖像中的特征或者創建掩碼。 邊緣檢測 Canny 邊緣檢測 (cv2.Canny) 或 Sobel
    發表于 12-14 09:31

    傅立葉變換在圖像處理中的作用

    傅里葉變換在圖像處理中發揮著至關重要的作用。以下是傅里葉變換在圖像處理中的幾個主要作用: 一、圖像增強與去噪 去噪 :
    的頭像 發表于 12-06 16:55 ?2220次閱讀

    友思特方案 精析“蟬翼”:FPGA圖像處理方案助力鋰電池高速產線檢測新升級

    為新能源鋰電行業賦能第二站:FPGA高精度圖像采集與處理解決方案! 薄如蟬翼的鋰電池薄膜材料在高速產線上生產而成,實時檢測并精準分析其質量,依托于友思特
    的頭像 發表于 12-04 15:56 ?550次閱讀
    友思特方案  精析“蟬翼”:<b class='flag-5'>FPGA</b><b class='flag-5'>圖像</b><b class='flag-5'>處理</b>方案助力鋰電池高速產線<b class='flag-5'>檢測</b>新升級

    FPGA 實時信號處理應用 FPGA圖像處理中的優勢

    優勢之一是其并行處理能力。與傳統的CPU或GPU相比,FPGA可以同時執行多個操作,這在圖像處理中尤為重要,因為圖像
    的頭像 發表于 12-02 10:01 ?1788次閱讀

    FPGA圖像處理領域的優勢有哪些?

    FPGA(Field Programmable Gate Array,現場可編程門陣列)在圖像處理領域具有顯著的優勢,這些優勢主要體現在以下幾個方面: 一、高并行處理能力
    發表于 10-09 14:36

    基于 DSP5509 進行數字圖像處理Sobel 算子邊緣檢測的硬件連接電路圖

    使用 FPGA 或專用的圖像處理芯片與 DSP5509 協同工作,提高邊緣檢測的速度。 并行處理
    發表于 09-25 15:25

    DSP國產教學實驗箱_實驗案例_操作教程:5-11 邊緣檢測

    搜索,可到達的點是邊緣,不可到達的點不是邊緣。 (5)利用滯后技術來跟蹤邊界。 程序流程設計 程序流程設計中首先要讀取工程目錄下的BMP圖像,接著進行邊緣
    發表于 07-19 10:38

    圖像邊緣檢測系統的設計流程

    圖像邊緣檢測系統的設計流程是一個涉及多個步驟的復雜過程,它旨在從圖像中提取出重要的結構信息,如邊界、輪廓等。這些邊緣信息對于
    的頭像 發表于 07-17 16:39 ?711次閱讀

    基于FPGA圖像采集與顯示系統設計

    源和固有的并行處理能力,在數字信號處理、硬件加速、汽車電子等領域得到了廣泛應用。在圖像采集與顯示系統中,FPGA能夠實現高速、并行的數據處理
    的頭像 發表于 07-17 10:58 ?2785次閱讀

    圖像識別算法都有哪些方法

    傳統方法和基于深度學習的方法。 傳統圖像識別算法 1.1 邊緣檢測 邊緣檢測圖像識別的基礎,它
    的頭像 發表于 07-16 11:14 ?7393次閱讀

    opencv圖像識別有什么算法

    圖像識別算法: 邊緣檢測邊緣檢測圖像識別中的基本步驟之一,用于識別
    的頭像 發表于 07-16 10:40 ?1856次閱讀

    圖像處理中的卷積運算

    卷積運算是圖像處理中一種極其重要的操作,廣泛應用于圖像濾波、邊緣檢測、特征提取等多個方面。它基于一個核(或稱為卷積核、濾波器)與
    的頭像 發表于 07-11 15:15 ?3882次閱讀
    主站蜘蛛池模板: 欧美12一13高清视频 | 亚洲九色 | 精品三级国产精品经典三 | 永久免费观看黄网站 | 亚欧人成精品免费观看 | 国内一区二区三区精品视频 | 69女poren18女| 欧美狠狠| 精品国产一二三区 | 天天爱天天干天天操 | 九九精品在线 | 苍井优一级毛片免费观看 | 人人干视频在线观看 | 最好看的最新中文字幕2018免费视频 | 欧美xxxx性疯狂bbbb | www.av片| 黄色网络在线观看 | 色花堂国产精品首页第一页 | 狠狠五月天 | 免费爱爱视频 | 午夜福免费福利在线观看 | 在线视频综合网 | 色拍视频 | www亚洲一区 | 日本免费在线视频 | 99se亚洲综合色区 | 天天看片网站 | 直接看黄的网站 | 四虎国产精品成人永久免费影视 | h视频在线观看免费网站 | 玖玖国产在线观看 | 国产卡一卡2卡三卡免费视频 | 高清视频 一区二区三区四区 | 国产精品久久久久久久久齐齐 | 日韩99| 欧美午夜视频一区二区 | 午夜aaaaaaaaa视频在线 | www.夜夜操.com | 成年人毛片网站 | 一区国产传媒国产精品 | 孩交啪啪网址 |