闲庭信步使用图像验证平台加速FPGA的开发:第十三课——图像浮雕效果的FPGA实现

(本系列只需要modelsim即可完成数字图像的处理,每个工程都搭建了全自动化的仿真环境,只需要双击 文件就可以完成整个的仿真,大大降低了初学者的门槛!!!! 如需要该系列的工程文件请关注知识星球: 成工fpga,https://t.zsxq.com/DMeqH 关注即送200GB学习资料,链接已置顶!)

图像的浮雕效果,就是把所要呈现的图像突起于石头表面,根据凹凸的程度不同从而形成三维的立体感。算法产生浮雕效果原理与之类似,即通过勾画图像的轮廓,并且降低周围的像素值,从而产生一张具有立体感的浮雕效果图片。我们可以通过相邻元素相减的方法得到轮廓与边缘的差,从而获得凹凸的立体感觉。

图像实现浮雕效果的公式就是求出前后两个像素点的差值,然后再加上一个阈值,既|img(i,j)-img(i,j-1)|+threshold

,如果区域比较平坦,值都在threshold附近,而图像变化比较大,结果就好远离threshold,从而形成浮雕的效果。

所以图像浮雕效果的FPGA实现不需要行缓存,只需要对图像数据进行一拍的延时即可。

在\src\emboss文件夹下新建emboss.sv文件,基本功能如下,图像数据延时一个时钟周期,为了避免负数,通过判断前后数据的大小进行减法运算,最后根据sum的值来确定输入的值。

在top文件中,例化了rgb2ycbcr模块和emboss模块,分别获取图像的亮度数据并使用亮度数据进行浮雕效果的实现。

在tb_image_sim文件中的第二个initial块中,将图像测试平台和FPGA硬件仿真的结果保存并比对。

我们双击sim文件夹下的top_tb.bat文件,完成系统的自动化仿真。

可以看到在modelsim的Transcript有如下的打印信息,图像测试平台和FPGA硬件仿真的结果一致。

打开img文件夹,也可以看到图像测试平台和FPGA硬件仿真的结果是一致的。

当然通过设置样式产生pattern产生正负的浮雕效果,如下所示。

其实我们发现,图像浮雕的效果并不是很明显,其实实现图像的浮雕效果还有其它的方法,比如使用多行数据,这就要用到了行缓存,大家如果感兴趣可以自行设计。