数字图像处理:图像颜色模型转换

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作业 11 1.RGB 模型:R,G,B 分别代表红色,绿色,蓝色三个分量,利用 三原色光的叠加产生各种光谱,主要应用于显示器。 CMYK 模型:C:青色,M:品红色,Y:黄色,K:黑色。彩色印刷 时采用的一种套色模式, 利用色料的三原色混色原理, 加上黑色油墨, 共计四种颜色混合叠加,形成所谓“全彩印刷”。 HSI 模型:H:色调,S:饱和度,I:亮度。从人的视觉系统出发, 用色调(Hue)、色饱和度(Saturation)和亮度(Intensity)来描述 色彩。 2.模型转换公式: RGB 转为 HSI:
4.结果对比: 原rgb图:
利用算法一转换为CMYK图:
ps转换为CMYK图:
算法二转换为CMYK图:
原本我用算法一转换发现为cmyk后颜色偏差是比较大的,后来又找 了算法二发现转换后效果比较理想,和ps转换为cmyk的效果有一些
差别,但不是很大。
问题与思考: (1)rgb转换为hsi后不能用imshow函数了, hsi好像不是图像的显示 模式,主要用于图像操作,所以没法显示比较。要想与ps转换 为hsi进行比较,只能读取单个像素的值进行比较???
% 执行转换方程 num = 0.5*((r - g) + (r - b)); den = sqrt((r - g).^2 + (r - b).*(g - b)); theta = acos(num./(den + eps)); %防止除数为 0 H = H(b H = num den theta; > g) = 2*pi - H(b > g); H/(2*pi); = min(min(r, g), b); = r + g + b;
den(den == 0) = eps; %防止除数为 0 S = 1 - 3.* num./den; H(S == 0) = 0; I = (r + g + b)/3; % 将 3 个分量联合成为一个 HSI 图像
hsi = cat(3, H, S, I);
(2)function rgb=hsi2rgb(hsi)
hsi=im2double(hsi); h=hsi(:,:,1); s=hsi(:,:,2); i=hsi(:,:,3); x=i.*(1-s); y=i.*(1+s.*cos(h)./(cos(3.*pi-h)+eps)); z=3.*i-(x+y); A=2*pi/3; B=4*pi/3; if(h<A) b=x;r=y;g=z; else if(h<B) h=h-A; r=x;g=y;b=z; else if(h<2*pi) g=x;b=y;r=z; end end end rgb=cat(3,r,g,b);
(3)rgb与cmyk相互转换: 算法一实现函数:
function CMYK=RGB2CMYK(RGB) R=RGB(:,:,1); G=RGB(:,:,2); B=RGB(:,:,3); C = 255 - R; M = 255 - G; Y = 255 - B; K=min(min(C,M),Y);
HSI 转为 RGB:
rgb 与 cmyk 相互转换: (算法一) RGB 转为 CMYK:
C = 255 - R; M = 255 - G; Y = 255 - B; K =min(C,M,Y); C = C - K; M = M - K; Y = Y - K;
CMYK 转为 RGB:
if ( C + K < 255 ) R = 255 - (C + K); else R = 0; if ( M + K < 255 ) G = 2Baidu Nhomakorabea5 - (M + K); else G = 0; if ( Y + K < 255 ) B = 255 - (Y + K); else B = 0;
C=C-K; M=M-K; Y=Y-K; CMYK=cat(3,C,M,Y,K); function RGB=CMYK2RGB(CMYK) C=CMYK(:,:,1); M=CMYK(:,:,2); Y=CMYK(:,:,3); K=CMYK(:,:,4); if ( C + K < 255 ) R = 255 - (C + K); else R = 0; end if ( M + K < 255 ) G = 255 - (M + K); else G = 0; end if ( Y + K < 255 ) B = 255 - (Y + K); else B = 0; end RGB=cat(3,R,G,B);
(算法二)
RGB 转为 CMYK:
C=1-R; M=1-G; Y=1-B; K=min(min(C,M),Y); C = ( C - K )./ ( 1 - K ); M = ( M - K )./ ( 1 - K ); Y = ( Y - K )./ ( 1 - K );
CMYK 转为 RGB:
(2)我用多个图片测试ps转换为cmyk的效果,好像转换后的图片普 遍偏暗,是么???
算法二实现函数:
function CMYK=RGB2CMYK(RGB) rgb=im2double(RGB); r=rgb(:,:,1); g=rgb(:,:,2); b=rgb(:,:,3); C=1-r; M=1-g; Y=1-b; K=min(min(C,M),Y);
if ( K == 1 ) C = 0; M = 0; Y = 0; else C = ( C - K )./ ( 1 - K ); M = ( M - K )./ ( 1 - K ); Y = ( Y - K )./ ( 1 - K ); end CMYK=cat(3,C,M,Y,K); function rgb=CMYK2RGB(CMYK) cmyk=im2double(CMYK); C=cmyk(:,:,1); M=cmyk(:,:,2); Y=cmyk(:,:,3); K=cmyk(:,:,4); C=C.*(1-K)+K; M=M.*(1-K)+K; Y=Y.*(1-K)+K; r=1-C; g=1-M; b=1-Y; rgb=cat(3,r,g,b);
C=C.*(1-K)+K; M=M.*(1-K)+K; Y=Y.*(1-K)+K; R=1-C; G=1-M; B=1-Y;
3.实现代码: (1)function hsi = rgb2hsi(rgb)
% hsi = rgb2hsi(rgb)把一幅 RGB 图像转换为 HSI 图像, % 其中 hsi(:, :, 1)是色相分量,它的范围是除以 2*pi 后的[0, 1]; % hsi(:, :, 2)是饱和度分量,范围是[0, 1]; % hsi(:, :, 3)是亮度分量,范围是[0, 1]。 % 图像分量 rgb r = g = b = = im2double(rgb); rgb(:, :, 1); rgb(:, :, 2); rgb(:, :, 3);
相关文档
最新文档