基于FPGA的sobel算子边缘检测一点小问题总结

sobel算子我就不多做介绍了,这东西在网上一搜一大把,大家可以自行去看看。我这里也给大家贴出两篇博文,是两位大神做的代码,大家可以参考一下。这是真 oo无双大神的方法,我用的也是与这类似的办法,大家看一看,绝对是很好的帖子
还有一位的帖子这位大神的方法虽然确实简洁了些,但那个取像素的IP核究竟是什么,他却没有说明。我自己去quartus ii里找了一下,发现那个IP核无法使用,我用其他的方法代替,发现不行,所以他的这种方法就只能放弃了。
这两位大神的方法都很不错,不过对于我这个小菜鸟来说还是有不懂的地方,比如 真 oo无双 大神的代码里,判断边缘的那一块有一句 0 : 1023,这个1023的来源我死活想不明白,后来忽然顿悟,才想起来这是默认的十进制,那么化成二进制也就是10’b1111_1111,也就是十位位宽的最大值。就这么一个小小的问题,让我这个脑子笨的人想了好久!!
好了,说了这么多言归正转。
我们知道,sobel算子有两个方向上的卷积模板(Gx和Gy),这两个模板的数据是现成的。我们只要用这两个模板,分别与原始图像的33窗口做卷积运算,然后求他们的平方和,再用SQRT(altera的IP核,专为开根号而设计)开方就可以得到G。
那么问题来了,这个原始图像像素的3
3窗口该如何获得?我搜了一下,已知的也就分为两类,一个就是我上面提到的真 oo无双大神的方法,想办法生成一个linebuffer,用linebuffer来生成33像素窗口,这个方法也是我采用的方法。第二种就是我提到的另一个大神的方法,用IP核直接产生九个像素,组成33窗口,但这里面有个问题,这位大神只字未提这究竟是个什么IP核,我虽然貌似找到了,但这IP核并不能用,因此这个方法只能放弃。
下面就说说linebuffer方面的问题吧。生成linebuffer不外乎几个方法,shift ram IP核,FIFO,ram等等,这里主要说下shift ram,我用的也是这个IP核。
实际上这里也没什么好说的,只有一个问题。
distance的设置,这个地方我查了一下,好多人都说这是图像的宽度,甚至有人直言如果是640480的图像就将这里改成640,就是这一句话不知道把多少人带偏了,还是说就我一个人一脸懵逼。总之,直到后来我看到一篇文章才恍然大悟,这里的数值应该是一帧图像的帧数宽度才对。也就是说如果是640480的图像,那么帧数宽度就应该是800,这些参数在VGA时序标准里都有规定,至于其他的,大家也可以查到。我主要想说的就是这一点。
第一次发博客,说了这么多也不知道说的啥,就到此结束吧。希望我说的这些,会对大家有所帮助。
如有转载,请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值