《QT 插件化图像算法研究平台》有仿Photoshop曲线调整图像的功能,包括RGB曲线调整和HSV曲线调整。
Photoshop曲线调整原理:RGB、HSV各通道曲线,可以理解为一个值映射(值转换)函数。X轴是输入,Y轴是输出。x0对应y0,x1对应y1,... ,x255对应y255。 以R通道为例:R通道曲线调整就是,把原图像的所有像素的r值,按R通道曲线,由x替换为y,生成目标图像。
通过HSV曲线调整来实现去雾效果:Value曲线适当拉低、Saturation 饱和度曲线适当拉高,提高饱和度,相当于增亮暗通道。
原文:用OpenCV实现Photoshop算法(三): 曲线调整 原文有代码可下载,但需要积分。
原文代码在QT6.5.2、Opencv 4.8.0下编译通过。
原作者实现了RGB的曲线调整图像功能,我在他基础上,实现了HSV的曲线调整,即通过曲线调整:Hue 色调、Saturation 饱和度、Value 明度。
曲线调整是Photoshop的最常用的重要功能之一。
分析对单通道一条曲线的原理,比如:对红色通道:
图中,横轴是输入,比左到右分别表示0到255. 纵轴是输出,从下到上分别表示0到255.
该曲线由三个点定义,座标分别为: 点1(0,0), 点2(127,154),点3(255,255)
点1和点3是默认产生的, 点2是我们新增加的。在这三个点中画出一条曲线(Spline).
调整的实现: 当输入(红色通道值)为X1时,将输出值(新的红色通道值)设为曲线对应的值 Y1.
代码实现: 对图片的所有像素点进行扫描, 取红色值 X1, 换为 对应的 Y1. 其它两个通道值(绿蓝)不变。
比如: 像素点的RGB= (127, 230, 220), 其中红色值为 X1 = 127, 对应曲线上的值Y1 = 154, 则对该通道曲线调整后 像素点的RGB= (154, 230, 220)
如果曲线仅是一条由左下角到右上角的45度斜线,则 X1 总是等于 Y1, 则曲线调整后 图片不变。
HSV曲线调整原理与RGB曲线调整一样:
1、RGB、HSV各通道曲线,可以理解为一个值映射(值转换)函数。X轴是输入,Y轴是输出。
x0对应y0,x1对应y1,... ,x255对应y255。
2、R通道曲线调整就是,把原图像的所有像素的r值,按R通道曲线,由x替换为y,生成目标图像。
可以单通道调整图像,也可以多通道调整图像。依次调整RGB,或HSV。
3、 图像所有像素的Hue、Saturation 、Value(亮度)按各自通道的曲线进行转换。
4、由于Opencv的Hue的范围为0~180,那H通道曲线的y值超过180的均设为180。
RGB功能效果如下图所示:
1、把RGB曲线向下拉,相当于图像的中亮部分(125左右)像素给调暗一点。
2、把R通道曲线向上拉,相当于图像所有像素的R值适当增大,其中R值在125左右的增大较多,R值在0,或255左右有较小的增加。
2、把B通道曲线向上拉,相当于图像所有像素的B值适当增大,其中B值在125左右的增大较多,B值在0,或255左右有较小的增加。
通过HSV曲线调整来实现去雾效果:
1、把Value曲线(亮度)向下拉,此时图像略变暗,且偏灰。
2、把Saturation 饱和度曲线向上拉,增加饱和度。
原图(左上)非常灰,左下图为暗通道去雾图(颜色过于饱和),右下图为通过HSV的亮度曲线和饱和曲线调整,有去雾效果,但皮肤色彩更自然。
3、其它去雾效果对比图如下:暗通道去雾图更通透、HSV曲线调整也有去雾效果,但通透度差一点。