没有合适的资源?快使用搜索试试~ 我知道了~
首页FPGA实现的实时流水线连通域标记算法_.pdf
本文要介绍的是两年前我自己琢磨出来的一种用FPGA实现的二值图像连通域标记算法。这个算法的特点是它是一个基于逐行扫描的流水线算法,也就是说这个算法只需要缓存若干行的图像数据,并在这若干行的固定延时内就给出结果,实时性很高,计算延时就只有这若干行,FPGA也无需外界SRAM或DDR来缓存图像数据。算法也不会因为图像中的连通区域数目多了就会变慢,因为这是流水线算法,就没有处理目标多了还会变慢这个概念。而该算法在PC上也有高速实现的潜力
资源详情
资源评论
资源推荐

FPGA 实现的实时流水线连通域标记算法
本文要介绍的是两年前我自己琢磨出来的一种用 FPGA 实现的二值图像连通域标记算法。
这个算法的特点是它是一个基于逐行扫描的流水线算法,也就是说这个算法只需要缓存若
干行的图像数据,并在这若干行的固定延时内就给出结果,实时性很高,计算延时就只有
这若干行,FPGA 也无需外界 SRAM 或 DDR 来缓存图像数据。算法也不会因为图像中的连
通区域数目多了就会变慢,因为这是流水线算法,就没有处理目标多了还会变慢这个概
念。而该算法在 PC 上也有高速实现的潜力。
我当时研究连通域标记算法时,没有找到多少关于如何用 FPGA 实现连通域标记算法的文
献,自然也没有找到和我这算法思路一样的算法实现介绍。直到后来我在看一本国外的讲
FPGA 做图像处理的书时,才看到了书中有提到类似的思路,但也没有讲该如何具体实现。
所以我琢磨出这个算法的确是我自己想出来的,但在之前有没有别人也做出来了,这个我
不知道,我猜是有的,可能自己偷着用去了,没有公开,或者我没查到。现在我想写篇科
普文章介绍一下这个算法,当然我也可以写学术文章到期刊上去发表,但我不喜欢写学术
文章,而且觉得发表在学术期刊上的文章也没多少人看,一般人还不能直接在网上看到,
还要买它的数据库,所以还不如写科普文章放在我 becomequantum 的博客上,以后搞这方
面研究的人,只要在网上搜一下“FPGA+连通域标记”关键词就能找到这篇文章。
http://blog.sina.com.cn/froghole
什么是连通域标记算法呢?
一般不搞图像处理的人是不会接触到这个术语的,搞图像处理的人则会知道这个算法是图
像处理里面的一个基本算法。那它是干啥的呢?
请看上图,图片中的灰白色背景上有两个物体,其实就是两个花生米啦。那如果让你编程
处理这个图像,告诉这两个花生米在图片中的位置,这个程序该怎么编?

或者换句话说,让你编程达到上图效果,也就是在图片上花生米的外面画一个外切矩形
框,这个该怎么编程实现?
你要问人说:图片中的这两个花生米在什么位置?那这简直就是废话,一个花生米在左
边,一个在右边,一个是竖着的,一个是斜着的,这还用问吗,我一眼就看出来了。
呵呵,人当然是一眼就看出来了。但在电脑看来,这幅图片是由一个一个像素点组成的,
再说基本一点,在电脑里,这幅图片只是存在内存里的一组像素点数据,彩色图像的每个
像素点是由三个字节的数据组成的,这个三个字节数据分别代表这个像素点的 RGB 值,也
就是红绿蓝三种颜色的成分。
如上图所示,左边是花生米尖端的局部放大,一个方格就代表了一个像素点,右边就是每
个像素点对应的 RGB 数据,电脑里存的就是这些数据,在显示器上显示出来就是这个花生
米。电脑处理的也就是这些数据。所以电脑并没有人的“一眼就看出来”的能力,电脑只能
读取分析这些数据,然后给出结果,比如去在花生米外边画个框,以表示本电脑也看出来
花生米在哪了。
那电脑里的算法是如何识别这个花生米的位置的呢?首先第一步是根据背景或物料颜色的
不同把图像二值化,变成下面的只有纯黑和纯白这两种颜色的二值图像:

其实二值化之后这幅图片在电脑里已经不是图片或图像数据了,而是二值化数据。因为非
黑即白只需要一位数据,0(白)或 1(黑),就能代表了,而原来的 RGB 数据是三个字节
二十四位,这一下子可省了好多数据空间。当然其实在电脑里处理也没省多少,因为电脑
处理数据的单位至少是字节,你要是按位存储和处理实际上反而会带来更多麻烦。但在
FPGA 里可以按位处理,二值化后的确能起到节省存储空间的作用。
二值化的主要目的其实就是略去不必要的信息,因为我要完成定位这个任务,只需要上图
的这个二值黑白轮廓图就可以了,不需要其它的颜色信息。图像二值化之后接下来的步骤
就是连通域标记。所以该算法的全称是:二值图像的连通域标记算法。
啥叫连通区域呢?为啥一个确定花生米位置的算法要叫连通区域标记?标记个啥?
我们再来看看上面这个二值化并放大后的示意图。花生米变成了两坨黑黑的像素点,那这
两坨黑点看起来有什么规律?这还能有什么规律,不就是两坨像素点么?其实是有规律
的,左边这坨黑像素点中,像素点之间是相互连通的,也就是一个挨着一个的,右边那坨
也是,但这两坨之间并没有连通。这也能叫规律,我一眼就看出来了?哈哈,又来了,记
住电脑是没有一眼看能力的,电脑就是靠这个连通不连通的规律,识别出这有两个连通
域,也就是代表着两个物体,然后能统计出这两个连通域的有关信息,比如其在图像中所
处的位置,大小(所包含像素点数),边长(边缘上所包含像素点数)等等。
电脑在处理上面这个二值化图片数据时,它会从图像的左上角那个点开始往右逐个像素点
的扫描图像数据,当它扫描发现一个黑点时,就会继续去找这个黑点附近有没有和它相邻
的黑点,找到了一个就再找下一个。也就是按照一定顺序,要把这一坨黑点从最上一行最
左的那一个开始,挨个的都找到并做上标记,比如标记个值“2”(原来它的值是“1”,代表
黑点)。然后再扫描到另一片黑点时把这一片黑点都标记成“3”,最后这两片黑点连通区域
都被标记上了不同的数值已示区别。然后再扫描一遍图像就可以统计出这两个不同连通区
剩余11页未读,继续阅读
















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0