Skip to content

Commit facc0ce

Browse files
authored
Merge pull request #3 from yolanda93/iuya
Iuya
2 parents cfa7245 + 7aeacde commit facc0ce

File tree

5 files changed

+203
-9
lines changed

5 files changed

+203
-9
lines changed

Codec/codec.m

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
h_sub23 = numel(huffmanCode(q_sub23))/numel(q_sub23);
9090

9191
% We need to "stitch" all the pieces of q_lena together
92+
q_lena = zeros(size(lena_gray_512,1),size(lena_gray_512,2));
9293
q_lena(1:128,1:128) = q_sub11;
9394
q_lena(1:128,129:256) = q_sub12;
9495
q_lena(129:256,1:128) = q_sub13;
@@ -117,6 +118,7 @@
117118
entropies
118119

119120
%%%%%%%% SYNTHESIS %%%%%%%%%%%%%
121+
dq_lena = zeros(size(lena_gray_512,1),size(lena_gray_512,2));
120122
dq_lena(1:128,1:128) = q_lena(1:128,1:128);
121123
dq_lena(1:128,129:256) = dequantize_matrix(q_lena(1:128,129:256),7,8);
122124
dq_lena(129:256,1:128) = dequantize_matrix(q_lena(129:256,1:128),7,8);
@@ -126,6 +128,7 @@
126128
dq_lena(257:512,257:512) = dequantize_matrix(q_lena(257:512,257:512),4,8);
127129

128130
synth_lena = haar_reverse_multilevel(dq_lena,2);
131+
figure
129132
imshow(synth_lena,[0,255])
130133

131134
%%%%%%%% PSNR calculation %%%%%%%%

Quantization/quantize_matrix.m

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,9 @@
99

1010
function quantization = quantize(pixel, new_bytesize)
1111
dif_levels = 2^(8-new_bytesize);
12-
quantization=floor(double(pixel)/dif_levels);
12+
if(pixel >= 0 )
13+
quantization=floor(double(pixel)/dif_levels);
14+
else
15+
quantization=ceil(double(pixel)/dif_levels);
16+
end
1317
end
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
img1 = imread('../Test-images/stereoscopy-images/image3.jpg');
2+
figure; image(img1), title('Original Image'); % Original image
3+
4+
% Split them into 2 separate images
5+
leftImage = img1(:,1:(end/2),:);
6+
leftImage = wextend('ar','zpd',leftImage,round(size(leftImage,1)/4)*4)
7+
rightImage = img1(:,end/2+1:end,:);
8+
figure; image(leftImage), title('Left Image');
9+
figure; image(rightImage), title('Right Image');
10+
11+
% Encode each eye's image using filters of different (usually chromatically opposite) colors, red and blue
12+
r = zeros(size(leftImage));
13+
gb = zeros(size(rightImage));
14+
r(:,:,1) = double(leftImage(:,:,1));
15+
gb(:,:,2:3) = double(rightImage(:,:,2:3));
16+
anaglyph = uint8(r+gb);
17+
figure,image(anaglyph), title('My Anaglyph')
18+
19+
% Create stereo anaglyph with Matlab function to check the result
20+
J = stereoAnaglyph(leftImage,rightImage);
21+
figure, image(J), title('Anaglyph using Matlab function')
22+
23+
% Use TD3 to code them using 2 decomposition layers
24+
leftImage_haar = zeros(size(leftImage,1),size(leftImage,2),size(leftImage,3));
25+
rightImage_haar =zeros(size(rightImage,1),size(rightImage,2),size(rightImage,3));
26+
rows_l=size(leftImage,1);
27+
rows_r=size(rightImage,1);
28+
cols_l=size(leftImage,2);
29+
cols_r=size(rightImage,2);
30+
sub11_l = zeros(rows_l/4,cols_l/4,3); sub11_r = zeros(rows_r/4,cols_r/4,3);
31+
sub12_l = zeros(rows_l/4,cols_l/4,3); sub12_r = zeros(rows_r/4,cols_r/4,3);
32+
sub13_l = zeros(rows_l/4,cols_l/4,3); sub13_r = zeros(rows_r/4,cols_r/4,3);
33+
sub14_l = zeros(rows_l/4,cols_l/4,3); sub14_r = zeros(rows_r/4,cols_r/4,3);
34+
sub21_l = zeros(rows_l/2,cols_l/2,3); sub21_r = zeros(rows_r/2,cols_r/2,3);
35+
sub22_l = zeros(rows_l/2,cols_l/2,3); sub22_r = zeros(rows_r/2,cols_r/2,3);
36+
sub23_l = zeros(rows_l/2,cols_l/2,3); sub23_r = zeros(rows_r/2,cols_r/2,3);
37+
38+
for i=1:3
39+
temp = leftImage(:,:,i);
40+
leftImage_haar(:,:,i) = haar_transform_multilevel(temp,2);
41+
42+
sub11_l(:,:,i) = leftImage_haar(1:rows_l/4, 1:cols_l/4);
43+
sub12_l(:,:,i) = leftImage_haar(1:rows_l/4, cols_l/4+1:cols_l/2);
44+
sub13_l(:,:,i) = leftImage_haar(rows_l/4+1:rows_l/2, 1:cols_l/4);
45+
sub14_l(:,:,i) = leftImage_haar(rows_l/4+1:rows_l/2, cols_l/4+1:cols_l/2);
46+
sub21_l(:,:,i) = leftImage_haar(1:rows_l/2, cols_l/2+1:cols_l);
47+
sub22_l(:,:,i) = leftImage_haar(rows_l/2+1:rows_l, 1:cols_l/2);
48+
sub23_l(:,:,i) = leftImage_haar(rows_l/2+1:rows_l, 257:cols_l);
49+
50+
rightImage_haar(:,:,i) = haar_transform_multilevel(rightImage(:,:,i),2);
51+
sub11_r(:,:,i) = rightImage_haar(1:rows_l/4, 1:cols_l/4);
52+
sub12_r(:,:,i) = rightImage_haar(1:rows_l/4, cols_l/4+1:cols_l/2);
53+
sub13_r(:,:,i) = rightImage_haar(rows_l/4+1:rows_l/2, 1:cols_l/4);
54+
sub14_r(:,:,i) = rightImage_haar(rows_l/4+1:rows_l/2, cols_l/4+1:cols_l/2);
55+
sub21_r(:,:,i) = rightImage_haar(1:rows_l/2, cols_l/2+1:cols_l);
56+
sub22_r(:,:,i) = rightImage_haar(rows_l/2+1:rows_l, 1:cols_l/2);
57+
sub23_r(:,:,i) = rightImage_haar(rows_l/2+1:rows_l, 257:cols_l);
58+
end
59+
image(leftImage_haar)
60+
61+

