RGB与YUVYIQYCbCrHSICMY的模型互化基于matlab.docx
《RGB与YUVYIQYCbCrHSICMY的模型互化基于matlab.docx》由会员分享,可在线阅读,更多相关《RGB与YUVYIQYCbCrHSICMY的模型互化基于matlab.docx(14页珍藏版)》请在冰豆网上搜索。
![RGB与YUVYIQYCbCrHSICMY的模型互化基于matlab.docx](https://file1.bdocx.com/fileroot1/2022-10/28/0357b187-d60f-47c7-8f09-ed98fe284cc3/0357b187-d60f-47c7-8f09-ed98fe284cc31.gif)
RGB与YUVYIQYCbCrHSICMY的模型互化基于matlab
学号
2013-2014学年第二学期
学号
图像通信课程设计报告
设计题目:
图像的各种颜色空间转换
摘要
所谓三基色原理,是指自然界常见的各种颜色光都可由红、绿、蓝三种色光按照不同比例相配而成。
同样,绝大多数颜色也可以分解成红、绿、蓝三种色光。
这就是色度学中的最基本的原理。
彩色模型的用途是在某些标准下用通常课接受的方式简化彩色规范。
常常涉及到用几种不同的彩色空间表示图形和图像的颜色,以应对不同的场合和应用。
因此,在数字图像的生成、存储、处理及显示时,对应不同的彩色空间,需要作不同的处理和转换。
现在主要的彩色模型有RGB模型、CMY模型、YUV模型、YIQ模型、YcbCr模型、HSI模型等。
本设计主要使用MATLAB编程的方法,实现RGB与其余四种模型之间的互化。
即使用不同的色彩模型表示同一图形或图像。
通过转换实现色彩模型的变换之后,可以让同一幅图像以各种模式在全球范围内流通,所以本设计具有一定的实际意义。
一般的图像原始都为RGB—加色混合色彩模型,它与剩下的几个色彩模型之间存在着函数对应关系,通过矩阵运算改变模型的参数就可以实现不同色彩模型之间的相互转换。
例如CMY—减色混合色彩模型,就是利用青色、深红色、黄色这三种彩色按照一定比例来产生想要的彩色,CMY是RGB三基色的补色,它与RGB存在如下关系:
=-,使用MATLAB编程时,读入三个通道的数值,按照对应关系进行矩阵变换就可以转换成CMY色彩模型。
其他色彩模型转换原理与此相似。
关键词:
MATLAB,RGB、YUV、YIQ、YCbCr、HSI、色彩模型
一、设计任务、目的和要求
任务:
实现RGB模型、CMY模型、YUV模型、YIQ模型、YcbCr模型、HSI模型这几种不同色彩模型之间的相互转换
要求:
最终结果用图像显示
二、总体方案设计
系统运行环境:
WINDOWS7操作系统
编程软件平台:
MATLAB2012b
编码算法原理:
将原图的三基色数值读入,根据不同色彩模型之间的相互关系,通过矩阵运算改变不同的亮度和色度等信息来实现色彩模型的转换,然后将变换后的图像导出
流程图:
三、设计实现
1、RGB模型和CMY模型的互化
变换公式:
=-
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色彩模型的互化
变换公式:
=
clearall;
closeall;
clc;%清除内存空间信息,以便程序运行
img=imread('1.jpg');%读取原始图形
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>255)=255;
U(U<0)=0;
V(V>255)=255;
V(V<0)=0;
YUV=cat(3,Y,U,V);
subplot(132),imshow(YUV),title('YUV');
%%YUV2RGB
matrix=inv(matrix);%使用inv函数,求反变换矩阵
fori=1:
m
forj=1:
n
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);
end
end
img1(:
:
1)=R;
img1(:
:
2)=G;
img1(:
:
3)=B;
%将R、G、B分量全部化为[0,255]区间内
R(R>255)=255;
R(R<0)=0;
G(G>255)=255;
G(G<0)=0;
B(B>255)=255;
B(B<0)=0;
subplot(133),imshow(img1),title('反变换');
%比较
x=img-img;
disp(x);
3、RGB模型和YIQ色彩模型的互化
变换公式:
=
clearall;
closeall;
clc;
img=imread('1.jpg');%读取矩阵
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);
%%RGB2YIQ
Y=zeros(m,n);%亮度
I=zeros(m,n);%彩度
Q=zeros(m,n);%浓度
matrix=[0.2990.5870.114;
0.596-0.275-0.321;
0.212-0.5230.311];
%用for循环实现图像中每一个点的矩阵变换,即实现模型变换
fori=1:
m
forj=1:
n
tmp=matrix*[R(i,j)G(i,j)B(i,j)]';
Y(i,j)=tmp
(1);
I(i,j)=tmp
(2);
Q(i,j)=tmp(3);
end
end
YUV=cat(3,Y,I,Q);
subplot(132),imshow(YUV),title('YUV');%显示变换后的图形
%YUV2RGB
matrix=inv(matrix);
fori=1:
m
forj=1:
n
tmp=matrix*[Y(i,j)I(i,j)Q(i,j)]';
R(i,j)=tmp
(1);
G(i,j)=tmp
(2);
B(i,j)=tmp(3);
end
end
%将R、G、B三个分量赋予到img矩阵中
img(:
:
1)=R;
img(:
:
2)=G;
img(:
:
3)=B;
subplot(133),imshow(img),title('反变换');%得到反变换的图形
%将反变换图形与原始图形进行比较
x=img1-img;
disp(x);
4、RGB色彩模型和YCbCr色彩模型的互化
变换公式:
=+
clc;clear;close;
src=imread('1.jpg');
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>255)=255;
y(y<0)=0;
Cb(Cb>255)=255;
Cb(Cb<0)=0;
Cr(Cr>255)=255;
Cr(Cr<0)=0;
%将Y、Cb、Cr分量化为8位无符号整数并存放在dst矩阵中
dst(:
:
1)=uint8(y);
dst(:
:
2)=uint8(Cb);
dst(:
:
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;
%对所得的各个分量进行调整,使之介于[0,255]区间内
r1(r1>255)=255;
r1(r1<0)=0;
g1(g1>255)=255;
g1(g1<0)=0;
b1(b1>255)=255;
b1(b1<0)=0;
%将r1、g1、b1分量化为8位无符号整数并存放在dst2矩阵中
dst2(:
:
1)=uint8(r1);
dst2(:
:
2)=uint8(g1);
dst2(:
:
3)=uint8(b1);
subplot(144),imshow(dst2),title('反变换');%显示反变换图形
5、RGB色彩模型和HSI色彩模型的互化
变换公式:
H=θB≤G
360-θB>G
其中,θ=arccos;
S=1-[min(R,G,B)]
I=1/3*(R+G+B);
clear;clc;close;
x=imread('1.jpg');
rgb=im2double(x);
r=r