FPGA实现图像的腐蚀和膨胀

膨胀

         简单来说,膨胀是将与物体解出的背景点合并到该物体中,使边界向外部扩张的过程。用卷积模版对图像进行膨胀处理,会使图像像素点周围原的像素点的像素值得到同化的效果。下面采用一个形象的比喻来说明该运算,且用0表示害虫,1表示青蛙。青蛙吃了害虫表示膨胀运算,我们用3*3像素阵列来解释:

FPGA实现图像的膨胀和腐蚀

         上图只有害虫(0),固然害虫(0)幸免被吃;上图中虽然存在着8只害虫(0),但青蛙(1)的胃口太大,所以把害虫(0)全吃了;上图右只有青蛙(1),虽然没吃的,但青蛙(1)还是青蛙(1)。

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

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

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

{P1=P11P12P13P2=P21P22P23P3=P31P32P33P=P1P2P3 \begin{cases} P1=P11|P12|P13\\ P2=P21|P22|P23 \\ P3=P31|P32|P33 \end{cases}\\ P =P1|P2|P3
即通过两个时钟的算法,便能实现膨胀运算的结果。

腐蚀

         腐蚀是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。形象的比喻来说明该运算,用0表示蛀虫,1表示大米。蛀虫腐蚀大米的过程便是腐蚀运算。

FPGA实现图像的膨胀和腐蚀
上图左因为蛀虫(0)的存在,将8颗大米(1)腐蚀掉了,最后剩下蛀虫(0);上图中即便只存在一个蛀虫(0),但由于蛀虫太厉害,最后大米都烂掉了;
上图右没有蛀虫(0),大米(1)一颗不烂。

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

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

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

{P1=P11&P12&P13P2=P21&P22&P23P3=P31&P32&P33P=P1&P2&P3 \begin{cases} P1=P11\&P12\&P13\\ P2=P21\&P22\&P23 \\ P3=P31\&P32\&P33 \end{cases}\\ P =P1\&P2\&P3

即通过两个时钟的算法,便能实现腐蚀运算的结果。

相关文章: