通过HSV色彩空间对图像进行特定部分提取的简单实例的matlab实现

最近在自学Matlab图像处理, 这里就将自己对通过HSV色彩空间提出颜色的一点理解写出来. HSV色彩空间对于光照强度的敏感性很小, 因此, 我们往往会将RGB色彩空间转换成HSV色彩空间, 然后根据颜色对图像中感兴趣的部分进行提取. 下面就以法国国旗为例, 我们对蓝色区域进行提取. 一般情况下,我们在处理之前, 还要进行去噪等处理, 在这里我们就主要是将颜色提取,就省略这部分啦.

原始图像 :
通过HSV色彩空间对图像进行特定部分提取的简单实例的matlab实现_第1张图片

进行提取后的图像:
通过HSV色彩空间对图像进行特定部分提取的简单实例的matlab实现_第2张图片
该表是HSV颜色对应表, 不过matlab中hsv的范围是0–1, 因此, 我们需要对参数进行转换.
通过HSV色彩空间对图像进行特定部分提取的简单实例的matlab实现_第3张图片
在下面, 我会贴出matlab代码,并对里面的部分代码进行解释, 整个算例也会附在下面.
在代码里面, 主要需要注意的是, matlab中的imshow函数是以rgb格式而不是hsv格式进行显示的. 因此, 最后提取出蓝色时需要将hsv转化至rgb才能显示出蓝色, 否则,直接imshow是没有意义的. 此外, ind2sub函数主要是为了让find函数在三维矩阵中也能工作.

算例的下载链接在下面, 我不知道怎么直接把算例作为附件发在博客上, 就只能先上传资源再附上下载链接.
(https://download.csdn.net/my)
大家也可以直接联系我, 我会算例发给你们, 比较下载还要积分,也不划算.
谢谢大家啦.

clear all;
clc;
% 读取法国国旗
flag = imread('flag.jpg');        
figure;
% 展示国旗
imshow(flag);      
% 将国旗的rgb色彩空间转化至hsv色彩空间
flag_hsv = rgb2hsv(flag);      
% 创建一个白色图像,将蓝色提取到此处
flag_new = 255*ones(size(flag));
% 将该图像转至hsv色彩空间
flag_new_hsv = rgb2hsv(flag_new);
% 找出国旗中蓝色的像素
[row, col] = ind2sub(size(flag_hsv),find(flag_hsv(:,:,1)>0.56 ...
& flag_hsv(:,:,1)< 0.69 & flag_hsv(:,:,2)>0.16 & flag_hsv(:,:,3)>0.18));
% 将国旗中的蓝色像素复制到刚才新建的白色图像中
for i = 1 : length(row)
    flag_new_hsv(row(i),col(i),:) = flag_hsv(row(i),col(i),:);
end
% 将提取出来的蓝色,转化至rgb空间,进行展示
flag_blue = hsv2rgb(flag_new_hsv);
figure
imshow(flag_blue)
``

 

你可能感兴趣的:(matlab,图像处理)