1 YCbCr顏色空間
YCbCr顏色空間是YUV顏色空間的縮放和偏移版本。Y定義為8bit,標(biāo)稱顏色范圍為16-235;Cb和Cr標(biāo)稱顏色表示范圍為16-240。YCbCr的采樣格式一般有44、42、41、和40。
1.1 44 YCbCr格式
圖1表示44格式Y(jié)CbCr采樣點(diǎn)的定位。每個采樣點(diǎn)有Y、Cb和Cr值,每個顏色值的顏色分量為8bit(典型),因此每個采樣點(diǎn)24bit。
圖1 44采樣
1.2 42 YCbCr格式
圖 2表示42格式Y(jié)CbCr采樣點(diǎn)定位。對于每兩個水平Y(jié)采樣點(diǎn),有一個Cb和一個Cr采樣點(diǎn)。
圖2 42協(xié)調(diào)位置采樣
2 matlab YCbCr422轉(zhuǎn)YCbCr444
在上一期的基礎(chǔ)上將YCbCr422再轉(zhuǎn)回YCbCr444
close all
clear all
clc
I=imread('1.bmp');
[H ,W ,D]=size(I);
R=double(I(:,:,1));
G=double(I(:,:,2));
B=double(I(:,:,3));
Y0= double(zeros(H,W));
Cb0 =double(zeros(H,W));
Cr0 = double(zeros(H,W));
Cb1 =double(zeros(H,W/2));
Cr1 = double(zeros(H,W/2));
CbCr = double(zeros(H,W));
Cb =double(zeros(H,W));
Cr = double(zeros(H,W));
%RGB轉(zhuǎn)YCbCr444
for i = 1:H
for j = 1:W
Y0(i, j) = 0.299*R(i, j) + 0.587*G(i, j) + 0.114*B(i, j);
Cb0(i, j) = -0.172*R(i, j) - 0.339*G(i, j) + 0.511*B(i, j) + 128;
Cr0(i, j) = 0.511*R(i, j) - 0.428*G(i, j) - 0.083*B(i, j) + 128;
end
end
for i=1:1:H
for j=2:2:W
Cb1(i,j/2)=(Cb0(i,j-1)+Cb0(i,j))/2;
end
end
for i=1:1:H
for j=2:2:W
Cr1(i,j/2)=(Cr0(i,j-1)+Cr0(i,j))/2;
end
end
for i=1:1:H
for j=1:1:W
if rem(j,2)==0
CbCr(i,j)=Cr1(i,j/2);
else
CbCr(i,j)=Cb1(i,(j+1)/2);
end
end
end
%由YCbCr422轉(zhuǎn)出YCbCr444
%Cb
for i=1:1:H
for j=1:1:W
if rem(j,2)==0
Cb(i,j)=Cb1(i,j/2);
else
Cb(i,j)=Cb1(i,(j+1)/2);
end
end
end
%Cr
for i=1:1:H
for j=1:1:W
if rem(j,2)==0
Cr(i,j)=Cr1(i,j/2);
else
Cr(i,j)=Cr1(i,(j+1)/2);
end
end
end
CbCr=uint8(CbCr);
YCbCr(:,:,1)=Y0;
YCbCr(:,:,2)=Cb;
YCbCr(:,:,3)=Cr;
YCbCr=uint8(YCbCr);
Y=uint8(Y0);
Cb=uint8(Cb);
Cr=uint8(Cr);
%YCbCr422中的CbCr交替
figure(1),
imshow(CbCr),title('CbCr');
figure(2),
subplot(221),imshow(Cb),title('Cb');
subplot(222),imshow(Cr),title('Cr');
subplot(223),imshow(Y),title('Y');
subplot(224),imshow(YCbCr),title('YCbCr');
figure(3),
imshow(YCbCr),title('YCbCr');
CbCr細(xì)節(jié)放大為一幅CbCr交錯的圖像。
YCbCr444的Y分量為一幅灰度圖像。
上圖為YCbCr422轉(zhuǎn)換后的YCbCr444
module YUV422_2YUV444(
input clk,//系統(tǒng)時鐘
input rst_n,
input[7:0] cbcr_i,//輸入視頻色度信號cbcr
input de_i,//輸入視頻有效
input hs_i,//輸入視頻行同步
input vs_i,//輸入視頻場同步
output [7:0] y_o,//輸出視頻亮度分量y
output[7:0] cb_o,//輸出視頻Cb分量
output[7:0] cr_o,//輸出視頻Cr分量
output reg de_o,//輸出視頻有效
output reg hs_o,//輸出視頻行同步
output reg vs_o//輸出視頻場同步
);
reg flag;//CbCr分離時標(biāo)記信號
reg[7:0] cbcr_r,cbcr_r1,y_r;
assign cb_o = (flag==1'b0)?cbcr_r:cbcr_r1;
assign cr_o = (flag==1'b0)?cbcr_i:cbcr_r;
assign y_o = y_r;
always@(posedge clk)
begin
de_o <= de_i;
hs_o <= hs_i;
vs_o <= vs_i;
cbcr_r<=cbcr_i;
cbcr_r1<=cbcr_r;
y_r<=y_i;
end
always@(posedge clk or negedge rst_n)
begin
if(~rst_n)
flag <= 1'b0;
else if(de_o==1'b1)
flag <= ~flag;
else
flag <= 1'b0;
end
//將CbCr分開,并復(fù)制
//如:CbYCrYCbYCrY --> CbCrYCbCrYCbCrYCbCrY
endmodule
fpga實(shí)現(xiàn)YCbCr422轉(zhuǎn)YCbCr444,效果和matlab一致。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21744瀏覽量
603655
原文標(biāo)題:fpga實(shí)現(xiàn)YCbCr422轉(zhuǎn)YCbCr444
文章出處:【微信號:leezym0317,微信公眾號:FPGA開源工作室】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論