Skip to content

Commit 7aeacde

Browse files
committed
Stereoscopy working as intended (i think)
1 parent ff628a1 commit 7aeacde

File tree

3 files changed

+195
-7
lines changed

3 files changed

+195
-7
lines changed
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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +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-
haar_matrix(row,i+half_col) = (double(matrix(row,col)) - double(matrix(row,col+1)))/2.0; ;
21+
haar_matrix(row,i+half_col) = (double(matrix(row,col)) - double(matrix(row,col+1)))/2.0;
2222
i = i + 1;
2323
end
2424
end

0 commit comments

Comments
 (0)