基于FPGA的腐蚀膨胀算法实现

         本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作。那么什么是二值图像呢?把一幅图片看做成一个二维的数组,那么二值图像是一个只有0和1的逻辑数组,我们前面Sobel边缘检测后的图像输出边缘效果,设置个阈值,大于阈值输出为1,小于阈值输出为0,最后输出就是一幅二维图像了。

上一篇我是直接用MATLAB处理后的灰度图片进行Sobel边缘检测的,在图片的选取中难免会有噪声的出现,所以为了使边缘检测的效果更加显著,我们将图像先进行中值滤波,然后再进行Sobel边缘检测,最终加上腐蚀膨胀算法使图像边缘更加细腻并硬朗。

首先我们比较一下中值滤波前Sobel和中值滤波后Sobel两种方法的显示效果。

中值滤波前Sobel

中值滤波后Sobel

         可以明显的看出,中值滤波后Sobel的图片边缘更明显,尤其是从lena头发和帽子部分的显示效果来看,很多多余的边缘都被滤除掉,所以中值滤波后边缘检测,势在必行。对于这部分的工程,我觉的应该没什么难度,中值滤波的代码我已经给出,只需要在输出时再加上Sobel就完事了。希望读者能自己去做去调试搞定。

腐蚀算法

腐蚀是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。用3X3的结构元素,扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作,如果都为1,结果图像的该像素为1。否则为0。结果会使二值图像小一圈。

拟采用形象的比喻来说明该运算,且用0表示蛀虫,1表示大米。蛀虫腐蚀大米的过程便是腐蚀运算,

腐蚀

如图所示,对于一个像素矩阵而言,因为有蛀虫(0)的存在,所以将8颗大米(1)腐蚀掉了,即使只存在一个蛀虫(0),但是还是会被蛀虫腐蚀完毕,最后一幅图上面由于没有蛀虫(0),固然大米一颗不懒,保存完好。

关于算法的实现,可以用下式子来表示,即3x3像素的运算:

P = P11 & P12 & P13 & P21 & P22 & P23 & P31 & P32 & P33

在HDL中,为了通过面积去换速度,我们将上式改变如下:

P1 = P11 & P12 & P13

P2 = P21 & P22 & P23

P3 = P31 & P32 & P33

P = P1 & P2 & P3

         如图所示,即通过2个时钟/步骤的运算,便能实现腐蚀运算的结果

腐蚀仿真

膨胀算法

         膨胀是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。可以用来填补物体中的空洞。用3X3的结构元素,扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作,如果都为0,结果图像的该像素为0,。否则为1。结果:使二值图像扩大一圈。

         先腐蚀后膨胀的过程称为开运算。用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显的改变其面积。先膨胀后腐蚀的过程称为比运算,用来填充物体内细小空间、连接邻近物体、平滑其边界的同时并不明显改变其面积。

         膨胀算法用最简单的比喻来描述:0表示害虫,1表示青蛙,青蛙吃了害虫表示膨胀运算,我们用3*3像素阵列来解释:

图膨胀

如图所示,图左只有害虫(0),所以害虫都好好活着,中间那个图,虽然只有一个害虫,但是还是免不了被青蛙吃掉的命运,最右边的那幅图,都是青蛙,所以青蛙始终是青蛙。

         关于算法的实现,可以用下式子来表示,即3x3像素的运算:

P = P11 || P12 || P13 || P21 || P22 || P23 || P31 || P32 || P33

在HDL中,为了通过面积去换速度,我们将上式改变如下:

    P1 = P11 || P12 || P13

P2 = P21 || P22 || P23

P3 = P31 || P32 || P33

P = P1 || P2 || P3

         如图所示,即通过2个时钟/步骤的运算,便能实现腐蚀运算的结果

 膨胀运算仿真

         上面的仿真图是我之前用Modelsim做的仿真,这里就不重复用Isim仿真了。腐蚀膨胀用FPGA实现可以说是十分简单的,将二值图像生成3x3矩阵,最后通过如上式子计算,输出即可。

