您的位置:首页 > 编程语言 > MATLAB

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

2018-11-16 16:50 1091 查看

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

原始图像 :

进行提取后的图像:

该表是HSV颜色对应表, 不过matlab中hsv的范围是0–1, 因此, 我们需要对参数进行转换.

在下面, 我会贴出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)
``
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