一种增加图像自然饱和度的方法

基本思路是
1. 求取图像三通道均值
2. 求取三个通道最大值
3. 单独处理每个通道,如果通道值和最大值相等不处理,如果不相等则调节

clear
clc
close all

% 如果为正数,正向调整饱和度(色彩更加鲜艳), 如果为负数,反向调整(色彩更加暗淡)
Adjustment = 100;

I = double(imread('leaf.jpg'));

VibranceAdjustment = -0.01 * Adjustment;

% 这里可以采用三通道均值,也可以采用灰度值,如果是要处理Bayer格式,可以简单统计一个bin的值。
grayVal = mean(I,3);
% grayVal = double(rgb2gray(uint8(I)));

% rgb 的最大值
maxVal = max(I,[],3);

% 调整量
AmtVal = (abs(maxVal - grayVal)./127) * VibranceAdjustment;

% 寻找要调整的像素
maskBlue = (I(:,:,3) ~= maxVal);
maskGreen = (I(:,:,2) ~= maxVal);
maskRed = (I(:,:,1) ~= maxVal);

% 调整
b =I(:,:,3).*(1-maskBlue) + (I(:,:,3) + (maxVal - I(:,:,3)).*AmtVal).*maskBlue;
g =I(:,:,2).*(1-maskBlue) + (I(:,:,2) + (maxVal - I(:,:,2)).*AmtVal).*maskBlue;
r = I(:,:,1).*(1-maskBlue) + (I(:,:,1) + (maxVal - I(:,:,1)).*AmtVal).*maskBlue;

% 组合成输出图像
OI = cat(3,r,g,b);

figure('Name', 'original Image')
imshow(uint8(I))
title('original Image')
figure('Name', 'Natural saturation Image')
imshow(uint8(OI))
title('Natural saturation Image')

结果如下:

左边是原图,右边是调整后的图像

 

 

更多详细可以参考

https://www.cnblogs.com/Imageshop/p/7234463.html

 

posted @ 2018-08-28 09:49  hudalikm  阅读(604)  评论(0编辑  收藏  举报