FPGA设计——图像处理(Tophat形态学滤波)

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介:

1. 概述

本设计采用FPGA技术,实现CMOS视频图像的Tophat形态学滤波,并通过以太网传输(UDP方式)给PC实时显示。

2. 硬件系统框图

CMOS采用MT9V011(30万像素),FPGA采用ALTERA公司的CYCLONE IV,以太网卡采用REALTK公司的100M网卡芯片,硬件框图如下:

5e172e52e735986a7f74745683495585.png-wh_

硬件平台采用ETree的FPGA开发板,如下图所示:

b98693c25df1d9329ee64d09892fd11b.jpg-wh_

3. 算法原理

Tophat变换是原图像与开运算结果之差,突显出图像轮廓周围更亮的区域。

开运算(Opening)是先腐蚀后膨胀的过程。开运算一般是对象的轮廓变得更加光滑,断开狭窄的间断和消除细小的凸起物。因此,开运算可用于消除小物体。

膨胀是形态学滤波的基本运算。膨胀(dilate)就是求局部最大值,这样会使图像中的高亮区域逐渐增大,效果图将会拥有比原图更大的高亮区域,整体亮度会增加,同时可以连通相邻的高亮区域。

腐蚀(erode)是形态学滤波的基本运算,与膨胀是一对对立操作,求局部最小值。通过腐蚀操作后,高亮区域被腐蚀掉,会比原图更暗些。腐蚀操作会连通相邻比较暗的区域。

具体的计算公式如下:

dddd94952807c1e02fdf27e778632c51.jpg-wh_

4. 算法实现

在“开运算”输出端用原图像减去“开运算”的结果,代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//file name:    filter_tophat.v
//author:      shugen.yin
//date:        2017.10.27
//function:     开运算
//log:
 
module filter_tophat(
     input cmos_pclk,
     input cmos_href,
     input cmos_vsync,
     input [7:0] cmos_data,
     
     output  cmos_href_o,
     output  cmos_vsync_o,
     output  [7:0] cmos_data_o
);
 
wire [7:0] cmos_data_open;
wire [7:0] cmos_data_old;
 
filter_open filter_open_inst
(
     .cmos_pclk(cmos_pclk) ,  // input  cmos_pclk_sig
     .cmos_href(cmos_href) ,  // input  cmos_href_sig
     .cmos_vsync(cmos_vsync) ,    // input  cmos_vsync_sig
     .cmos_data_old(cmos_data_old),
     .cmos_data(cmos_data) ,  // input [7:0] cmos_data_sig
     .cmos_href_o(cmos_href_o) ,  // output  cmos_href_o_sig
     .cmos_vsync_o(cmos_vsync_o) ,    // output  cmos_vsync_o_sig
     .cmos_data_o(cmos_data_open)     // output [7:0] cmos_data_o_sig
);
 
assign cmos_data_o = (cmos_data_old>=cmos_data_open)?(cmos_data_old-cmos_data_open):8'h00;
 
endmodule

与Tophat对应的还有一个Blackhat形态滤波器,用“闭运算”减去原来图像,突显出原图像轮廓周围更暗的区域。“Blackhat形态学滤波器”留给有兴趣的读者完成,算法实现方法和本篇类似。


5. 最终效果

下图为原始图片效果。

783bec478fe2183fc438f82a84e12c5c.png-wh_

Tophat滤波后的效果图如下所示,图像轮廓周围更亮的区域被突显出来。

bd2923f572ce8aa5fa75ad39856a62af.png-wh_


本文转自 shugenyin 51CTO博客,原文链接:http://blog.51cto.com/shugenyin/1976982


相关文章
|
算法 异构计算
基于FPGA的ECG信号滤波与心率计算verilog实现,包含testbench
基于FPGA的ECG信号滤波与心率计算verilog实现,包含testbench
|
机器学习/深度学习 算法 搜索推荐
基于FPGA的中值滤波算法的实现
中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值.
|
算法 异构计算
m基于FPGA的OFDM系统verilog实现,包括IFFT,FFT,成型滤波以及加CP去CP,包含testbench
m基于FPGA的OFDM系统verilog实现,包括IFFT,FFT,成型滤波以及加CP去CP,包含testbench
593 1
|
机器学习/深度学习 算法 C语言
FPGA图像处理之边缘检测算法的实现
边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。
FPGA图像处理之边缘检测算法的实现
|
算法 测试技术 计算机视觉
基于FPGA的图像中值滤波开发,包括tb测试文件以及matlab验证代码
基于FPGA的图像中值滤波开发,包括tb测试文件以及matlab验证代码
|
机器学习/深度学习 算法 异构计算
基于FPGA的低通滤波器,通过verilog实现并提供testbench测试文件
基于FPGA的低通滤波器,通过verilog实现并提供testbench测试文件
335 0
|
算法 计算机视觉 异构计算
FPGA图像处理之rgbtogray算法的实现
Ycbcrr或Y'CbCr有的时候会被写作:YCBCR或是Y'CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y'为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y'和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理。
|
算法 计算机视觉 异构计算
FPGA图像处理(高斯滤波)仿真篇
高斯滤波是一种低通平滑滤波,常用于模糊处理和减少噪声信号,其中模糊处理常用于预处理,即在提取目标之前去除图像中的一些细节等,这有利于高通处理。对于二维的数字图像信号,一般通过线性滤波器和非线性滤波器的模糊处理来减少强噪声信号。平滑滤波器就是用滤波掩模确定的邻域内的像素与加权值相卷积后得到的灰度均值来代替每个像素的值,这就很容易使用硬件实现。 GAUSS 滤波算法克服了边界效应,因而滤波后的图像较好。
|
算法 异构计算
m基于FPGA的多级抽取滤波器组verilog设计,包括CIC滤波,HB半带滤波以及DA分布式FIR滤波
m基于FPGA的多级抽取滤波器组verilog设计,包括CIC滤波,HB半带滤波以及DA分布式FIR滤波
467 0
m基于FPGA的多级抽取滤波器组verilog设计,包括CIC滤波,HB半带滤波以及DA分布式FIR滤波
|
算法 计算机视觉 异构计算
基于FPGA的医学图像中值滤波verilog实现,包括testbench和MATLAB验证程序
基于FPGA的医学图像中值滤波verilog实现,包括testbench和MATLAB验证程序
355 0

热门文章

最新文章