MATLAB-RGB转YUV和YCbCr
另外YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式,需要将RGB格式转为YUV格式。而当图像进行后期显示时,又需要将YUV转换为RGB域。
2 RGB格式转为YUV格式转换公式
将上述矩阵乘法展开,YUV(256 级别) 可以从8位 RGB 直接计算如下:
Y = 0.299 R + 0.587 G + 0.114 B
U = - 0.1687 R - 0.3313 G + 0.5 B + 128
V = 0.5 R - 0.4187 G - 0.0813 B + 128
3 YUV格式转为RGB格式转换公式
将上述矩阵乘法展开,8位RGB可以从YUV(256级别) 直接计算如下:
R = Y + 1.402 (V-128)
G = Y - 0.34414 (U-128) - 0.71414 (V-128)
B = Y + 1.772 (U-128)
4 RGB格式转为YCbCr格式转换公式
YCbCr格式是基于YUV格式的一个偏移,具体转换如下:
Y’ = 0.257*R' + 0.504*G' + 0.098*B' + 16
Cb' = -0.148*R' - 0.291*G' + 0.439*B' + 128
Cr' = 0.439*R' - 0.368*G' - 0.071*B' + 128
5 RGB格式转为YCbCr格式转换公式
转换格式如下:
R' = 1.164*(Y’-16) + 1.596*(Cr'-128)
G' = 1.164*(Y’-16) - 0.813*(Cr'-128) -0.392*(Cb'-128)
B' = 1.164*(Y’-16) + 2.017*(Cb'-128)
clc 清空命令区域
clear 清空工作区
clear all 清空工作区与全局变量
close 关闭当前窗口
close all 关闭所有窗口
这几条命令一般写在代码的开头,用来清空或关闭之前操作残留的窗口和命令。
合成和提取RGB的三个分量
fR、fG、fB分别表示RGB三个分量的图像。一副RGB图像可以利用cat(级联)操作符合成彩色图像。
rgb_image = cat(3, fR, fG, fB)
提取三个分量
fR = RGB(:, :, 1); 红色分量
fG = RGB(:, :, 2); 绿色分量
fB = RGB(:, :, 3); 蓝色分量
size()函数得到图片的行列数
[ROW, COL,DIM] = size(R_data); 得到一副图像的行列数。
显示图片
figure, imshow(imag) 保存第一幅图像并同时显示第二幅图像。
显示图片用imshow()函数,前面加个figure; 可以在原来显示的基础上重新打开一个窗口显示。
生成矩阵函数
zeros函数——生成零矩阵
ones函数——生成全1阵
【zeros的使用方法】
B=zeros(n):生成n×n全零阵。
B=zeros(m,n):生成m×n全零阵。
B=zeros([m n]):生成m×n全零阵。
B=zeros(d1,d2,d3……):生成d1×d2×d3×……全零阵或数组。
B=zeros([d1 d2 d3……]):生成d1×d2×d3×……全零阵或数组。
B=zeros(size(A)):生成与矩阵A相同大小的全零阵。
【ones的使用方法】
ones的使用方法与zeros的使用方法类似。
clc
clear all
close all
img =imread('test.jpg');
R_data = img(:,:,1);
G_data = img(:,:,2);
B_data = img(:,:,3);
[row,col,dep]=size(img);%匹配行列数
Gray_data =img;
YCbCr =img;
YUV =img;
Y_data =zeros(row,col);
Cb_data=zeros(row,col);
Cr_data=zeros(row,col);
Y1_data =zeros(row,col);
U_data=zeros(row,col);
V_data=zeros(row,col);
%rgb转ycbcr
for r =1:row
for c =1:col
Y_data(r, c) = 0.299*R_data(r, c) + 0.587*G_data(r, c) + 0.114*B_data(r, c);
Cb_data(r, c) = -0.172*R_data(r, c) - 0.339*G_data(r, c) + 0.511*B_data(r, c) + 128;
Cr_data(r, c) = 0.511*R_data(r, c) - 0.428*G_data(r, c) - 0.083*B_data(r,c)+ 128;
end
end
%rgb转yuv
for r =1:row
for c =1:col
Y1_data(r, c) = 0.183*R_data(r, c) + 0.614*G_data(r, c) + 0.062*B_data(r, c)+16;
U_data(r, c) = -0.101*R_data(r, c) - 0.338*G_data(r, c) + 0.439*B_data(r, c) + 128;
V_data(r, c) = 0.439*R_data(r, c) - 0.399*G_data(r, c) - 0.040*B_data(r,c)+ 128;
end
end
YCbCr(:,:,1)=Y_data;
YCbCr(:,:,2)=Cb_data;
YCbCr(:,:,3)=Cr_data;
YUV(:,:,1)=Y1_data;
YUV(:,:,2)=U_data;
YUV(:,:,3)=V_data;
Gray_data(:,:,1)=Y_data;
Gray_data(:,:,2)=Y_data;
Gray_data(:,:,3)=Y_data;
figure,
subplot(221),imshow(img),title('img');
subplot(222),imshow(Gray_data),title('Gray');
subplot(223),imshow(YUV),title('YUV');
subplot(224),imshow(YCbCr),title('YCbCr');
disp('=================转换完成===============')
相关文章
- matlab 将图像信息融合到激光雷达点云
- 智能优化算法|增强型鲸鱼优化算法 (E-WOA)(Matlab代码实现)
- 多种调度模式下的光储电站经济性最优储能容量配置分析(Matlab代码实现)
- 基于纳什谈判理论的风–光–氢多主体能源系统合作运行方法(Matlab代码实现)
- 【无人机】四旋翼飞行器控制、路径规划和轨迹优化(Matlab代码实现)
- SAR雷达系统反设计及典型目标建模与仿真实现研究——目标生成与检测(Matlab代码实现)
- 【MATLAB】绘制柱状图、设置照明方式
- 【图像处理】基于MATLAB的RGB车牌识别
- m基于GA遗传优化的多因素加权竞价博弈频谱分配算法matlab仿真
- m基于3GPP-LTE通信网络的认知家庭网络Cognitive-femtocell性能matlab仿真
- m基于GA遗传优化算法的陆基制导系统地面站布设策略matlab仿真,并输出GDOP值
- 【MATLAB】matlab 文档使用 ( 文档查询 | 文档层次 | 自带搜索工具 | 帮助命令 | 学习导引 )
- Matlab使用笔记(九):matlab实现交通流仿真/车感知/城市交通交叉路口
- m异构蜂窝网络的K-Tier下行链路的matlab性能仿真,对比网络Voronoi图,覆盖率等
- Matlab使用笔记(九):matlab实现交通流仿真/车感知/城市交通交叉路口