算法参考自 阿发伯 的博客.

http://blog.csdn.net/maozefa

饱和度调整

图像的饱和度调整有很多方法,最简单的就是判断每个象素的R、G、B值是否大于或小于128,大于加上调整值,小于则减去调整值;也可将象素RGB转换为HSV或者HSL,然后调整其S部分,从而达到线性调整图象饱和度的目的。这几种方法我都测试过,效果均不太好,简单的就不说了,利用HSV和HSL调整饱和度,其调节范围很窄,饱和度没达到,难看的色斑却出现了。而Photoshop的饱和度调整调节范围大多了,效果也好多了。

Photoshop的色相/饱和度的调整还是转换为HSL颜色模式进行的,只是饱和度的增减调节却是“独立”于SHL模式的另外一套算法,如果不是需要HSL的S和L部分进行饱和度的上下限控制,它也和明度调整一样,可以独立进行!

%%%% Increment, 饱和度调整增量(-100,100)

Increment=-20/100;

rgbMax=max(R,G,B);

rgbMin=min(R,G,B);

Delta=(rgbMax-rgbMin)/255;

if(Delta==0)

continue;

end

value=(rgbMax + rgbMin)/255;

L=value/2;

if(L<0.5)

S=Delta/value;

else

S =Delta/(2 - value);

end

if (Increment>=0)     //如果饱和度增量大于0,

if((Increment+S)>=1)

alpha=S;

else

alpha=1-Increment;

end

alpha=1/alpha-1;

R_new = R+(R- L * 255) * alpha;

G_new =G+(G - L * 255) *alpha;

B_new = B+(B - L * 255) *alpha;

else     // 饱和度增量小于0

alpha=Increment;

R_new = L*255 + (R- L * 255) *(1+alpha);

G_new = L*255 +(G- L * 255) * (1+alpha);

B_new = L*255 +(B- L * 255) * (1+alpha);

end

Program:

%%%  程序实现图像的饱和度调整

clc;
clear all;
close all;
Image=imread('4.jpg');
Image=double(Image);
R=Image(:,:,1);
G=Image(:,:,2);
B=Image(:,:,3);
I=0.299*R+0.587*G+0.114*B;
[row, col] = size(R);
R_new=R;
G_new=G;
B_new=B;
%%%% Increment, 饱和度调整增量(-100,100)
Increment=50/100;

for i=1:row
    for j=1:col
        rgbMax=max(R(i,j),max(G(i,j),B(i,j)));
        rgbMin=min(R(i,j),min(G(i,j),B(i,j)));
        Delta=(rgbMax-rgbMin)/255;
        if(Delta==0)
            continue;
        end
        value = (rgbMax + rgbMin)/255;
        L=value/2;
        
        if(L<0.5)
            S=Delta/value;
        else
            S =Delta/(2 - value);
        end
        
        if (Increment>=0)
            if((Increment+S)>=1)
                alpha=S;
            else
                alpha=1-Increment;
            end
          alpha=1/alpha-1;
          R_new(i,j) = R(i,j) + (R(i,j) - L * 255) * alpha;
          G_new(i,j) = G(i,j) + (G(i,j) - L * 255) * alpha;
          B_new(i,j) = B(i,j) + (B(i,j) - L * 255) * alpha;
        else
          alpha=Increment;
          R_new(i,j) = L*255 + (R(i,j) - L * 255) * (1+alpha);
          G_new(i,j) = L*255 + (G(i,j) - L * 255) * (1+alpha);
          B_new(i,j) = L*255 + (B(i,j) - L * 255) * (1+alpha); 
        end
    end
end     
Image_new(:,:,1)=R_new;
Image_new(:,:,2)=G_new;
Image_new(:,:,3)=B_new;
imshow(Image/255);
figure, imshow(Image_new/255);

原图:

效果图:饱和度增加 50%

