宋桓公

【VIP之旅】理解3×3算法模板

0
阅读(2982)

前言:本文是笔者宋桓公在读   CrazyBingo的《基于VIP_Board Mini的HDL-VIP开发教程》
所产生的感悟,在此记录下来,不一定理解正确,欢迎大家一起讨论,再次感谢CB大神的无私奉献~~


正文:

理解完shift_ram再来理解彬哥的3×3算法模板,似乎也不是那么难了。


通过上次总结的情况,我们知道,只有当shift_ram被填满之后
(初始化完成之后)每次读取的数据才是我们想要的数据。


下面是一幅640*480的图片(后文称之为“图片A”),我们要将其进行3×3模板算法。

image

假设经过了640*2个周期,shift_ram 的两行已经被初始化好了,如下图:

image


可以看到图片A“第1行数据”和“第2行数据”已经进入到shift_ram。“第3行的第一个数据”,已经到了shift_in
的入口!那么在接下来的3个周期,一个3×3的数据块将被读出~~!!
接下看,我们来看看彬哥的程序:

image
我们发现,每一个周期会加入一列数据与之前的两列数据构成一个新的3×3数据块。(但是考虑到最开始的两个周期,
还不存在一个3×3数据块,所以程序将数据读取使能“潜伏延时”两个周期:assign    matrix_frame_clken
= per_frame_clken_r[1];)

接下来,理解就比较顺畅了:每一个周期会加入一列数据与之前的两列数据构成一个新的3×3数据块;
具体处理过程如下,一图胜过千言万语啊~~

image

在640次读取之后,看看shift_ram中发生了什么变化,如下图所示:

image

第四行的第一个数据到了shift_in的入口,图A中的第二行数据,和第三行数据,占满了shift_ram


那么,反应到整张图中,就是这样:

image
画了几张图下来,在结合CB的程序,我基本就明白了3×3的工作方式了:
从左到右,从上到下,每一个像素点,都逃不过3×3模板的计算,所以这样,一张图片处理下来,依然会产生480*640
个数据。


其实,还有一点需要注意,CB文中也提到了这点。就是在一开始的时候,shift_ram并未被填满,但是依然开始计算,并且
产生数据了,也就是说,第一行数据和第二行数据处理始终是“不到位”的!CB文中也提到可以用镜像的方式实现,将更
加完美,这个需要我们自己加倍努力~~

但是目前这个不是关键,关键是掌握,3×3
算法模板的思路,和实现过程~~


技术讨论欢迎加群~~电子技术协会   362584474