Stereoscopy/stereoscopy_script.m

Lines changed: 133 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1-
img1 = imread('../Test-images/stereoscopy-images/image3.jpg');
1+
[img1, colormap] = imread('../Test-images/stereoscopy-images/image3.jpg');
22
figure; image(img1), title('Original Image'); % Original image
33

44
% Split them into 2 separate images
5-
leftImage = img1(:,1:end/2,:);
5+
leftImage = img1(:,1:(end/2),:);
6+
67
rightImage = img1(:,end/2+1:end,:);
78
figure; image(leftImage), title('Left Image');
89
figure; image(rightImage), title('Right Image');
910

11+
leftImage = paddingZeros(leftImage,4); %We need a dimension divisible by 4
12+
rightImage = paddingZeros(rightImage,4);
13+
14+
1015
% Encode each eye's image using filters of different (usually chromatically opposite) colors, red and blue
1116
r = zeros(size(leftImage));
1217
gb = zeros(size(rightImage));
@@ -17,10 +22,132 @@
1722

1823
% Create stereo anaglyph with Matlab function to check the result
1924
J = stereoAnaglyph(leftImage,rightImage);
20-
figure, image(J), title('Anaglyph using Matlab function')
25+
figure, image(uint8(J)), title('Anaglyph using Matlab function')
2126

