【发布时间】:2015-04-08 03:06:02
【问题描述】:
我目前正在尝试用 VHDL 开发 Sobel 滤波器。我正在使用存储在 BRAM 中的 640x480 图片。该算法使用图像的 3x3 像素矩阵来处理每个输出像素。我的问题是我目前只知道将图像放入 BRAM 中,其中 BRAM 的每个地址都保存一个像素值。这意味着我每个时钟只能读取一个像素。我的问题是我正在尝试对数据进行管道传输,因此理想情况下,我需要能够每个时钟获取三个像素值(图片的每一行中的一个),因此在我的初始延迟之后,我可以在每个时钟中加载三个新的像素值时钟并在每个时钟上获得一个输出像素。我正在寻找一种方法来做到这一点,但无法弄清楚。
我能想到的解决此问题的唯一方法是将图像放在 3 个 BRAM 中。这样我可以在每个时钟周期读取 3 行的值。但是,没有足够的内存空间来容纳一个足够大的 RAM 来容纳 640x480 图像,更不用说三个了。我可以降低图片尺寸来做到这一点,但我真的想用我目前的 640x480 图像尺寸来做。
任何帮助或指导将不胜感激。
【问题讨论】:
-
每个 BlockRAM 字使用多少位?您使用 RGB 还是仅使用黑白?您还可以使用外部存储器来存储图像(QDR-SSRAM 或 DDR-SDRAM)并将图像的一部分复制到本地快速 BlockRAM 中。此解决方案可扩展到 FullHD 及更高版本。
-
请注意,Sobel 是一个可分离的过滤器,因此您可以将过滤作为两个一维卷积执行。您可以分别处理图像的行和列,而不是在二维邻域中加载 9 个像素。
-
照片是每像素 12 位,我使用的是 RGB
标签: memory image-processing vhdl fpga pipeline