MATLAB 如何使用HSV颜色空间进行颜色分割
在数字图像处理中,从图像中提取特定颜色或颜色范围,并丢弃所有其他颜色的过程称为颜色分割。在图像中,通过创建一个二进制掩码来执行颜色分割,以选择图像中处于指定颜色范围的所有像素。
颜色分割通常在特定颜色空间(如RGB(红-绿-蓝)颜色空间或HSV(色调-饱和度-值)颜色空间等)中使用。
在本文中,我们将学习如何使用MATLAB编程在HSV颜色空间中执行颜色分割。
在HSV颜色空间中,颜色分割是通过考虑图像的色调分量来实现的。其中,“色调”表示颜色的色调。从0到1的范围表示HSV颜色空间中色调值的整个颜色光谱。
颜色分割广泛应用于图像处理中,用于执行诸如去除背景、图像分割、对象识别等各种任务。
现在,让我们借助MATLAB示例程序来了解在HSV颜色空间中进行颜色分割的过程。
在图像中从红色到绿色进行颜色分割
示例
% MATLAB program to perform color slicing to green using HSV color space
% Read the input image
in_img = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');
% Convert the image from RGB format to HSV format
hsv = rgb2hsv(in_img);
% Extract the Hue channel of the HSV image
h = hsv(:, :, 1);
% Change all hue values within the red color range to green color
red_range = [0, 0.1]; % Red color range in HSV
h(h >= red_range(1) | h <= red_range(2)) = 0.3333; % Green color Hue value is 0.3333
% Replace the original Hue channel in the HSV image with the modified Hue channel
hsv(: , :, 1) = h;
% Convert the modified HSV image back to RGB image
out_img = hsv2rgb(hsv);
% Display the orignal image and the color-sliced image in green
figure;
subplot(1, 2, 1); imshow(in_img); title('Original Image');
subplot(1, 2, 2); imshow(out_img); title('Color Sliced to Green');
输出
代码解释
在这个MATLAB代码中,我们首先使用‘imread’函数读取一个RGB图像,并将其存储在变量‘in_img’中。接下来,我们使用‘rgb2hsv’函数将输入图像从RGB颜色空间转换为HSV颜色空间,并将其存储在变量‘hsv’中。然后,我们提取HSV图像的色调通道,并将其存储在变量‘h’中。
之后,我们在HSV颜色空间中指定了红色范围‘red_range’。然后,我们将该范围内的所有色调值设置为0.3333,即HSV空间中绿色的色调值。
接下来,我们用修改后的色调通道‘h’替换HSV图像中的原始色调通道‘hsv’,以应用颜色切片。然后,我们使用‘hsv2rgb’函数将修改后的HSV图像转换回RGB图像,以获取经过颜色切片的RGB图像,并将结果存储在变量‘out_img’中。
最后,我们使用‘imshow’函数显示原始图像和经过颜色切片到绿色的图像。
对图像进行从红色到紫色的颜色切片
示例
% MATLAB program to perform color slicing using HSV color space
% Read the input image
in_img = imread('https://www.tutorialspoint.com/assets/questions/media/14304-1687425236.jpg');
% Convert the image from RGB format to HSV format
hsv = rgb2hsv(in_img);
% Extract the Hue channel of the HSV image
h = hsv(:, :, 1);
% Change all hue values within the red color range to violet color
red_range = [0, 0.1]; % Red color range in HSV
h(h >= red_range(1) | h <= red_range(2)) = 0.8; % Violet color code in HSV is 0.8
% Replace the original Hue channel in the HSV image with the modified Hue channel
hsv(:, :, 1) = h;
% Convert the modified HSV image back to RGB iimage
out_img = hsv2rgb(hsv);
% Display the orignal image and the color-sliced image in violet
figure;
subplot(1, 2, 1); imshow(in_img); title('Original Image');
subplot(1, 2, 2); imshow(out_img); title('Color Sliced to Violet');
输出
代码解释
在这个MATLAB程序中,代码的实现和执行与MATLAB程序(1)相同。唯一的区别是,在这个MATLAB程序中,对红色到紫罗兰色的颜色进行了切片,其中在HSV颜色空间中指定的紫罗兰色的色调值为0.8。
因此,在本文中,我们通过MATLAB编程解释了图像在HSV颜色中的颜色切片。