Как изменить яркость изображения HSV с помощью MATLAB

Я хочу изменить яркость изображения. Вот код, который я использовал.

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 для яркости и, пожалуйста, прокомментируйте значение коэффициента, которое используется, и его диапазон.


person Image Check    schedule 14.01.2018    source источник
comment
Умножение V на положительное значение изменяет яркость. Умножение на значение больше единицы увеличивает его, на значение меньше единицы уменьшает. Второй бит кода изменяет контраст. Он сохраняет среднюю яркость и приближает темные и светлые участки к средней.   -  person Cris Luengo    schedule 14.01.2018
comment
Спасибо @CrisLuengo Итак, могу ли я использовать любой коэффициент для увеличения и уменьшения?   -  person Image Check    schedule 15.01.2018
comment
Любой положительный фактор. Однако вы можете выйти за пределы значений. При увеличении яркости, например, путем умножения на 2, входное значение 0.7 станет 1.4. Это больше, чем 1, верхний предел. Параметр newV = min(newV,1) обрезает любые значения выше 1 до 1.   -  person Cris Luengo    schedule 15.01.2018


Ответы (1)


HSV относится к оттенку, насыщенности, значению. Каналы Hue и Saturation несут информацию о цвете, а Value — информацию об интенсивности (по сути, яркости). Таким образом, значение (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);

и так далее.

person paisanco    schedule 14.01.2018
comment
Большое спасибо @paisanco. Значение V находится в интервале [0,1]. Можно ли умножить это значение на коэффициент, скажем, 0,2 и 2, или мне следует найти значение V моего изображения и обеспечить коэффициент, который даст продукт в диапазоне [0 - 1]. Допустим, V моего изображения равно 0,5. Это означает, что коэффициент, который я могу умножить, может быть любым или между [0, 2] - person Image Check; 15.01.2018