一种增加图像自然饱和度的方法
基本思路是
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