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