4. 图像处理基础:数字图像表示、色彩空间与滤波原理

各位同学,今天我们来聊聊图像处理的基础。这部分内容,说白了就是FPGA做图像加速的“地基”。地基打不牢,后面盖再高的楼也悬。我个人习惯,在开始写任何一行RTL代码之前,先把这些基础概念在脑子里过一遍。

4.1 数字图像是怎么表示的?

你想想看,我们眼睛看到的图像是连续的,但计算机和FPGA只能处理离散的数字。所以,图像必须被“数字化”。

一个数字图像,本质上就是一个二维矩阵。矩阵里的每个元素,我们叫它“像素”(Pixel)。

  • 灰度图:每个像素用一个数值表示亮度。比如0代表纯黑,255代表纯白。这就是一个单通道的矩阵。
  • 彩色图:每个像素用多个数值表示颜色。最常见的就是RGB,三个通道。

在FPGA里,我们通常把图像数据想象成一个数据流。像素点按行扫描,一行扫完再扫下一行。这个“行同步”和“帧同步”的信号,就是我们在硬件里要精确控制的时序。

核心概念:分辨率 = 宽度 × 高度。比如1920×1080,就是有1920列,1080行。每个像素的位宽决定了颜色深度。8位灰度图,就是2^8=256级灰度。

我在项目中遇到过一个问题:用了一个分辨率很高的摄像头,结果FPGA的BRAM不够缓存一行数据了。嗯,这里要注意,行缓存(Line Buffer)是FPGA图像处理中最常见的资源消耗点。

4.2 色彩空间:RGB 与 YCbCr

色彩空间,说白了就是描述颜色的数学模型。不同的模型,适用于不同的场景。

4.2.1 RGB 色彩空间

这个大家最熟悉。红、绿、蓝三原色,叠加出所有颜色。显示器、摄像头,基本都是RGB的天下。

在FPGA里,RGB数据通常是并行传输的。比如24位真彩色,就是R、G、B各占8位。我建议初学者先拿RGB图像练手,因为直观,调试起来也方便。

4.2.2 YCbCr 色彩空间

这个在视频压缩和传输里用得特别多。为什么?因为它把亮度(Y)和色度(Cb, Cr)分开了。

  • Y:亮度分量,就是灰度图。
  • Cb:蓝色色度分量。
  • Cr:红色色度分量。

人眼对亮度变化敏感,对色度变化不敏感。所以视频编码时,可以对Cb、Cr进行下采样,节省带宽。这就是4:2:2、4:2:0这些概念的由来。

实战技巧:在FPGA里做图像处理,我经常先把RGB转成YCbCr。因为很多滤波算法只对亮度Y做处理,可以省掉处理两个色度通道的资源。处理完再转回RGB输出给显示器。

RGB到YCbCr的转换公式如下(ITU-R BT.601标准):

Y  =  0.299 * R + 0.587 * G + 0.114 * B
Cb = -0.169 * R - 0.331 * G + 0.500 * B + 128
Cr =  0.500 * R - 0.419 * G - 0.081 * B + 128

在FPGA里实现时,浮点数乘法太费资源。我一般会把它转成定点数,比如把系数乘以256,用移位和加法来实现。这样既快又省资源。

4.3 图像滤波原理

滤波,说白了就是“去噪”或者“模糊”。在FPGA里,滤波的本质就是“卷积”运算。

4.3.1 什么是卷积?

用一个小的“核”(Kernel),在图像上滑动。核覆盖的像素,与核的系数相乘,然后求和,得到一个新的像素值。

举个例子,一个3×3的均值滤波核:

    1/9  1/9  1/9
K = 1/9  1/9  1/9
    1/9  1/9  1/9

这个核的作用,就是把中心像素替换成周围9个像素的平均值。图像就变模糊了,噪声也被平滑掉了。

4.3.2 均值滤波

最简单,也最直观。每个像素取邻域的平均值。

  • 优点:实现简单,FPGA里只需要加法器和移位器(除以9可以用近似值)。
  • 缺点:会模糊边缘,而且对椒盐噪声的抑制效果一般。

我曾经在一个工业检测项目里用过均值滤波,结果发现边缘被模糊得太厉害,导致后续的边缘检测算法误判率很高。后来换成了高斯滤波。

4.3.3 高斯滤波

高斯滤波的核,系数不是平均的,而是服从高斯分布。离中心越近,权重越大。

一个3×3的高斯核(σ≈0.8)示例:

    1/16  2/16  1/16
K = 2/16  4/16  2/16
    1/16  2/16  1/16

你看,中心像素的权重是4/16,是周围像素的2倍。这样在平滑噪声的同时,能更好地保留边缘信息。

避坑指南:我曾经在FPGA里实现高斯滤波时,直接用了浮点数乘法。结果资源消耗巨大,时序也跑不满。后来改成用移位和加法(比如乘以1/16就是右移4位),资源瞬间降下来了。记住,在FPGA里,能用移位就别用乘法,能用加法就别用乘法器。

4.4 知识体系总览

下面这张图,是我自己画的,把本章的核心逻辑串起来了。你仔细看看,就能明白这些概念之间的关系。

图像处理基础:知识体系 数字图像表示 色彩空间 图像滤波原理 像素矩阵 分辨率/位宽 RGB YCbCr 均值滤波 高斯滤波 核心逻辑:图像 → 像素矩阵 → 色彩空间转换 → 卷积滤波 FPGA实现关键:行缓存、流水线、定点数优化

这张图里,从“数字图像表示”出发,到“色彩空间”,再到“滤波原理”,是一条清晰的主线。你在FPGA里做图像处理,基本就是沿着这条路走。

4.5 小结

好了,这一章的内容就这些。总结一下:

  • 数字图像就是矩阵,FPGA处理的是像素流。
  • RGB适合显示,YCbCr适合处理和压缩。转换公式要记牢,FPGA实现时记得用定点数。
  • 滤波就是卷积。均值滤波简单但会模糊边缘,高斯滤波效果更好但计算稍复杂。

下一章,我们会把这些知识真正用到FPGA设计里。到时候,我会带着你们一步步搭建一个图像滤波的硬件加速器。敬请期待。

可可精品资料库