|
1 |
| -img1 = imread('../Test-images/stereoscopy-images/image3.jpg'); |
| 1 | +[img1, colormap] = imread('../Test-images/stereoscopy-images/image3.jpg'); |
2 | 2 | figure; image(img1), title('Original Image'); % Original image
|
3 | 3 |
|
4 | 4 | % Split them into 2 separate images
|
5 |
| -leftImage = img1(:,1:end/2,:); |
| 5 | +leftImage = img1(:,1:(end/2),:); |
| 6 | + |
6 | 7 | rightImage = img1(:,end/2+1:end,:);
|
7 | 8 | figure; image(leftImage), title('Left Image');
|
8 | 9 | figure; image(rightImage), title('Right Image');
|
9 | 10 |
|
| 11 | +leftImage = paddingZeros(leftImage,4); %We need a dimension divisible by 4 |
| 12 | +rightImage = paddingZeros(rightImage,4); |
| 13 | + |
| 14 | + |
10 | 15 | % Encode each eye's image using filters of different (usually chromatically opposite) colors, red and blue
|
11 | 16 | r = zeros(size(leftImage));
|
12 | 17 | gb = zeros(size(rightImage));
|
|
17 | 22 |
|
18 | 23 | % Create stereo anaglyph with Matlab function to check the result
|
19 | 24 | J = stereoAnaglyph(leftImage,rightImage);
|
20 |
| -figure, image(J), title('Anaglyph using Matlab function') |
| 25 | +figure, image(uint8(J)), title('Anaglyph using Matlab function') |
21 | 26 |
|
22 | 27 | % 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)); |
24 | 146 |
|
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 |
0 commit comments