发布于2019-08-22 16:16 阅读(5164) 评论(0) 点赞(28) 收藏(3)
本算法主要是利用HSL颜色空间进行饱和度S的上下限控制,对RGB空间进行补丁式调整。调整过程在RGB空间进行,其原理简单地说就是判断每个像素的R、G、B值是否大于或小于平均值,大于加上调整值,小于则减去调整值,如何计算各个像素点的调整系数是关键。本算法主体思想就是利用HSL来计算各点的调整系数。
算法过程如下:
(参考CSDN博客:https://blog.csdn.net/maozefa/article/details/1781208)
转换公式如下:
其中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如下:
运行方式:打开终端界面,在该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
-
- """
- PS算法
- 主要是利用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()
作者:齐天大圣
链接:https://www.pythonheidong.com/blog/article/52843/d1ed4b4d7ac3f90fc4c6/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!