饱和度调整算法说明(完整python代码在文末):

本算法主要是利用HSL颜色空间进行饱和度S的上下限控制,对RGB空间进行补丁式调整。调整过程在RGB空间进行,其原理简单地说就是判断每个像素的R、G、B值是否大于或小于平均值,大于加上调整值,小于则减去调整值,如何计算各个像素点的调整系数是关键。本算法主体思想就是利用HSL来计算各点的调整系数。

算法过程如下:

(参考CSDN博客: https://blog.csdn.net/maozefa/article/details/1781208

1. 首先将RGB空间图像转换为HSL空间,用来对饱和度S进行上下限控制,这里不考虑色相H差异。

转换公式如下:

其中L表示亮度,S表示饱和度,min和max代表RGB空间中的R、G、B颜色值中的最小最大值,范围均为0-1的实数。

设置饱和度增量increment,范围为-1至1,并由此计算出适用于RGB空间的调整系数进行饱和度调整。

这里分两种情况:

1) 当增量i (increment) >= 0时,此时饱和度采用指数型增长方式调整。考虑到当前饱和度s与增量i之和可能大于1,超出饱和度上限,故仅仅考虑i作为调整依据不妥。在此选定当i+s大于1时,取s补数作为调整依据(s补数越大,调整越大);当i+s小于1,取i作为调整依据(i越大,调整越大)。RGB空间的调整系数alpha公式如下:

其中s代表当前饱和度,i代表设置的饱和度增量(increment)。

2) 当增量i (increment) < 0时,此时饱和度采用线性减弱方式调整。考虑到当i取-1时,R、G、B值会相等,可以直接采用线性的方式作调整。RGB空间的调整系数alpha如下:

3. 将饱和度调整过的RGB进行校验,即小于0的取0,大于1的取1。

4. 将饱和度调整完毕的RGB图输出比较即可。

完整python代码如下:

运行方式:打开终端界面,在该py文件目录下,运行: python  该文件.py  图片路径  饱和等级(-1~1)

例如:python  Saturation.py  C:\Users\PDD\Desktop\pdd.jpg  0.5

import cv2
import sys
import numpy as np
import matplotlib.pyplot as plt
  主要是利用HSL颜色空间进行饱和度S和亮度L的上下限控制,对RGB空间进行补丁式调整。
  参考CSDN博客:https://blog.csdn.net/maozefa/article/details/1781208
def PSAlgorithm(rgb_img, increment):
    img = rgb_img * 1.0
    img_min = img.min(axis=2)
    img_max = img.max(axis=2)
    img_out = img
    #获取HSL空间的饱和度和亮度
    delta = (img_max - img_min) / 255.0
    value = (img_max + img_min) / 255.0
    L = value/2.0
    # s = L<0.5 ? s1 : s2
    mask_1 = L < 0.5
    s1 = delta/(value)
    s2 = delta/(2 - value)
    s = s1 * mask_1 + s2 * (1 - mask_1)
    # 增量大于0,饱和度指数增强
    if increment >= 0 :
        # alpha = increment+s > 1 ? alpha_1 : alpha_2
        temp = increment + s
        mask_2 = temp >  1
        alpha_1 = s
        alpha_2 = s * 0 + 1 - increment
        alpha = alpha_1 * mask_2 + alpha_2 * (1 - mask_2)
        alpha = 1/alpha -1 
        img_out[:, :, 0] = img[:, :, 0] + (img[:, :, 0] - L * 255.0) * alpha
        img_out[:, :, 1] = img[:, :, 1] + (img[:, :, 1] - L * 255.0) * alpha
        img_out[:, :, 2] = img[:, :, 2] + (img[:, :, 2] - L * 255.0) * alpha
    # 增量小于0,饱和度线性衰减
    else:
        alpha = increment
        img_out[:, :, 0] = img[:, :, 0] + (img[:, :, 0] - L * 255.0) * alpha
        img_out[:, :, 1] = img[:, :, 1] + (img[:, :, 1] - L * 255.0) * alpha
        img_out[:, :, 2] = img[:, :, 2] + (img[:, :, 2] - L * 255.0) * alpha
    img_out = img_out/255.0
    # RGB颜色上下限处理(小于0取0,大于1取1)
    mask_3 = img_out  < 0 
    mask_4 = img_out  > 1
    img_out = img_out * (1-mask_3)
    img_out = img_out * (1-mask_4) + mask_4
    return img_out
