summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/toolbox/toolbox_basic/io/read422f.m
blob: 0063000d690dd523e70463272443d1d3fae0fd9f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
function I = read422(fname,nc);
%
%   I = read422(fname,width);
%
%      read in a .422 file, need to pass image width, default = 640
%

% assume image width = 640
if nargin<2,
  nc = 640;
end

%% find the image size
fid = fopen(fname);
fseek(fid,0,1);
fsize = ftell(fid);

nr = fsize/nc/2;

fseek(fid,0,-1);

%% read in Ybr data
data = fread(fid,fsize,'uchar');

%%% extract Y, Cb, Cr
Y1 = data(1:2:end);  Y1 = reshape(Y1,nc,nr)';
Cb1 = data(2:4:end); Cb1 = reshape(Cb1,nc/2,nr)';
Cr1 = data(4:4:end); Cr1 = reshape(Cr1,nc/2,nr)';

Cb = zeros(size(Y1)); 
Cr = zeros(size(Y1));

Cb(:,1:2:end) = Cb1;  Cb(:,2:2:end) = Cb1;
%Cb(:,2:2:end) = 0.5*(Cb1+[Cb1(:,2:end),Cb1(:,end)]);

Cr(:,1:2:end) = Cr1; Cr(:,2:2:end) = Cr1;
%Cr(:,2:2:end) = 0.5*(Cr1+[Cr1(:,2:end),Cr1(:,end)]);

%%% convert to r,g,b
r = 1.164*(Y1-16.0) + 1.596*(Cr-128.0);
g = 1.164*(Y1-16.0) - 0.813*(Cr-128.0) - 0.391*(Cb-128.0);
b = 1.164*(Y1-16.0) + 2.018*(Cb-128.0);

r = flipud(max(0,min(r,255)));
g = flipud(max(0,min(g,255)));
b = flipud(max(0,min(b,255)));

I = cat(3,r,g,b);

I = permute(I/255,[2,1,3]);