0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

FPGA学习-基于FPGA的图像处理

FPGA设计论坛 来源:未知 2023-02-15 16:35 1473次阅读


图像处理系统设计注意点:
1.将算法开发和FPGA实现分离
用软件的图像处理环境可以使用大批量的图像样本进行测试及调试算法,再将算法映射到硬件上,这样大大节省了硬件调试周期。
2.算法的精度
图像处理的算法中,大部分需要采用浮点数运算,而浮点数运算再FPGA中是非常不划算的,因此需要转换成定点数计算,此时会设计到浮点运算转定点运算时精度下降的问题。
3.软件和硬件的合理划分
这里的软件是指DSP,CPU,硬件是指FPGA;一般结构规则计算量大的操作如sobel算子均值滤波可以采用硬件进行,不规则的动态可变长度循环的底层算法由软件进行;

图像处理FPGA 设计基本方法:
1.阵列结构结合流水线处理设计
例如RGB图像,包括三组数据,处理时需要并行三通道后,每个通道进行分别的串行流水处理。
2.缓存设计
帧缓存行缓存列对齐
3.资源
分辨率处理窗口对资源影响成倍增加
基于FPGA设计框架举例:
1、灰度直方图统计
直方图是图像的灰度分布统计的一种表示方法,统计目标图像中各个灰度点的像素个数,很多对于图像的调整算法都是基于此进行的;
如何基于FPGA进行统计呢?
1)由于是统计图像的直方图,所以一定是统计结果会在图像经过之后才能产生,因此需要进行缓存;
缓存一:统计后的结果;
缓存二:经过统计处理器的图像数据,以便后面和直方图做同步处理。
2)图像常常用8位、24位、32位来表示一个像素的灰度值,
因此,统计种类分别为2^8=256/2^24=16777216/2^32=4294967296,地址位宽根据此进行选择设定;
根据不同的精度选择不同的缓存方式:片内或片外缓存;
3)处理流程:
首先根据当前来的灰度值做为读RAM地址,读出RAM中对应灰度值的的统计值;
第二将读出结果加一并回写回RAM的当前地址中;
第三重复操作至当前图像处理结束;
第四下一幅图像到来之前顺序按灰度值从0到最大的顺序将最终结果读出;
第五读出最终结果后,将RAM清空。
4)处理细节
定义参数图像高度IH 图像宽度IW像素逐行输入
因此以行同步脉冲的上升沿作为统计开始,行同步脉冲作为行统计计数器
行统计计数器达到最大高度时,作为统计结束标志。
2.灰度直方图均衡化处理
1.统计出直方图,获取各个像素灰度累加和
2.乘以均衡系数:(2^DW-1)/IW*IH(像素最大值/图像的面积)
3.直方图线性拉伸处理
此节暂时略过;
4.线性滤波器
首先需要区分线性和非线性滤波器的区别,区别在于其输出与输入之间是否有唯一且确定的函数传递。
线性滤波器分类:
平滑滤波器:主要包括均值滤波器和高斯滤波器等
锐化滤波器:主要包括SOBEL算子 LAPLAS算子梯度运算等
滤波器的物理意义主要是响应信号对目标信号响应后的样子,也就是响应函数g(i,j)滑过整个图像,即对图像做一个卷积处理,就得到了滤波结果。
1)均值滤波器概述
用一个图像区域的各个像素的平均值来代替原图像的各个像素值,主要作用是减小锐度,减小噪声。
均值滤波一般出现在图像处理的预处理步骤,
预处理后,根据噪声来源,例如针对椒盐噪声做中值滤波处理,针对高斯噪声做高斯滤波处理
后续可能继续做边缘提取等复杂操作处理。
2)均值滤波器设计
设计一个滤波器可以理解成设计一个响应函数g(x,y)=Σi=-rrΣj=-rrI(x+i,y+j)) / (2r+1)2
数学公式很好理解,就是求一个窗口的所有像素灰度值之后后再除以整个窗口的面积也就是像素点个数,求出平均值;
均值滤波的方法将数据存储成3x3的矩阵,然后求这个矩阵。在图像上对目标像素给一个模板,
该模板包括了其周围的临近像素(以目标象素为中心的周围 8 个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
(参考:http://www.cnblogs.com/ninghechuan/p/6789399.html)
(参考:http://www.cnblogs.com/aslmer/p/5779079.html#undefined)
shift_ram 进行数据矩阵化,将3x3矩阵的中心像素的周围八个点求和,采取了流水线的设计方法,来增加吞吐量,然后再求平均值代替目标像素的值。

 1 //矩阵元素移位赋值
2 always @(posedge clk or negedge rst_n)begin
3 if(rst_n==1'b0)begin
4 {p_11,p_12,p_13} <= {5'b0,5'b0,5'b0} ;
5 {p_21,p_22,p_23} <= {15'b0,15'b0,15'b0};
6 {p_31,p_32,p_33} <= {15'b0,15'b0,15'b0};
7 end
8 else begin
9 if(per_href_ff0==1&&flag_do==1)begin
10 {p_11,p_12,p_13}<={p_12,p_13,row_1};
11 {p_21,p_22,p_23}<={p_22,p_23,row_2};
12 {p_31,p_32,p_33}<={p_32,p_33,row_3};
13 end
14 else begin
15 {p_11,p_12,p_13}<={5'b0,5'b0,5'b0};
16 {p_21,p_22,p_23}<={5'b0,5'b0,5'b0}
17 {p_31,p_32,p_33}<={5'b0,5'b0,5'b0}
18 end
19 end
20 end
21
22
23 always @(posedge clk or negedge rst_n)begin
24 if(rst_n==1'b0)begin
25 mean_value_add1<=0;
26 mean_value_add2<=0;
27 mean_value_add3<=0;
28 end
29 else if(per_href_ff1)begin
30 mean_value_add1<=p_11+p_12+p_13;
31 mean_value_add2<=p_21+ 0 +p_23;
32 mean_value_add3<=p_31+p_32+p_33;
33 end
34 end
35
36 wire [8:0]mean_value;//8位数之和
37 wire [5:0]fin_y_data; //平均数,除以8,相当于左移三位。
38
39 assign mean_value=mean_value_add1+mean_value_add2+mean_value_add3;
40 assign fin_y_data=mean_value[8:3];
View Code
3)sobel算子
| -1 0 +1 |
Gx= | -2 0 +2 |
| -1 0 +1 |

| -1 -2 -1 |
Gy= | 0 0 0 |
| +1 +2 +1 |
包括X和Y两个方向的两套3X3矩阵,使其分别和图像的X和Y方向进行卷积计算(矩阵的卷积计算即将所有元素做乘加计算)
两个方向的卷积结果求平方根计算;
计算结果如果大于阈值则等于0xffff,如果小于阈值则等于0;
最终输出则是图像的边缘。
参考代码如下:由于算子简单以及有正负区分,因此需要做正值和负值分别计算后再进行相减计算。

// | -1 0 +1 |
//Gx= | -2 0 +2 |
// | -1 0 +1 |
//

// | -1 -2 -1 |
//Gy= | 0 0 0 |
// | +1 +2 +1 |


reg [
8:0] p_x_data ,p_y_data ; // x 和 y 的正值之和
reg [8:0] n_x_data ,n_y_data ; // x 和 y 的负值之和
reg [8:0] gx_data ,gy_data ; //最终结果

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
p_x_data <=0;
n_x_data
<=0;
gx_data
<=0;
end
else if(per_href_ff1==1) begin
p_x_data
<= p_13 + (p_23<<1) + p_33 ;
n_x_data
<= p_11 + (p_12<<1 )+ p_13 ;
gx_data
<= (p_x_data >=n_x_data)? p_x_data - n_x_data : n_x_data - p_x_data ;
end
else begin
p_x_data
<=0;
n_x_data
<=0;
gx_data
<=0;
end
end

always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
p_y_data <=0;
n_y_data
<=0;
gy_data
<=0;
end
else if(per_href_ff1==1) begin
p_y_data
<= p_11 + (p_12<<1) + p_13 ;
n_y_data
<= p_31 + (p_32<<1) + p_33 ;
gy_data
<= (p_y_data >=n_y_data)? p_y_data - n_y_data : n_y_data - p_y_data ;
end
else begin
p_y_data
<=0;
n_y_data
<=0;
gy_data
<=0;
end
end

//求平方和,调用ip核开平方
reg [16:0] gxy; // Gx 与 Gy 的平方和
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
gxy<=0;
end
else begin
gxy
<= gy_data* gy_data + gx_data* gx_data ;
end
end

wire [
8:0] squart_out ;
altsquart u1_altsquart (
//例化开平方的ip核
.radical (gxy),
.q (squart_out),
//输出的结果
.remainder()
);

//与阈值进行比较
reg [15:0] post_y_data_r;
always @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
post_y_data_r<=16'h00;
end
else if(squart_out>=threshold)
post_y_data_r
<=16'h00 ;
else
post_y_data_r
<=16'hffff ;

end
View Code
5.非线性滤波器
非线性滤波器通常下是没有特定的转移函数,统计排序滤波器;

中值滤波

将 3*3 滑动块中的灰度值进行排序,然后用排序的中间值取代 3*3 滑块中心的值。示意图如下图所示。
第一步:将每一行按最大值、中间值、最小值排列
第二步:提取出最大值的最小值,中间值的中间值,最小值的最大值
第三步:将第二步提取出来的三个数进行排序,中间值即我们要求的中间值。
6.图像分割
图像分割是将图像划分成若干个互不相交的小区域的过程,将图像中有意义的特征或应用所需要的特征信息提取出来,最终结果是分割成一些具有
某种特征的单元,称为图像的基元。






精彩推荐



至芯科技12年不忘初心、再度起航2月11日北京中心FPGA工程师就业班开课、线上线下多维教学、欢迎咨询!
FPGA学习-USB 3.0协议理解
ARM+FPGA的高速同步数据采集
扫码加微信邀请您加入FPGA学习交流群




欢迎加入至芯科技FPGA微信学习交流群,这里有一群优秀的FPGA工程师、学生、老师、这里FPGA技术交流学习氛围浓厚、相互分享、相互帮助、叫上小伙伴一起加入吧!


点个在看你最好看





原文标题:FPGA学习-基于FPGA的图像处理

文章出处:【微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1643

    文章

    21925

    浏览量

    612559

原文标题:FPGA学习-基于FPGA的图像处理

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
    相关推荐
    热点推荐

    进群免费领FPGA学习资料!数字信号处理、傅里叶变换与FPGA开发等

    进群免费领FPGA学习资料啦!小编整理了数字信号处理、傅里叶变换与FPGA开发等FPGA必看资料,需要的小伙伴可以加小助手(微信:elecf
    发表于 04-07 16:41

    【国产FPGA入学必备】国产FPGA权威设计指南+配套FPGA图像视频教程

    缩短工程项目的开发周期,同时,本书可以帮助高校师生快速学习国产FPGA,为参加FPGA和集成电路竞赛提供有力的帮助。 二、紫光同创FPGA图像
    发表于 02-20 15:08

    FPGA图像处理基础----实现缓存卷积窗口

    像素行与像素窗口 一幅图像是由一个个像素点构成的,对于一幅480*272大小的图片来说,其宽度是480,高度是272。在使用FPGA进行图像处理时,最关键的就是使用
    的头像 发表于 02-07 10:43 571次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>图像</b><b class='flag-5'>处理</b>基础----实现缓存卷积窗口

    FPGA在AI方面有哪些应用

    提供了强有力的支持。 一、FPGA 在深度学习中的应用 深度学习是 AI 的重要分支,涉及海量的数据运算。FPGA 能够针对深度学习算法中的
    的头像 发表于 01-06 17:37 1008次阅读

    基于FPGA实现图像直方图设计

    简单,单采用FPGA来实现直方图的统计就稍显麻烦。若使用Xilinx和Altera的FPGA芯片,可以使用HLS来进行图像的加速处理。但这暂时不是我的重点。 用C语言实现直方图统计:u
    的头像 发表于 12-24 10:24 589次阅读
    基于<b class='flag-5'>FPGA</b>实现<b class='flag-5'>图像</b>直方图设计

    FPGA 实时信号处理应用 FPGA图像处理中的优势

    现场可编程门阵列(FPGA)是一种高度灵活的硬件平台,它允许开发者根据特定应用需求定制硬件逻辑。在实时信号处理图像处理领域,FPGA因其独
    的头像 发表于 12-02 10:01 1525次阅读

    FPGA加速深度学习模型的案例

    FPGA(现场可编程门阵列)加速深度学习模型是当前硬件加速领域的一个热门研究方向。以下是一些FPGA加速深度学习模型的案例: 一、基于FPGA
    的头像 发表于 10-25 09:22 933次阅读

    FPGA图像处理领域的优势有哪些?

    FPGA(Field Programmable Gate Array,现场可编程门阵列)在图像处理领域具有显著的优势,这些优势主要体现在以下几个方面: 一、高并行处理能力
    发表于 10-09 14:36

    基于FPGA+GPU异构平台的遥感图像切片解决方案

    大型遥感图像分割成图像切片信息,以便更有效地处理和分析图像数据。中科亿海微自主研制的AI目标识别加速卡,基于FPGA+GPU异构并行计算
    的头像 发表于 09-20 08:05 720次阅读
    基于<b class='flag-5'>FPGA</b>+GPU异构平台的遥感<b class='flag-5'>图像</b>切片解决方案

    ALINX FPGA+GPU异架构视频图像处理开发平台介绍

    Alinx 最新发布的新品 Z19-M 是一款创新的 FPGA+GPU 异构架构视频图像处理开发平台,它结合了 AMD Zynq UltraScale+ MPSoC(FPGA)与 NV
    的头像 发表于 08-29 14:43 1706次阅读

    FPGA在人工智能中的应用有哪些?

    FPGA可以有效地处理深度学习中的大规模并行运算,从而提高深度学习应用的效率。 定制化计算:FPGA的高度可编程性使其可以针对特定的应用场
    发表于 07-29 17:05

    基于FPGA图像采集与显示系统设计

    源和固有的并行处理能力,在数字信号处理、硬件加速、汽车电子等领域得到了广泛应用。在图像采集与显示系统中,FPGA能够实现高速、并行的数据处理
    的头像 发表于 07-17 10:58 2531次阅读

    FPGA设计经验之图像处理

    系列:基于 FPGA图像边缘检测系统设计(sobel算法) FPGA设计中 Verilog HDL实现基本的图像滤波处理仿真 需
    发表于 06-12 16:26

    基于FPGA的实时边缘检测系统设计,Sobel图像边缘检测,FPGA图像处理

    算法 ,利用乒乓操作和 SDRAM 缓存图像,可以实时提取视频图像的边缘特征。文中对比了 MATLAB 和 FPGA处理效果,由于 FPGA
    发表于 05-24 07:45

    FPGA学习笔记-关于FPGA资源

    在和别人讨教FPGA的知识时,初步得到的有关FPGA的印象是:通过程序或者其它设置,把集成在芯片中的各种逻辑电路组合起来使用。就像用CMOS、TTL门电路搭建处理逻辑更复杂的电路。带着这个印象开始
    发表于 05-22 18:27

    电源入口处防反接电路-汽车电子硬件电路设计

    一、为什么要设计防反接电路电源入口处接线及线束制作一般人为操作,有正极和负极接反的可能性,可能会损坏电源和负载电路;汽车电子产品电性能测试标准ISO16750-2的4.7节包含了电压极性反接测试,汽车电子产品须通过该项测试。二、防反接电路设计1.基础版:二极管串联二极管是最简单的防反接电路,因为电源有电源路径(即正极)和返回路径(即负极,GND),那么用二极

    张飞实战电子官方
    16小时前
    104

    半导体芯片需要做哪些测试

    首先我们需要了解芯片制造环节做⼀款芯片最基本的环节是设计->流片->封装->测试,芯片成本构成⼀般为人力成本20%,流片40%,封装35%,测试5%(对于先进工艺,流片成本可能超过60%)。测试其实是芯片各个环节中最“便宜”的一步,在这个每家公司都喊着“CostDown”的激烈市场中,人力成本逐年攀升,晶圆厂和封装厂都在乙方市场中“叱咤风云”,唯独只有测试显

    汉通达
    1天前
    350

    解决方案 | 芯佰微赋能示波器:高速ADC、USB控制器和RS232芯片——高性能示波器的秘密武器!

    示波器解决方案总述:示波器是电子技术领域中不可或缺的精密测量仪器,通过直观的波形显示,将电信号随时间的变化转化为可视化图形,使复杂的电子现象变得清晰易懂。无论是在科研探索、工业检测还是通信领域,示波器都发挥着不可替代的作用,帮助工程师和技术人员深入剖析电信号的细节,精准定位问题所在,为创新与发展提供坚实的技术支撑。一、技术瓶颈亟待突破性能指标受限:受模拟前端

    芯佰微电子
    1天前
    453

    硬件设计基础----运算放大器

    1什么是运算放大器运算放大器(运放)用于调节和放大模拟信号,运放是一个内含多级放大电路的集成器件,如图所示:左图为同相位,Vn端接地或稳定的电平,Vp端电平上升,则输出端Vo电平上升,Vp端电平下降,则输出端Vo电平下降;右图为反相位,Vp端接地或稳定的电平,Vn端电平上升,则输出端Vo电平下降,Vn端电平下降,则输出端Vo电平上升2运算放大器的性质理想运算

    张飞实战电子官方
    1天前
    328

    ElfBoard技术贴|如何调整eMMC存储分区

    ELF 2开发板基于瑞芯微RK3588高性能处理器设计,拥有四核ARM Cortex-A76与四核ARM Cortex-A55的CPU架构,主频高达2.4GHz,内置6TOPS算力的NPU,这一设计让它能够轻松驾驭多种深度学习框架,高效处理各类复杂的AI任务。

    ElfBoard
    1天前
    631

    米尔基于MYD-YG2LX系统启动时间优化应用笔记

    1.概述MYD-YG2LX采用瑞萨RZ/G2L作为核心处理器,该处理器搭载双核Cortex-A55@1.2GHz+Cortex-M33@200MHz处理器,其内部集成高性能3D加速引擎Mail-G31GPU(500MHz)和视频处理单元(支持H.264硬件编解码),16位的DDR4-1600/DDR3L-1333内存控制器、千兆以太网控制器、USB、CAN、

    米尔电子
    2天前
    290

    运放技术——基本电路分析

    虚短和虚断的概念由于运放的电压放大倍数很大,一般通用型运算放大器的开环电压放大倍数都在80dB以上。而运放的输出电压是有限的,一般在10V~14V。因此运放的差模输入电压不足1mV,两输入端近似等电位,相当于“短路”。开环电压放大倍数越大,两输入端的电位越接近相等。“虚短”是指在分析运算放大器处于线性状态时,可把两输入端视为等电位,这一特性称为虚假短路,简称

    张飞实战电子官方
    2天前
    384

    飞凌嵌入式携手中移物联,谱写全国产化方案新生态

    4月22日,飞凌嵌入式“2025嵌入式及边缘AI技术论坛”在深圳成功举办。中移物联网有限公司(以下简称“中移物联”)携OneOS操作系统与飞凌嵌入式共同推出的工业级核心板亮相会议展区,操作系统产品部高级专家严镭受邀作《OneOS工业操作系统——助力国产化智能制造》主题演讲。

    飞凌嵌入式
    05-07 11:26
    1k

    ATA-2022B高压放大器在螺栓松动检测中的应用

    实验名称:ATA-2022B高压放大器在螺栓松动检测中的应用实验方向:超声检测实验设备:ATA-2022B高压放大器、函数信号发生器,压电陶瓷片,数据采集卡,示波器,PC等实验内容:本研究基于振动声调制的螺栓松动检测方法,其中低频泵浦波采用单频信号,而高频探测波采用扫频信号,利用泵浦波和探测波在接触面的振动声调制响应对螺栓的松动程度进行检测。通过螺栓松动检测

    Aigtek安泰电子
    05-06 18:44
    1.1k

    MOS管驱动电路——电机干扰与防护处理

    此电路分主电路(完成功能)和保护功能电路。MOS管驱动相关知识:1、跟双极性晶体管相比,一般认为使MOS管导通不需要电流,只要GS电压(Vbe类似)高于一定的值,就可以了。MOS管和晶体管向比较c,b,e—–>d(漏),g(栅),s(源)。2、NMOS的特性,Vgs大于一定的值就会导通,适合用于源极接地时的情况(低端驱动),只要栅极电压达到4V或10V就可以

    张飞实战电子官方
    05-06 19:34
    421

    压敏(MOV)在电机上的应用剖析

    一前言有刷直流电机是一种较为常见的直流电机。它的主要特点包括:1.结构相对简单,由定子、转子、电刷和换向器等组成;2.通过电刷与换向器的接触来实现电流的换向,从而使电枢绕组中的电流方向周期性改变,保证电机持续运转;3.具有调速性能较好等优点,可以通过改变电压等方式较为方便地调节转速。有刷直流电机在许多领域都有应用,比如一些电动工具、玩具、小型机械等。但它也存

    深圳市韬略科技有限公司
    05-06 11:34
    287

    硬件原理图学习笔记

    这一个星期认真学习了硬件原理图的知识,做了一些笔记,方便以后查找。硬件原理图分为三类1.管脚类(gpio)和门电路类输入输出引脚,上拉电阻,三极管与门,或门,非门上拉电阻:正向标志作用,给悬空的引脚一个确定的状态三极管:反向三极管(gpio输出高电平,NP两端导通,被控制端导通,电压为0)->NPN正向三极管(gpio输出低电平,PN两端导通,被控制端导通,

    张飞实战电子官方
    04-30 18:40
    476

    TurMass™ vs LoRa:无线通讯模块的革命性突破

    TurMass™凭借其高传输速率、强大并发能力、双向传输、超强抗干扰能力、超远传输距离、全国产技术、灵活组网方案以及便捷开发等八大优势,在无线通讯领域展现出强大的竞争力。

    道生物联
    05-06 10:50
    959

    RZT2H CR52双核BOOT流程和例程代码分析

    RZT2H是多核处理器,启动时,需要一个“主核”先启动,然后主核根据规则,加载和启动其他内核。本文以T2H内部的CR52双核为例,说明T2H多核启动流程。

    RA生态工作室
    04-03 17:14
    2.1k

    干簧继电器在RF信号衰减中的应用与优势

    在电子测试领域,RF(射频)评估是不可或缺的一部分。无论是研发阶段的性能测试,还是生产环节的质量检测,RF测试设备都扮演着关键角色。然而,要实现精准的RF评估,测试设备需要一种特殊的电路——衰减电路。这些电路的作用是调整RF信号的强度,以便测试设备能够准确地评估RF组件和RF电路的各个方面。衰减器的挑战衰减器的核心功能是校准RF信号的强度。为了实现这一点,衰

    斯丹麦德电子
    04-30 11:33
    758