path = './resource/fruit.bmp'
increment = 0.5  # 范围-1到1
#  run : python Saturation.py (path) (increment)
if __name__ == "__main__":
    len = len(sys.argv)
    if len >= 2 :
        path = sys.argv[1]
        if len >= 3 :
            increment = float(sys.argv[2])
    img = cv2.imread(path)
    img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
    img_new = PSAlgorithm(img, increment)
    plt.figure("img_original")
    plt.imshow(img/255.0)
    plt.axis('off')
    plt.figure("img_saturate")
    plt.imshow(img_new)
    plt.axis('off')
    plt.show()  
                    饱和度调整算法说明(完整python代码在文末):本算法主要是利用HSL颜色空间进行饱和度S的上下限控制,对RGB空间进行补丁式调整。调整过程在RGB空间进行,其原理简单地说就是判断每个像素的R、G、B值是否大于或小于平均值,大于加上调整值,小于则减去调整值,如何计算各个像素点的调整系数是关键。本算法主体思想就是利用HSL来计算各点的调整系数。算法过程如下:(参考CSDN博客:http...
				
Photoshop 的色相/饱和度调整,可以对全图、红、黄、绿、青、蓝、洋红六个通道进行设置。每个通道可设置: 色相(hue), 饱和度(satuation), 明度(Lightness)三个调整值。 另包含 多个颜色空间转换函数
图像采样与分辨率 • 采样后得到离散图像的尺寸称为图像分辨率。分辨率是数字图像可辨别的最小细节。 • 分辨率由宽(width)和高(height)两个参数构成。宽表示水平方向的细节数,高表示垂直方向的细节数。 • 例如: 一副640*480分辨率的图像,表示这幅图像是由 640*480=307200个点组成。 一副1920*1080分辨率的图像,表示这幅图像是由 1920*1080= 2073600个点组成。 采样间隔越小,所得图像像素数越多,空间分辨率高,图像质量好,但数据量大。
饱和度调节 饱和度调整算法很多,基本上是越复杂的算法调整后的图像视觉效果越好。 由于FPGA 不善长复杂的浮点运算,另一方面由于本文定位于基本的图像处理算法,此处只选择一种比较简单的饱和度算法。 设当前输入像素值位宽为 8,RGB 三通道数值为 r、g、b,三个数值间最大值为 max,最小值为 min。 如果 max=minmax=minmax=min,则当前像素点不用调节,直接输出原像素值。...
最简单的就是判断每个像素的R、G、B值是否大于或小于128,大于128就加上调整值,小于则减去调整值; 也可以将像素RGB转换为HSV或者HSL,然后调整其S部分,从而达到 线性调整图像饱和度的目的。 Photoshop的饱和度调整范围大,效果也好。Photoshop的色相/饱和度调整是转换为HSL颜色模式进行的,但是饱和度的增减调节是独立与HSL模式之外的算法。 PS饱和度调整算法 PS饱和度调整算法主要是利用HSL颜色空间进行饱和度S的上下限控制,对RGB空间进行补丁式调整。调
自己在网上找开源或者自己编写神经网络结构,借助数据集进行训练,然后得到模型。但是这种方法对应小白或者没有接触深度网络(人工智能)方面的小伙伴,简直太难了。 竟然如此,那么就看下面第二种方法。 借助第三方接口,直接调用接口就可以将图片转化为高清。 接下来帅子手把手教大家如何借助第三方(百度AI)接口,对照片进行高清化。
本文用 Python 实现 PS 图像调整中的饱和度调整算法,具体的算法原理和效果可以参考之前的博客:http://blog.csdn.net/matrix_space/article/details/22992961import matplotlib.pyplot as plt from skimage import iofile_name = 'D:/Visual Effects/PS Algo
void AdjustSatuation(cv::Mat &image, float percent) { int width = image.cols, height = image.rows; for (int i = 0; i < height; ++i) { auto data = image.ptr<cv::Vec3b>(i); for (int j = 0; j < width; + # 加载图片 读取彩色图像归一化且转换为浮点型 image = cv2.imread('./imgs/2.jpg', cv2.IMREAD_COLOR).astype(np.float32) / 255.0 # 颜色空间转换 BGR转为HLS hlsImg = cv2.cvtColo...
【机器学习】梯度、梯度法、python实现神经网络的梯度计算一、python实现求导的代码:二、what is 梯度三、使用梯度法寻找神经网络的最优参数四、神经网络的梯度计算 一、python实现求导的代码: 导数含义也就是:变量x一个微小的变化将导致f(x)的值在多大程度上变化。 def numerical_diff(f, x): h = 1e-4 return (f(x+h) - f(x-h)) / (2*h) 偏导数怎么求,对哪个变量求偏导,就把其他变量固定为某个值,然后就像求一元函
input_image = cv2.cvtColor(input_image , cv2.COLOR_BGR2HLS) # saturation input_image [:, :, 2] = sclale_value * input_image [:, :, 2] input_image [:, :, 2][input_image [:, :, 2] > 1] = 1 # HLS2BGR input_image = cv2.cvtC