腐蚀

膨胀

  从上面两幅图可以看出,腐蚀后的图像边缘明显变细,消除了更多假边缘,在腐蚀基础上使用膨胀算法的lena将腐蚀后的边缘扩大、加粗,这样看起来更清楚,最终为我们后续图像识别,作出了更好的准备工作。至此,腐蚀膨胀算法就写完了,如果有什么不足请您指点,有什么问题大家可以留言一起讨论,共同学习!

转载请注明出处:NingHeChuan(宁河川)

图像处理系列文章

第一篇:基于FPGA的VGA显示静态图片

第二篇:基于FPGA的RGB565_YCbCr_Gray算法实现

第三篇:基于FPGA的Uart接收图像数据至VGA显示

番外篇:数字图像处理界标准图像 Lena 后面的故事

第四篇:基于FPGA的均值滤波算法实现

第五篇:深刻认识shift_ram IP core——图像处理学习笔记

第六篇:基于FPGA的中值滤波算法实现

第七篇:基于FPGA的Sobel边缘检测的实现

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

【资源】17个最受欢迎的机器学习应用标准数据集

【新智元导读】学好机器学习的关键是用许多不同的数据集来实践。本文介绍了10个最受欢迎的标准机器学习数据集和7个时间序列数据集,既有回归问题也有分类问题,并提供了...

59114
来自专栏专知

【论文推荐】最新五篇信息抽取相关论文—端到端深度模型、调研、聊天机器人、自注意力、科学文本

【导读】专知内容组整理了最近五篇信息抽取(Information Extraction)相关文章,为大家进行介绍,欢迎查看! 1.Joint Recogniti...

38510
来自专栏瓜大三哥

视频压缩编码技术(H.264) 之前世今生

众所周知,一幅图像由许多个所谓像素的点组成,如下图中的“O”表示一个像素,大量的统计表明,同一幅图像中像素之间具有较强的相关性,两个像素之间的距离越短,则其相关...

1021
来自专栏PPV课数据科学社区

【V课堂】R语言十八讲(十五)—-置换检验和自助法

不知道看到这里,读者有么有发现,前面讲了那么多方法,几大检验,回归分析,方差分析“都有一个共同的特点,那就是有一定的前提假设,只有满足这个假设时,模型才有较好的...

2826
来自专栏专知

100+中文词向量,总有一款适合你

2064
来自专栏深度学习自然语言处理

2018 NLPCC Chinese Grammatical Error Correction 论文小结

这一段时间,笔者一直在研究语音识别后的文本纠错,而就在八月26-30日,CCF的自然语言处理和中文计算会议召开了,笔者也从师兄那里拿到了新鲜出炉的会议论文集,其...

1783
来自专栏一心无二用,本人只专注于基础图像算法的实现与优化。

局部自适应自动色阶/对比度算法在图像增强上的应用。

    在限制对比度自适应直方图均衡化算法原理、实现及效果一文中针对全局直方图均衡化的一些缺点,提出了分块的自适应均衡化技术,很好的克服了全局直方图均衡化的一些...

4689
来自专栏深度学习与数据挖掘实战

【今日热门】优秀资源

672
来自专栏杨熹的专栏

用深度神经网络处理NER命名实体识别问题

本文结构: 什么是命名实体识别(NER) 怎么识别? ---- cs224d Day 7: 项目2-用DNN处理NER问题 课程项目描述地址 ---- 什么是...

46311
来自专栏AI科技大本营的专栏

教程 | 用AI生成猫的图片,撸猫人士必备

编译 | 小梁 【AI科技大本营导读】我们身边总是不乏各种各样的撸猫人士,面对朋友圈一波又一波晒猫的浪潮,作为学生狗和工作狗的我们只有羡慕的份,更流传有“吸猫...

4379

扫码关注云+社区