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

时间:2018-01-14 17:20:01

标签: matlab image-processing colors hsv canny-operator

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

rgbImage = imread('C:\Users\AHII\Desktop\IEEE\Original\01.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);

我在代码部分中有三种模式作为命令。我不知道哪种方法正确使用。我需要获得十种不同的亮度级图像。 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通道,请评论使用的因子值及其范围。

1 个答案:

答案 0 :(得分:0)

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);

等等。