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

【Matlab】【Color】matlab中一个“全能”颜色空间转换的程序

2014-03-17 16:10 411 查看
matlab中一个“全能”颜色空间转换的程序
转载之:http://www.bfcat.com/

"Colorspace Transformations"是一个matlab程序,可以完成多种颜色空间互相的转换,不用局限于matlab自带的RGB2Lab之类。

这个程序支持的颜色空间如下:
'RGB'              sRGB IEC 61966-2-1
'YCbCr'            Luma + Chroma ("digitized" version of Y'PbPr)
'JPEG-YCbCr'       Luma + Chroma space used in JFIF JPEG
'YDbDr'            SECAM Y'DbDr Luma + Chroma
'YPbPr'            Luma (ITU-R BT.601) + Chroma
'YUV'              NTSC PAL Y'UV Luma + Chroma
'YIQ'              NTSC Y'IQ Luma + Chroma
'HSV' or 'HSB'     Hue Saturation Value/Brightness
'HSL' or 'HLS'     Hue Saturation Luminance
'HSI'              Hue Saturation Intensity
'XYZ'              CIE 1931 XYZ
'Lab'              CIE 1976 L*a*b* (CIELAB)
'Luv'              CIE L*u*v* (CIELUV)
'LCH'              CIE L*C*H* (CIELCH)
'CAT02 LMS'        CIE CAT02 LMS



这种转换有什么用呢?其中一个重要的应用就是在不同的颜色空间里,图像分割问题会变得更简单。例如下面这幅图,我们想分割出中间那个黄色的辣椒



我们试着在YCbCr空间中的Cb通道进行,也就是下面这幅图



进行如下操作
mask = ~im2bw(img,0.24);
cc = bwconncomp(mask);
stats = regionprops(cc,'Area');
A = [stats.Area];
[~,biggest] = max(A);
mask(labelmatrix(cc)~=biggest) = 0;
mask = imfill(mask,'holes');
imshow('peppers.png')
showMaskAsOverlay(0.7,mask,'c');


结果完美的分割出了我们想要的目标。



showMaskAsOverlay是一个模板叠加显示的函数。

使用下面的程序,我们可以浏览这幅图像在各个颜色空间的样子
cs = {'RGB','YCbCr','JPEG-YCbCr','YDbDr','YPbPr','YUV',...
'YIQ','HSV','HSL','HSI',...
'XYZ','Lab','Luv','LCH','CAT02 LMS'};
peppers = imread('peppers.png');
figure('color','w');
ax = tight_subplot(numel(cs),4);
ind = 1;
for ii = 1:numel(cs)
newim = colorspace(['->' cs{ii}],peppers);
if max(newim(:)) > 1
newim = newim/max(newim(:));
end
axes(ax(ind));
imshow(newim,[]);title(cs{ii});
for jj = 1:3
ind = ind+1;
axes(ax(ind));
imshow(newim(:,:,jj),[]);title(sprintf('%s(:,:,%i)',cs{ii},jj));
end
ind = ind+1;
end
expandAxes(ax)




这为我们提供了很多可以在图像分割中利用的特征。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: