如何使用 MATLAB 更改 HSV 图像的亮度

How to change the brightness of an HSV image using MATLAB

我想改变图像的亮度。这是我使用的代码。

rgbImage = imread('C:\Users\AHII\Desktop\IEEE\Original.jpg');
hsvImage = rgb2hsv(rgbImage);
hChannel = hsvImage(:, :, 1);
sChannel = hsvImage(:, :, 2);
vChannel = hsvImage(:, :, 3);
%newS = (5) * sChannel;     
%newS = sChannel / (0.5) ; 
%newS = (-0.5) * sChannel;
newHSVImage = cat(3, hChannel, newS, vChannel);
newRGBImage = hsv2rgb(newHSVImage);

我做的代码部分有3个pattern作为命令。我不知道哪个是正确的使用方法。我需要获得十个不同亮度级别的图像。 newS 有范围级别吗?我目前使用的是 0.5 - 2.5,步长间隔为 0.5,例如 0.5、1.0、1.5,还有负值,例如 -0.5、-1.0 等等。我在检查的时候也看到了这段代码。

hsvImage = rgb2hsv(rgbImage);
hChannel = hsvImage(:, :, 1);
sChannel = hsvImage(:, :, 2);
vChannel = hsvImage(:, :, 3);
meanV = mean2(vChannel);
newV = meanV + 0.5 * (vChannel - meanV); 
newHSVImage = cat(3, hChannel, sChannel, newV);
newRGBImage = hsv2rgb(newHSVImage);

所以亮度是V通道还是S通道,请评论使用的系数值及其范围。

HSV指的是色相、饱和度、明度。色调和饱和度通道携带有关颜色的信息,而值携带有关强度(本质上是亮度)的信息。因此,如果要更改图像亮度,值 (V) 是应该更改的通道。

值 (V) 将在区间 [0,1] 内,其中 0 是最小强度,1 是最大强度。所以你会希望不同亮度的值在那个区间内。

如果调整现有V,必须采取措施确保输出V保持在[0,1]区间内。正如@Cris Luengo 在评论中所建议的那样,一种方法是

newV = factor*vChannel; % where factor is a positive number
newV = min(newV,1);
newHSVImage = cat(3, hChannel, sChannel, newV);

等等。