Bootstrap

怎么把一张图片放入FPGA中并进行灰度化处理?

         常用的EDA综合工具有Quartus Prime 和 Vivado 两种,我们分别针对两种工具进行方法介绍。


方案:

1.格式转换

提示:Quartus Prime

        <1>图片转换:FPGA通常使用特定的数据格式或者帧格式来处理图像数据,例如使用像素流或者视频流的形式。因此,您需要将处理后的图像数据转换为适合FPGA输入的格式。我们可以把对应于的图片放到RAM或者ROM中,通过调用IP核的方式把图片放入(注:由于FPGA资源有限,建议手动改一下图大小,如像素100X100)。对于Quartus来说,放入图片前需要把图片格式转化为MIF文件。那么如何转化呢?读者可以在文章下方下载转换器,也可以搜索一下其他方法。
        <2>颜色转换:RGB颜色有RGB565的格式和RGB888的格式,它们分别代表不同颜色的位宽,根据需要自行选择。如:我需要用VGA驱动图片显示,那我就转化为RGB565的颜色格式,因为VGA的接口数据是16位的。如下图所示,我们把一个像素100X100的图片以RGB565的格式16位的位宽放入ROM中设置过程(其他选项默认即可)。

        同理Vivado 也是如此,只不过对于Vivado 来说,放入图片前需要把图片格式转化为COE文件格式。IP核设置操作如下图所示(注:记清楚自己的文件保存路径)。

2.灰度化处理

        <1>首先我们要知道灰度化处理图片的一些算法(注:matlab中有一些讲解),灰度化处理(Grayscale Conversion)是将彩色图像转换为灰度图像的过程。灰度图像是指每个像素只包含一个灰度值,通常用一个单独的亮度值来表示颜色和强度,而不考虑色彩信息。

在数字图像处理中,灰度化处理是常见且重要的预处理步骤,用于简化图像处理过程和减少计算复杂度。具体来说,灰度化处理可以通过以下几种常见的方法来实现:

        平均法:将彩色图像的每个像素的红色、绿色和蓝色通道的值求平均,得到一个灰度值。公式如下:Y=(R+G+B)/3 ​其中R,G,BB分别表示红色、绿色和蓝色通道的值。

        加权平均法:考虑不同颜色通道对人眼感知的权重,如常见的 NTSC 加权系数(0.299、0.587、0.114):Y=0.299×R+0.587×G+0.114×BY=0.299×R+0.587×G+0.114×B这种方法更符合人眼对亮度的感知特性,因此通常用于实际应用中。

        亮度法:根据亮度的计算方法来获取灰度值,如 Y=0.2126×R+0.7152×G+0.0722×BY=0.2126×R+0.7152×G+0.0722×B。这种方法也考虑了人眼对亮度的感知权重。

        <2>下面我们以加权平均法为例来用Verilog实现一下灰度化处理:

        细心的读者可能发现了,你这处理的颜色数据格式为RGB888的,那我RGB565格式用VGA显示怎么办呢?这就需要在例化的时候做一些小操作了。如下图:

        我们可以手动把RGB565的数据补充成RGB888的,从而实现灰度转化。 

;