"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)
这为我们提供了很多可以在图像分割中利用的特征。