曲线原理
对于一个RGB图像, 可以对R, G, B 通道进行独立的曲线调整,即,对三个通道分别使用三条曲线(Curve)。还可以再增加一条曲线对 三个通道进行整体调整。 因此,对一个图像,可以用四条曲线调整。最终的结果,是四条曲线调整后合并产生的结果。
比如:对红色通道定义一条曲线如下:
图中,横轴(x)是输入,比左到右分别表示0到255. 纵轴(y)是输出,从下到上分别表示0到255.
该曲线由三个点定义,座标分别为: 点1(0,0), 点2(106,156),点3(255,255)
点1和点3是默认产生的, 点2是我们新增加的。在这三个点中画出一条曲线(Spline).
Spline 插值的原理是通过一系列的局部函数,对数据进行拟合和插值。具体来说,当我们需要拟合一个数据集时,我们可以将该数据集分成若干段,每一段都应该对应一个函数。这些函数连在一起,就可以得到一个光滑的曲线,这就是 Spline 插值的基本原理。
然后,我们再来分析对RGB通道进行整体调整的原理。
比如: 像素点的RGB= (152, 149, 166), 对RGB通道进行整体调整, 则根据该曲线同时对R, G, B三个值进行调整。
R = 152 作为输入值, 计算曲线上的 对应输出值 R1
G = 149 作为输入值, 计算曲线上的 对应输出值 G1
B = 166 作为输入值, 计算曲线上的 对应输出值 B1
则新的像素点的RGB =(R1, G1, B1)
用几条曲线同时调整时,先对红、绿、蓝三个独立通道分别进行调整,最后对RGB总通道进行调整。
由于曲线调整仅仅是数值替换,可以用一个转换表进行快速运算(Mat Lut = new Mat(1, 256, MatType.CV_8UC1);), 因此,曲线调整的速度是很快的。
代码如下:
运行效果如下:
使用红色通道调整:
使用RGB、红、绿、蓝四条曲线进行调整
经过本人几轮和PS对比,和PS曲线基本一模一样可以说零差别。
完整代码路径:https://download.csdn.net/download/qq_40451022/88202276
标签:PS,C#,曲线,255,OpenCV,RGB,通道,调整 From: https://www.cnblogs.com/bigfirsh/p/17621242.html