summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/toolbox/toolbox_basic/io/read422f.m
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common/toolbox/toolbox_basic/io/read422f.m')
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/io/read422f.m50
1 files changed, 50 insertions, 0 deletions
diff --git a/SD-VBS/common/toolbox/toolbox_basic/io/read422f.m b/SD-VBS/common/toolbox/toolbox_basic/io/read422f.m
new file mode 100755
index 0000000..0063000
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/io/read422f.m
@@ -0,0 +1,50 @@
1function I = read422(fname,nc);
2%
3% I = read422(fname,width);
4%
5% read in a .422 file, need to pass image width, default = 640
6%
7
8% assume image width = 640
9if nargin<2,
10 nc = 640;
11end
12
13%% find the image size
14fid = fopen(fname);
15fseek(fid,0,1);
16fsize = ftell(fid);
17
18nr = fsize/nc/2;
19
20fseek(fid,0,-1);
21
22%% read in Ybr data
23data = fread(fid,fsize,'uchar');
24
25%%% extract Y, Cb, Cr
26Y1 = data(1:2:end); Y1 = reshape(Y1,nc,nr)';
27Cb1 = data(2:4:end); Cb1 = reshape(Cb1,nc/2,nr)';
28Cr1 = data(4:4:end); Cr1 = reshape(Cr1,nc/2,nr)';
29
30Cb = zeros(size(Y1));
31Cr = zeros(size(Y1));
32
33Cb(:,1:2:end) = Cb1; Cb(:,2:2:end) = Cb1;
34%Cb(:,2:2:end) = 0.5*(Cb1+[Cb1(:,2:end),Cb1(:,end)]);
35
36Cr(:,1:2:end) = Cr1; Cr(:,2:2:end) = Cr1;
37%Cr(:,2:2:end) = 0.5*(Cr1+[Cr1(:,2:end),Cr1(:,end)]);
38
39%%% convert to r,g,b
40r = 1.164*(Y1-16.0) + 1.596*(Cr-128.0);
41g = 1.164*(Y1-16.0) - 0.813*(Cr-128.0) - 0.391*(Cb-128.0);
42b = 1.164*(Y1-16.0) + 2.018*(Cb-128.0);
43
44r = flipud(max(0,min(r,255)));
45g = flipud(max(0,min(g,255)));
46b = flipud(max(0,min(b,255)));
47
48I = cat(3,r,g,b);
49
50I = permute(I/255,[2,1,3]);