分享

FPGA设计

 薛董_艾瑞 2018-02-26

1. 概述

本设计采用FPGA技术,实现CMOS视频图像的边缘检测(sobel),并通过以太网传输(UDP方式)给PC实时显示。

2. 硬件系统框图

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

4e0e74234373ead60101736c9470b6da.png-wh_

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

8144d773562567aa278dc40b2e93fd18.jpg-wh_

3. 算法原理

索贝尔算子(Sobel Operator)主要用作边缘检测,它是离散差分算子。在图像上的任何一点使用此算子,将会产生对应的灰度矢量或是法矢量。

Sobel提供了水平方向和垂直方向两个方向的滤波模板G_X 和G_Y,分别如下图所示。

40a854f1088272efe970605a6e964826.png-wh_

2989e6ff003680494c0d0f8828d76474.png-wh_

Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值来检查边缘。Sobel算子优点是计算简单、速度快,但由于只采用了2个方向的模板,因此对纹理较为复杂的图像效果不是很好。当对精度要求不高时,Sobel算子是一种较为常用的边缘检测算法。

在计算得出gxy后,对其进行阈值操作,认为大于阈值的像素点为边缘点。


4. 算法实现

在Sobel算子中有负系数,使用数值比较的方式避开负数表示,具体代码如下。

1
2
3
4
5
6
assign sum0_gx = ({3'b000,taps0x_r1} + {2'b00,taps1x_r1,1'b0}) + {3'b000,taps2x_r1};
assign sum1_gx = ({3'b000,taps0x} + {2'b00,taps1x,1'b0}) + {3'b000,taps2x};                 
assign sobel_gx = (sum0_gx>=sum1_gx)?(sum0_gx-sum1_gx):(sum1_gx-sum0_gx);
assign sum0_gy = ({3'b000,taps0x} + {2'b00,taps0x_r0,1'b0}) + {3'b000,taps0x_r1};
assign sum1_gy = ({3'b000,taps2x} + {2'b00,taps2x_r0,1'b0}) + {3'b000,taps2x_r1};
assign sobel_gy = (sum0_gy>=sum1_gy)?(sum0_gy-sum1_gy):(sum1_gy-sum0_gy);

关于开方运算,Quartus II为我们提供了现有的IP可以使用,参数配置如下图所示。

fa30abd0fd3376fcde0a22c584f3fcdf.png-wh_

5. 最终效果

下图为原始图片效果。

710afd78dd5f28661d18bda2b1bab1cc.png-wh_

经过Sobel边缘检测后效果图如下所示,由于在热光灯下噪声还是比较多。

36859160d6a9120e268ff4f23ca13a16.png-wh_


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多