2227
% Use TD3 to code them using 2 decomposition layers
23-
img_lena = imread('../Test-images/lena_gray_512.tif');
28+
leftImage_haar = zeros(size(leftImage,1),size(leftImage,2),size(leftImage,3));
29+
rightImage_haar =zeros(size(rightImage,1),size(rightImage,2),size(rightImage,3));
30+
rows_l=size(leftImage,1);
31+
rows_r=size(rightImage,1);
32+
cols_l=size(leftImage,2);
33+
cols_r=size(rightImage,2);
34+
sub11_l = zeros(rows_l/4,cols_l/4,3); sub11_r = zeros(rows_r/4,cols_r/4,3);
35+
sub12_l = zeros(rows_l/4,cols_l/4,3); sub12_r = zeros(rows_r/4,cols_r/4,3);
36+
sub13_l = zeros(rows_l/4,cols_l/4,3); sub13_r = zeros(rows_r/4,cols_r/4,3);
37+
sub14_l = zeros(rows_l/4,cols_l/4,3); sub14_r = zeros(rows_r/4,cols_r/4,3);
38+
sub21_l = zeros(rows_l/2,cols_l/2,3); sub21_r = zeros(rows_r/2,cols_r/2,3);
39+
sub22_l = zeros(rows_l/2,cols_l/2,3); sub22_r = zeros(rows_r/2,cols_r/2,3);
40+
sub23_l = zeros(rows_l/2,cols_l/2,3); sub23_r = zeros(rows_r/2,cols_r/2,3);
41+
42+
for i=1:3
43+
temp = leftImage(:,:,i);
44+
leftImage_haar(:,:,i) = haar_transform_multilevel(temp,2);
45+
46+
sub11_l(:,:,i) = leftImage_haar(1:rows_l/4, 1:cols_l/4,i);
47+
sub12_l(:,:,i) = leftImage_haar(1:rows_l/4, cols_l/4+1:cols_l/2,i);
48+
sub13_l(:,:,i) = leftImage_haar(rows_l/4+1:rows_l/2, 1:cols_l/4,i);
49+
sub14_l(:,:,i) = leftImage_haar(rows_l/4+1:rows_l/2, cols_l/4+1:cols_l/2,i);
50+
sub21_l(:,:,i) = leftImage_haar(1:rows_l/2, cols_l/2+1:cols_l,i);
51+
sub22_l(:,:,i) = leftImage_haar(rows_l/2+1:rows_l, 1:cols_l/2,i);
52+
sub23_l(:,:,i) = leftImage_haar(rows_l/2+1:rows_l, cols_l/2+1:cols_l,i);
53+
54+
rightImage_haar(:,:,i) = haar_transform_multilevel(rightImage(:,:,i),2);
55+
sub11_r(:,:,i) = rightImage_haar(1:rows_l/4, 1:cols_l/4,i);
56+
sub12_r(:,:,i) = rightImage_haar(1:rows_l/4, cols_l/4+1:cols_l/2,i);
57+
sub13_r(:,:,i) = rightImage_haar(rows_l/4+1:rows_l/2, 1:cols_l/4,i);
58+
sub14_r(:,:,i) = rightImage_haar(rows_l/4+1:rows_l/2, cols_l/4+1:cols_l/2,i);
59+
sub21_r(:,:,i) = rightImage_haar(1:rows_l/2, cols_l/2+1:cols_l,i);
60+
sub22_r(:,:,i) = rightImage_haar(rows_l/2+1:rows_l, 1:cols_l/2,i);
61+
sub23_r(:,:,i) = rightImage_haar(rows_l/2+1:rows_l, cols_l/2+1:cols_l,i);
62+
end
63+
figure;image(uint8(leftImage_haar));title('Left Image after haar filter');
64+
figure;image(uint8(rightImage_haar));title('Right Image after haar filter');
65+
66+
% With more detail
67+
figure
68+
subplot(4,4,1)
69+
image(sub11_l./255)
70+
subplot(4,4,2)
71+
image(sub12_l)
72+
subplot(4,4,5)
73+
image(sub13_l)
74+
subplot(4,4,6)
75+
image(sub14_l)
76+
% Now for the bigger subbands we are going to use bigger subplots
77+
subplot(4,4,[3:4 7:8])
78+
image(sub21_l)
79+
subplot(4,4,[9:10 13:14])
80+
image(sub22_l)
81+
subplot(4,4,[11:12 15:16])
82+
image(sub23_l)
83+
84+
% With more detail
85+
figure
86+
subplot(4,4,1)
87+
image(sub11_r./255)
88+
subplot(4,4,2)
89+
image(sub12_r)
90+
subplot(4,4,5)
91+
image(sub13_r)
92+
subplot(4,4,6)
93+
image(sub14_r)
94+
% Now for the bigger subbands we are going to use bigger subplots
95+
subplot(4,4,[3:4 7:8])
96+
image(sub21_r)
97+
subplot(4,4,[9:10 13:14])
98+
image(sub22_r)
99+
subplot(4,4,[11:12 15:16])
100+
image(sub23_r)
101+
102+
leftImage_dq = zeros(size(leftImage,1),size(leftImage,2),size(leftImage,3));
103+
leftImage_synth = zeros(size(leftImage,1),size(leftImage,2),size(leftImage,3));
104+
105+
rightImage_dq =zeros(size(rightImage,1),size(rightImage,2),size(rightImage,3));
106+
rightImage_synth = zeros(size(rightImage,1),size(rightImage,2),size(rightImage,3));
107+
108+
for i=1:3
109+
q_sub11_l(:,:,i) = sub11_l(:,:,i);
110+
q_sub12_l(:,:,i) = quantize_matrix(sub12_l(:,:,i),4);
111+
q_sub13_l(:,:,i) = quantize_matrix(sub13_l(:,:,i),4);
112+
q_sub14_l(:,:,i) = quantize_matrix(sub14_l(:,:,i),4);
113+
q_sub21_l(:,:,i) = quantize_matrix(sub21_l(:,:,i),3);
114+
q_sub22_l(:,:,i) = quantize_matrix(sub22_l(:,:,i),3);
115+
q_sub23_l(:,:,i) = quantize_matrix(sub23_l(:,:,i),3);
116+
117+
q_sub11_r(:,:,i) = sub11_r(:,:,i);
118+
q_sub12_r(:,:,i) = quantize_matrix(sub12_r(:,:,i),4);
119+
q_sub13_r(:,:,i) = quantize_matrix(sub13_r(:,:,i),4);
120+
q_sub14_r(:,:,i) = quantize_matrix(sub14_r(:,:,i),4);
121+
q_sub21_r(:,:,i) = quantize_matrix(sub21_r(:,:,i),3);
122+
q_sub22_r(:,:,i) = quantize_matrix(sub22_r(:,:,i),3);
123+
q_sub23_r(:,:,i) = quantize_matrix(sub23_r(:,:,i),3);
124+
125+
%Synthesis
126+
leftImage_dq(1:rows_l/4, 1:cols_l/4,i)= q_sub11_l(:,:,i);
127+
leftImage_dq(1:rows_l/4, cols_l/4+1:cols_l/2,i) = dequantize_matrix(q_sub12_l(:,:,i),4,8);
128+
leftImage_dq(rows_l/4+1:rows_l/2, 1:cols_l/4,i) = dequantize_matrix(q_sub13_l(:,:,i),4,8);
129+
leftImage_dq(rows_l/4+1:rows_l/2, cols_l/4+1:cols_l/2,i) = dequantize_matrix(q_sub14_l(:,:,i),4,8);
130+
leftImage_dq(1:rows_l/2, cols_l/2+1:cols_l,i) = dequantize_matrix(q_sub21_l(:,:,i),3,8);
131+
leftImage_dq(rows_l/2+1:rows_l, 1:cols_l/2,i) = dequantize_matrix(q_sub22_l(:,:,i),3,8);
132+
leftImage_dq(rows_l/2+1:rows_l, cols_l/2+1:cols_l,i) = dequantize_matrix(q_sub23_l(:,:,i),4,8);
133+
leftImage_synth(:,:,i) = haar_reverse_multilevel(leftImage_dq(:,:,i),2);
134+
135+
rightImage_dq(1:rows_r/4, 1:cols_r/4,i)= q_sub11_l(:,:,i);
136+
rightImage_dq(1:rows_r/4, cols_r/4+1:cols_r/2,i) = dequantize_matrix(q_sub12_r(:,:,i),4,8);
137+
rightImage_dq(rows_r/4+1:rows_r/2, 1:cols_r/4,i) = dequantize_matrix(q_sub13_r(:,:,i),4,8);
138+
rightImage_dq(rows_r/4+1:rows_r/2, cols_r/4+1:cols_r/2,i) = dequantize_matrix(q_sub14_r(:,:,i),4,8);
139+
rightImage_dq(1:rows_r/2, cols_r/2+1:cols_r,i) = dequantize_matrix(q_sub21_r(:,:,i),3,8);
140+
rightImage_dq(rows_r/2+1:rows_r, 1:cols_r/2,i) = dequantize_matrix(q_sub22_r(:,:,i),3,8);
141+
rightImage_dq(rows_r/2+1:rows_r, cols_r/2+1:cols_r,i) = dequantize_matrix(q_sub23_r(:,:,i),4,8);
142+
rightImage_synth(:,:,i) = haar_reverse_multilevel(rightImage_dq(:,:,i),2);
143+
end
144+
figure; image(uint8(rightImage_synth));
145+
figure; image(uint8(leftImage_synth));
24146

25-
%leftImage_haar = haar_transform_multilevel(leftImage,2);
26-
%rightImage_haar = haar_transform_multilevel(rightImage,2);
147+
function paddedMatrix = paddingZeros(matrix, divisor)
148+
%paddedMatrix = zeros(size(matrix,1), size(matrix,2), size(matrix,3));
149+
rows = size(matrix,1);
150+
cols = size(matrix,2);
151+
paddedMatrix = wextend('ar','sym',matrix, round(rows/divisor)*divisor - rows, 'd');
152+
paddedMatrix = wextend('ac','sym',paddedMatrix, round(cols/divisor)*divisor - cols, 'l');
153+
end

Transformation/haar_transform.m

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
i = 1;
1919
for col = 1:2:size(matrix,2)
2020
haar_matrix(row,i) = (double(matrix(row,col)) + double(matrix(row,col+1)))/2.0;
21-
c = (double(matrix(row,col)) - double(matrix(row,col+1)))/2.0;
22-
haar_matrix(row,i+half_col) = c ;
21+
haar_matrix(row,i+half_col) = (double(matrix(row,col)) - double(matrix(row,col+1)))/2.0;
2322
i = i + 1;
2423
end
2524
end

0 commit comments

Comments
 (0)