基于FPGA的灰度形态学滤波器实现
在形态算法设计中,结构元素的选择十分重要,其形状和尺寸的选择是能否有效地提取信息的关键。一般情况下,结构元素的选择按照下面原则进行:
(1)结构元素必须在几何上比原图像简单,且有界。
(2)结构元素的凸性非常重要,一般选择凸性子集。
2.1 结构元素选择及简化[3]
本文所述形态学滤波的目的是检测256×256大小12位灰度图像f中的弱小目标,选择3×3大小的扁平结构元素和原始图像做开操作,其结构为:
2.2 电路原理设计[4][5]
输入图像f与结构元素g1腐蚀就是求f中每行相邻3个象素的灰度最小值。对于1幅静止图像,可以采用1个1×3的窗体从图像第1行第1列开始,自左向右滑动,依次取出窗口内的3个象素灰度值,比较得到灰度最小值并按顺序存储。第1行做完后,再在第2行滑动,直至图像的最后1行的最后3个象素。存储后的图像即为f与g1腐蚀的结果图像。对于实时串行输入图像,只需让图像灰度数据流从1×3的窗体通过,取出窗体内的3个象素灰度值,比较后得到的最小值数据流就是腐蚀后的图像灰度数据。
求3个数的最小值可以先求2个数的较小值,将结果再与第3个数比较即可得到最小值。设计的关键是如何利用第1组数据的中间结果快速完成第2组数据的比较。针对图像是串行输入流以及FPGA内部资源足够丰富的特点,设计了二级流水比较器,其逻辑框图如图1所示。图像第1行第1列的灰度值输入后锁存到12位的触发器,待第2个数据输入后与之比较,较小值锁存到中间的12位触发器,而第2个数据存储到左边的12位触发器。当第3个数据输入后与前2个数据的较小值比较,得到第1组数据的最小值,同时第1组数据中的第2个值作为第2组数据的第1个值,将与第3个数据(第2组数据的第2个值)比较。这样,图像数据输入到1×3腐蚀单元,2个象素周期之后即可得到最小值输出数据流。
将图1中的12位锁存器替换深度为256字节的FIFO,即可得到1×3腐蚀逻辑框图。与1×3腐蚀过程类似,f与g1腐蚀的最小值数据流输入到1×3腐蚀单元,2行延迟时间之后即可得到f与g腐蚀的图像灰度数据流。
评论