FPGA图像处理11_常用算法_亮度及对比度调节

亮度及对比度调节

亮度及对比度需要根据数值配合一齐调节,以达到更新的视觉效果。

如果是 RGB 彩色图像,亮度与对比度调节需要在所有颜色通道上进行相同的调节。

设当前像素点位宽为 8,则像素值范围 0~255。

设当前像素点值为 x,调节输出像素点值为 y。

设亮度参数b范围 -1~1,则有亮度调节公式:
y b = x + 255 × b y = { 0 y b ≤ 0 255 y b ≥ 255 y b 0 < y b < 255 yb=x+255\times b\\ y=\begin{cases} 0&yb\leq0\\ 255&yb\geq255\\ yb&0<yb<255 \end{cases} yb=x+255×by=0255ybyb0yb2550<yb<255
设对比度参数c范围 -1~1,对比度门限 th,则有对比度调节公式:
y c = { x ≥ t h ? 255 : 0 c = 1 x + ( x − t h ) × ( 1 1 − c − 1 ) 0 ≤ c < 1 x + ( x − t h ) × c c < 0 y = { 0 y c ≤ 0 255 y c ≥ 255 y b 0 < y c < 255 yc=\begin{cases} x\geq th? 255:0&c=1\\ x+(x-th)\times(\frac{1}{1-c}-1)&0\leq c<1\\ x+(x-th)\times c&c<0 \end{cases}\\ y=\begin{cases} 0&yc\leq0\\ 255&yc\geq255\\ yb&0<yc<255 \end{cases} yc=xth?255:0x+(xth)×(1c11)x+(xth)×cc=10c<1c<0y=0255ybyc0yc2550<yc<255
前述公式仅用于亮度或者对比度单独调节的情况,实际情况下需要将亮度对比度一同调节,并且在对比度数值大于 0 的情况下先调节亮度,在对比度数值小于 0 的情况下先调整对比度

在 FPGA 实现中,将亮度参数 b 定义为 16 位有符号整数,用补码表示(整字节数定义,方便外部配置参数值),数值范围 -255 至 255,单独计算亮度的方法:
y = x + b y=x+b y=x+b
计算结果再经过 0 至 255 范围的饱和控制,得到亮度调节的结果。

将对比度参数 c 定义为 16 位有符号整数,用补码表示,范围 -255 至 255,单独计算对比度的方法:
y = { x ≥ 128 ? 255 : 0 c = 255 x + ( x − 128 ) × c 255 − c 0 ≤ c < 255 x + ( x − 128 ) × c 255 c < 0 y=\begin{cases} x\geq 128?255:0&c=255\\ x+(x-128)\times\frac{c}{255-c}&0\leq c<255\\ x+(x-128)\times \frac{c}{255}&c<0 \end{cases} y=x128?255:0x+(x128)×255ccx+(x128)×255cc=2550c<255c<0
计算结果再经过 0 至 255 范围的饱和控制,得到对比度调节的结果。

由于亮度及对比度调节需要根据对比度参数选择不同的先后顺序,因此 FPGA 计算时分为两条计算流水线,完成计算后再根据对比度参数选择对应的计算流水线的输出。

对比度参数 c 值大于等于 0 的计算流水线:

FPGA图像处理11_常用算法_亮度及对比度调节_第1张图片

sysgen 中的实现如下:

FPGA图像处理11_常用算法_亮度及对比度调节_第2张图片

注意上图中橙色背景的除法计算,Divide 模块的配置如下:

FPGA图像处理11_常用算法_亮度及对比度调节_第3张图片

注意在 Divide 输入数据需要用 Convert 模块先由有符号整数补码转为浮点数,并且需要将 Divide 输出由 Convert 模块将浮点数转为有符号整数补码。

最后输出之前用于饱和控制的 Convert 模块的配置如下,注意 Overflow 配置为 Saturate:

FPGA图像处理11_常用算法_亮度及对比度调节_第4张图片

对比度参数 c 值小于 0 的计算流水线:

FPGA图像处理11_常用算法_亮度及对比度调节_第5张图片

sysgen 中的实现如下:

FPGA图像处理11_常用算法_亮度及对比度调节_第6张图片

注意上图中用截去低 8 位的方法近似实现除以 255 的计算,以节约计算资源。

最终由对比度参数值通过 Mux 模块选择计算流的输出:

FPGA图像处理11_常用算法_亮度及对比度调节_第7张图片

仿真结果。

试验图片来源于:https://unsplash.com/

输入原始图像:

FPGA图像处理11_常用算法_亮度及对比度调节_第8张图片

输出图像,亮度参数 50,对比度参数 100:

FPGA图像处理11_常用算法_亮度及对比度调节_第9张图片

输出图像,亮度参数 -10,对比度参数 -50:

FPGA图像处理11_常用算法_亮度及对比度调节_第10张图片

你可能感兴趣的:(FPGA图像处理)