常见色彩模型的相互转换基于MATLABWord下载.docx
- 文档编号:4630452
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:15
- 大小:704.19KB
常见色彩模型的相互转换基于MATLABWord下载.docx
《常见色彩模型的相互转换基于MATLABWord下载.docx》由会员分享,可在线阅读,更多相关《常见色彩模型的相互转换基于MATLABWord下载.docx(15页珍藏版)》请在冰点文库上搜索。
MATLAB2012b
编码算法原理:
将原图的三基色数值读入,根据不同色彩模型之间的相互关系,通过矩阵运算改变不同的亮度和色度等信息来实现色彩模型的转换,然后将变换后的图像导出
流程图:
开始
获取R、G、B三通道分量
进行矩阵变换得到图形
进行反变换得到反变换图形
将所得图形与原始图形比较
结束
三、设计实现
1、RGB模型和CMY模型的互化
变换公式:
CMY=111-RGB
clc;
clear;
close;
X=imread('
1.jpg'
);
%读取原始图形
Image=im2double(X);
%归一化处理
subplot(131),imshow(Image),title('
原图'
%读取图像的RGB分量
r=Image(:
:
1);
g=Image(:
2);
b=Image(:
3);
%进行RGB到CMY的变换
C=1-r;
M=1-g;
Y=1-b;
CMY=cat(3,C,M,Y);
subplot(132),imshow(CMY),title('
RGB转CMY'
%进行CMY到RGB的反变换
r1=1-C;
g1=1-M;
b1=1-Y;
rgb1=cat(3,r1,g1,b1);
subplot(133),imshow(rgb1),title('
CMY转RGB'
%数值分析反变换后和原图的差别
x=rgb1-Image;
disp(x);
2、RGB模型和YUV色彩模型的互化
YUV=RGB
clearall;
closeall;
%清除内存空间信息,以便程序运行
img=imread('
%读取原始图形
img=im2double(img);
%将图像映射到[0,1]区间;
[m,n,dim]=size(img);
%获得原图像长、宽、维数的数据
subplot(131),imshow(img),title('
%%图像的RGB
R=img(:
:
1);
G=img(:
2);
B=img(:
3);
%%RGB2YUV
Y=zeros(m,n);
%亮度
I=zeros(m,n);
%彩度
V=zeros(m,n);
%浓度
%定义乘法矩阵
matrix=[0.2990.5870.114;
-0.147-0.2980.436;
0.615-0.515-0.100];
%用for循环实现图像中每一个点的矩阵变换,即实现模型变换
fori=1:
m
forj=1:
n
tmp=matrix*[R(i,j)G(i,j)B(i,j)]'
;
Y(i,j)=tmp
(1);
U(i,j)=tmp
(2);
V(i,j)=tmp(3);
end
end
%使Y、U、V分量全部在[0,255]区间内
Y(Y>
255)=255;
Y(Y<
0)=0;
UU>
U(U<
V(V>
V(V<
YUV=cat(3,Y,U,V);
subplot(132),imshow(YUV),title('
YUV'
%%YUV2RGB
matrix=inv(matrix);
%使用inv函数,求反变换矩阵
fori=1:
tmp=matrix*[Y(i,j)U(i,j)V(i,j)]'
R(i,j)=tmp
(1);
G(i,j)=tmp
(2);
B(i,j)=tmp(3);
img1(:
1)=R;
2)=G;
3)=B;
%将R、G、B分量全部化为[0,255]区间内
R(R>
R(R<
G(G>
G(G<
B(B>
B(B<
subplot(133),imshow(img1),title('
反变换'
%比较
x=img-img;
3、RGB模型和YIQ色彩模型的互化
YIQ=RGB
%读取矩阵
%将图像映射到[0,1]区间。
[m,n,dim]=size(img);
%读取图像的长宽等信息
%%RGB2YIQ
Q=zeros(m,n);
0.596-0.275-0.321;
0.212-0.5230.311];
%用for循环实现图像中每一个点的矩阵变换,即实现模型变换
fori=1:
I(i,j)=tmp
(2);
Q(i,j)=tmp(3);
YUV=cat(3,Y,I,Q);
%显示变换后的图形
%YUV2RGB
tmp=matrix*[Y(i,j)I(i,j)Q(i,j)]'
%将R、G、B三个分量赋予到img矩阵中
img(:
subplot(133),imshow(img),title('
%得到反变换的图形
%将反变换图形与原始图形进行比较
x=img1-img;
4、RGB色彩模型和YCbCr色彩模型的互化
YCbCr=RGB+0128128
src=imread('
subplot(141),imshow(src),title('
%得到以double形式存在的R、G、B分量
r=double(src(:
1));
g=double(src(:
2));
b=double(src(:
3));
%convert...
y=floor(0.299*r+0.587*g+0.114*b+0);
%floor(pi)=3;
floor(3.5)=3;
floor(-3.2)=-4;
向负方向舍入
Cb=floor(-0.1687*r-0.3313*g+0.5*b+128);
Cr=floor(0.5*r-0.4187*g-0.0813*b+128);
%对所得的各个分量进行调整,使之介于[0,255]区间内
y(y>
y(y<
Cb(Cb>
Cb(Cb<
Cr(Cr>
Cr(Cr<
%将Y、Cb、Cr分量化为8位无符号整数并存放在dst矩阵中
dst(:
1)=uint8(y);
2)=uint8(Cb);
3)=uint8(Cr);
subplot(142),imshow(dst),title('
自编之rgb到YCBCR'
YCBCR=rgb2ycbcr(src);
subplot(143),imshow(YCBCR),title('
matlab自带转换函数'
%查找资料,得到反变换矩阵,并借此进行反变换
r1=1.0*y+0+1.402*(Cr-128);
g1=1.0*y-0.34413*(Cb-128)-0.71414*(Cr-128);
b1=1.0*y+1.772*(Cb-128)+0;
r1(r1>
r1(r1<
g1(g1>
g1(g1<
b1(b1>
b1(b1<
%将r1、g1、b1分量化为8位无符号整数并存放在dst2矩阵中
dst2(:
1)=uint8(r1);
2)=uint8(g1);
3)=uint8(b1);
subplot(144),imshow(dst2),title('
%显示反变换图形
5、RGB色彩模型和HSI色彩模型的互化
H=θB≤G
360-θB>
G
其中,θ=arccos0.5*[R-G+(R-B)][R-G+(R-B)(G-B)1/2];
S=1-3(R+G+B)[min(R,G,B)]
I=1/3*(R+G+B);
x=imread('
rgb=im2double(x);
r=rgb(:
g=rgb(:
b=rgb(:
%提取彩色图像R、G、B三个色彩通道的分量。
%构建rgb到his模型的转换公式
num=0.5*((r-g)+(r-b));
den=sqrt((r-g).^2+(r-b).*(g-b));
theta=acos(num./(den+eps));
H=theta;
H(b>
g)=2*pi-H(b>
g);
H=H/(2*pi);
num=min(min(r,g),b);
den=r+g+b;
den(den==0)=eps;
S=1-3.*num./den;
H(S==0)=0;
I=(r+g+b)/3;
hsi=cat(3,H,S,I);
%将色调H(Hue)、饱和度S(Saturation)、强度I(Intensity)分量合并成hsi色彩空间矩阵
subplot(121),imshow(hsi),title('
rgb转hsi'
%显示结果图像
H=hsi(:
1)*2*pi;
S=hsi(:
I=hsi(:
%得到R、G、B三个分量的初始矩阵,并赋为全0
R=zeros(size(hsi,1),size(hsi,2));
G=zeros(size(hsi,1),size(hsi,2));
B=zeros(size(hsi,1),size(hsi,2));
%当H分量在0到2/3pi之间时
idx=find((0<
=H)&
(H<
2*pi/3));
B(idx)=I(idx).*(1-S(idx));
R(idx)=I(idx).*(1+S(idx).*cos(H(idx))./cos(pi/3-H(idx)));
G(idx)=3*I(idx)-(R(idx)+B(idx));
%当H分量在2/3pi到4/3pi之间时
idx=find((2*pi/3<
4*pi/3));
R(idx)=I(idx).*(1-S(idx));
G(idx)=I(idx).*(1+S(idx).*cos(H(idx)-2*pi/3)./cos(pi-H(idx)));
B(idx)=3*I(idx)-(R(idx)+G(idx));
%当H分量在4/3pi到2pi之间时
idx=find((4*pi/3<
=2*pi));
G(idx)=I(idx).*(1-S(idx));
B(idx)=I(idx).*(1+S(idx).*cos(H(idx)-4*pi/3)./cos(5*pi/3-H(idx)));
R(idx)=3*I(idx)-(G(idx)+B(idx));
rgb1=cat(3,R,G,B);
%合并矩阵得到结果
subplot(122),imshow(rgb1),title('
hsi转rgb'
四、测试和调试
1、RGB模型和CMY模型的互化
,矩阵不为全0,所以有一定误差出现。
X矩阵为全0
X矩阵不全为0,说明有误差。
比较自编函数和使用MATLAB底层函数的结果,发现结果基本一致。
得到图形,基本符合要求
五、结论与心得
结论:
通过MATLAB编程最终实现了几种不同色彩模型之间的转换,取得了预期设计效果
心得:
在编程过程中也遇到了一些问题,例如对于矩阵的变换和图形的读入以及显示等,刚开始都不知道如何进行编程,在查阅了一些资料和一些别人编的类似的程序进行参考后,明白了一些基本操作原理,通过联系课上所学知识,将主程序的思路理清了。
在不断的调试中,又出现了一系列问题,通过和队友讨论都一一解决了,感觉对MATLAB的掌握又多了一些新的认识。
在查阅资料方面,我们充分利用了图书馆资源和一些网络资源,从原理出发,以实践收尾,最终实现了预定目标,收获颇多,尤其在查找资料方面相信在以后的学习中都将是一个很大的进步。
参考文献:
[1].王汇源.《数字图像通信原理与技术》.国防工业出版社.2000年
[2].何小海《图像通信》西安电子科技大学出版社
[3]朱秀昌.《图像通信应用系统》.北京邮电大学出版社.2003年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 常见 色彩 模型 相互 转换 基于 MATLAB
![提示](https://static.bingdoc.com/images/bang_tan.gif)