PS 图像调整算法——饱和度调整相关推荐

  1. Photoshop图像处理算法—饱和度调整

    前言:之前在公司做项目的用到photoshop颜色空间的一些相关方法,在此总结一下.下面原理部分是从我的总结文档里截取来的.需要复制的童鞋自己手写一下~ 2.程序部分 1)Matlab实验程序. &l ...

  2. PS 图像特效算法— —渐变

    这个特效利用图层的混合原理,先设置一个遮罩层,然后用遮罩层与原图进行相乘,遮罩层不同,图像最后呈现的渐变效果也不一样. clc; clear all; close all; addpath('E:\P ...

  3. PS图像特效算法——百叶窗

    这个只要设置好条纹的宽度和条纹的间隔,建立一个遮罩层,等间隔的对原图进行等间距的遮罩. clc; clear all; Image=imread('4.jpg'); Image=double(Imag ...

  4. 用OpenCV实现Photoshop算法(七): 调整色相饱和度

    系列文章: 用OpenCV实现Photoshop算法(一): 图像旋转 用OpenCV实现Photoshop算法(二): 图像剪切 用OpenCV实现Photoshop算法(三): 曲线调整 用Ope ...

  5. Python: PS 图像调整--饱和度调整

    本文用 Python 实现 PS 图像调整中的饱和度调整算法,具体的算法原理和效果可以参考之前的博客: http://blog.csdn.net/matrix_space/article/detail ...

  6. 在QT框架下进行仿照PS图像调整功能设计(亮度对比度,色相饱和度及明度)

    原文链接:https://blog.csdn.net/maozefa/article/details/4778934 图像亮度调整分为非线性和线性两种方法. 非线性图像亮度是将图像像素的R.G.B分别 ...

  7. PS 图像黑白调整算法(彩色图转灰度图)(VC++)

    本篇文章参考了万水千山的博客PS 图像调整算法--黑白和阿发伯的博客C++图像处理 -- 图像颜色混合(上) 黑白调整 Photoshop CS的图像黑白调整功能,是通过对红.黄.绿.青.蓝和洋红等6 ...

  8. PS 图像调整算法——阈值

    PS里面这个算法,先将图像转成灰度图像,然后根据给定的阈值,大于该阈值的像素赋值为1,小于该阈值的赋值为0. if x>T, x=1; if x<T, x=0; 原图: 效果图:阈值为 1 ...

  9. 图像处理算法python_图像处理——饱和度调整算法(python语言)

    饱和度调整算法说明(完整python代码在文末): 本算法主要是利用HSL颜色空间进行饱和度S的上下限控制,对RGB空间进行补丁式调整.调整过程在RGB空间进行,其原理简单地说就是判断每个像素的R.G ...

最新文章

  1. 跨界 | 隐形AI与设计
  2. 从零搭建 Spring Cloud 服务(超级详细)
  3. android_home is not set mac,mac解决appium-doctor报ANDROID_HOME is NOT set
  4. DocKer linux Centos 安装DocKer 只需要十步
  5. cxGrid功能_用于备查【转】
  6. java 用于xcopy复制_java调用copy复制子文件夹及文件到指定目录(非xcopy)
  7. docker启动sqlserver_Docker搭建SQLServer
  8. Python内置函数(37)——sorted
  9. main在c语言中的作用,main函数在C语言中是怎么定义的?有什么作用?
  10. mysql 密码忘了_mysql8.0以上版本安装配置及忘记密码时重置
  11. PSFTP工具传输文件的命令使用方法
  12. 平衡自行车的原理以及制作方法
  13. 普通人如何获得第一桶金
  14. 【正点原子I.MX6U-MINI应用篇】6、嵌入式Linux在LCD屏幕上显示字符
  15. 谈谈我对云原生与软件供应链安全的思考
  16. 如何查看linux内核版本
  17. mysql数据库更改密码
  18. 哈希算法原理与应用:确保数据完整性和安全性的关键技术
  19. 2K Star!超过 50 个专题、450 个好项目,大半年来推荐过的重磅项目合集
  20. 为了后端掌握的粗浅前端

热门文章

  1. Android Studio 连接雷电模拟器
  2. overflow and underflow
  3. Java解析excel工具easyexcel 助你快速简单避免OOM
  4. leetcode-94
  5. Angular中input双向绑定
  6. 智能科学与技术 毕业设计怎么做 - 选题推荐 - 疑问解答
  7. OpenCV开发笔记(五十四):红胖子8分钟带你深入了解Haar级联分类器进行人脸检测(图文并茂+浅显易懂+程序源码)
  8. 超实用Word小技巧,常用但很少有人记得住
  9. Java生成word文档|综合
  10. 喷淋系统在安装算量软件中如何计算工程量?