Основная проблема заключается в том, что ваши диапазоны определены в диапазоне uint8
(диапазон [0, 255]), а результат rgb2hsv
удваивается в диапазоне [0, 1].
Вы можете умножить на 255 для преобразования диапазона [0, 1] в [0, 255].
Ограничить диапазон просто, используя функции min
и max
.
Вот рабочий пример:
RGB_Color = imread('peppers.png'); %Read sample image.
hsvImage = rgb2hsv(RGB_Color);
%Convert HSV from range [0, 1] to range [0, 255]
hsvImage = hsvImage*255;
H = hsvImage(:,:,1);
S = hsvImage(:,:,2);
V = hsvImage(:,:,3);
%1. Hue value must be in the range between 10 to 40
H = max(min(H, 40), 10);
%2. saturation value(100–255)
S = max(min(S, 255), 100);
%Convert back to RGB
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
hsvImage = cat(3, H, S, V);
%Convert HSV from range [0, 255] to range [0, 1].
hsvImage = hsvImage / 255;
rgbImage = hsv2rgb(hsvImage);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Display result
figure;imshow(RGB_Color);title('Original RGB image');
figure;imshow(rgbImage);title('RGB after HSV thresholding');
Исходное изображение RGB:
![Original RGB image](https://i.stack.imgur.com/X6iz4.png)
RGB после определения порога HSV:
![RGB after HSV thresholding](https://i.stack.imgur.com/63s5d.png)