├── Coca-Cola-Can-icon.png ├── Histogram of original vs compressed image after stegnography.PNG ├── LSBwatermarking.m ├── Project Report - Novel Image Compression.pdf ├── Project.m ├── ProjectWithAddedFeatureOfStegnography.m ├── README.md ├── Results With LenaColor.jpg ├── Results With coke.jpg ├── ResutWithStegnography.PNG ├── SL0.m ├── Stegnography.PNG ├── coke.jpg ├── lena.png ├── lena_color.tiff └── pepsi.jpg /Coca-Cola-Can-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/Coca-Cola-Can-icon.png -------------------------------------------------------------------------------- /Histogram of original vs compressed image after stegnography.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/Histogram of original vs compressed image after stegnography.PNG -------------------------------------------------------------------------------- /LSBwatermarking.m: -------------------------------------------------------------------------------- 1 | clc; 2 | clear all; 3 | close all; 4 | 5 | i=imread('coke.jpg'); 6 | j=imresize(i,[1000, 1000]); % resizing taken image 7 | k=rgb2gray(j); % converting rgb image to gray image 8 | 9 | 10 | figure 11 | subplot(1,2,1) 12 | imshow(k); % displaying objective image 13 | title('Objective image'); 14 | 15 | x=imread('pepsi.jpg'); % image to be hidden 16 | 17 | 18 | y=imresize(x,[1000, 1000]); % resizing hidden image 19 | z=im2bw(y); % converting rbg to binary 20 | 21 | 22 | subplot(1,2,2); 23 | imshow(z) % displaying image to be hidden 24 | title('image to be hidden'); 25 | 26 | z=double(z); % increasing range to double 27 | 28 | r=double(k-mod(k,2)); % removal of LSB bits 29 | l=uint8(r+z); % adding LSB bit from image to be hidden 30 | 31 | 32 | 33 | figure 34 | imshow(l) 35 | title('Invisble watermarked Image'); 36 | 37 | %detection of hidden image 38 | 39 | h=mod(l,2); 40 | p=zeros(1000,1000); 41 | 42 | for x=1:1000 43 | for y=1:1000 44 | if(h(x,y)==1) 45 | p(x,y)=255; 46 | end 47 | end 48 | end 49 | 50 | s=im2bw(p); 51 | figure 52 | imshow(s); % hidden image 53 | title('Recovered hidden image') -------------------------------------------------------------------------------- /Project Report - Novel Image Compression.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/Project Report - Novel Image Compression.pdf -------------------------------------------------------------------------------- /Project.m: -------------------------------------------------------------------------------- 1 | clc; 2 | clear; 3 | 4 | %creating logistic maps m1 and m2 5 | m1 = zeros(1,256); 6 | m2 = zeros(1,256); 7 | r = 3.99; 8 | m1(1) = 0.11; 9 | m2(1) = 0.23; 10 | N = 256; 11 | for ii = 1:N-1 12 | m1(ii+1) = r*m1(ii)*(1 - m1(ii)); 13 | m2(ii+1) = r*m2(ii)*(1 - m2(ii)); 14 | end 15 | 16 | m1 = m1(129:256); 17 | m2 = m2(129:256); 18 | 19 | %creating circulant matrices c1 and c2 from the logistic maps 20 | %function c = circulantMatrix(m) 21 | c1 = zeros(128,128); 22 | c1(1,:) = m1; 23 | c2 = zeros(128,128); 24 | c2(1,:) = m2; 25 | 26 | for i = 2:128 27 | c1(i,:) = circshift(c1(i-1,:),1); 28 | end 29 | 30 | for i = 2:128 31 | c2(i,:) = circshift(c2(i-1,:),1); 32 | end 33 | 34 | %reducing the relevance among columns of circulant matrices 35 | M = 128; 36 | N = 128; 37 | lambda = 2; 38 | 39 | %c1(1,1) = lambda * c1(M,N); 40 | 41 | for i = 2:M 42 | c1(i,1) = lambda * c1(i-1,N); 43 | c2(i,1) = lambda * c2(i-1,N); 44 | end 45 | 46 | for j = 2:N 47 | for i = 2:M 48 | c1(i,j) = c1(i-1,j-1); 49 | c2(i,j) = c2(i-1,j-1); 50 | end 51 | end 52 | 53 | 54 | 55 | %Read an image 56 | I = imread('lena_color.tiff'); 57 | I = imresize(I, 0.5); 58 | Idouble = im2double(rgb2gray(I)); 59 | 60 | I1=I(1:size(I,1)/2,1:size(I,2)/2,:); 61 | I2=I(size(I,1)/2+1:size(I,1),1:size(I,2)/2,:); 62 | I3=I(1:size(I,1)/2,size(I,2)/2+1:size(I,2),:); 63 | I4=I(size(I,1)/2+1:size(I,1),size(I,2)/2+1:size(I,2),:); 64 | 65 | I1 = rgb2gray(I1); 66 | I2 = rgb2gray(I2); 67 | I3 = rgb2gray(I3); 68 | I4 = rgb2gray(I4); 69 | I = rgb2gray(I); 70 | 71 | %first block 72 | %dct1 = c1 * I1 * transpose(c1); 73 | d1 = dct2(I1); 74 | d2 = dct2(I2); 75 | d3 = dct2(I3); 76 | d4 = dct2(I4); 77 | 78 | 79 | d1(abs(d1) < 10) = 0; 80 | d2(abs(d2) < 10) = 0; 81 | d3(abs(d3) < 10) = 0; 82 | d4(abs(d4) < 10) = 0; 83 | 84 | 85 | L = ([d1 d3; d2 d4]); 86 | L1 = ([I1 I3]); 87 | L2 = ([I2 I4]); 88 | im = L; 89 | % Get the dimensions of the image. numberOfColorBands should be = 1. 90 | [rows, columns, numberOfColorBands] = size(im); 91 | if numberOfColorBands > 1 92 | imgray = rgb2gray(im); % Convert to gray level. 93 | end 94 | 95 | 96 | % Display the original gray scale image. 97 | subplot(1, 7, 2); 98 | imshow(I); 99 | title('Original Image'); 100 | % Enlarge figure to full screen. 101 | set(gcf, 'units','normalized','outerposition',[0 0 1 1]); 102 | % Give a name to the title bar. 103 | set(gcf, 'Name', 'image displays', 'NumberTitle', 'Off') 104 | %%%%%%%%%%%%%% 105 | compressedImage = im; 106 | 107 | subplot(1, 7, 3); 108 | imshow(log(abs(compressedImage)),[]) 109 | title('Compressed Image'); 110 | 111 | %SCRAMBLING BEGINS 112 | 113 | % Get the order to scramble them in 114 | scrambleOrder = randperm(rows*columns); 115 | % Scramble according to the scrambling order. 116 | im = im(scrambleOrder); 117 | 118 | % Reshape into a 2D image 119 | scrambledImage = reshape(im, [rows, columns]); 120 | 121 | % Display the scrambled gray scale image. 122 | subplot(1, 7, 4); 123 | imshow(log(abs(scrambledImage)),[]); 124 | title('Scrambled Image'); 125 | 126 | %To reconstruct the original image 127 | 128 | reconstruct = zeros(rows*columns, 2); 129 | reconstruct(:, 1) = 1 : (rows*columns); 130 | reconstruct(:, 2) = scrambleOrder; 131 | 132 | 133 | % Sort this to find out where each scrambled location needs to be sent to. 134 | newOrder = sortrows(reconstruct, 2); 135 | 136 | % Extract just column 1, which is the order we need. 137 | newOrder = newOrder(:,1); 138 | % Unscramble according to the reconstruct order. 139 | im = im(newOrder); 140 | % Reshape into a 2D image 141 | unscrambledImage = reshape(im, [rows, columns]); 142 | 143 | % Display the original gray scale image. 144 | subplot(1, 7, 5); 145 | imshow(log(abs(unscrambledImage)), []); 146 | title('Unscrambled Image'); 147 | 148 | 149 | I5=unscrambledImage(1:size(unscrambledImage,1)/2,1:size(unscrambledImage,2)/2,:); 150 | I6=unscrambledImage(size(unscrambledImage,1)/2+1:size(unscrambledImage,1),1:size(unscrambledImage,2)/2,:); 151 | I7=unscrambledImage(1:size(unscrambledImage,1)/2,size(unscrambledImage,2)/2+1:size(unscrambledImage,2),:); 152 | I8=unscrambledImage(size(unscrambledImage,1)/2+1:size(unscrambledImage,1),size(unscrambledImage,2)/2+1:size(unscrambledImage,2),:); 153 | 154 | 155 | %first block 156 | %idct1 = transpose(c1) * I1 * c1; 157 | K1 = idct2(d1); 158 | K2 = idct2(d2); 159 | K3 = idct2(d3); 160 | K4 = idct2(d4); 161 | 162 | 163 | L22 = ([K1 K3; K2 K4]); 164 | 165 | 166 | % Display the original image. 167 | subplot(1, 7, 6); 168 | imshow(L22, []); 169 | title('Uncompressed Image'); 170 | whos 171 | -------------------------------------------------------------------------------- /ProjectWithAddedFeatureOfStegnography.m: -------------------------------------------------------------------------------- 1 | clc; 2 | clear; 3 | 4 | i=imread('coke.jpg'); 5 | j=imresize(i,[1000, 1000]); % resizing taken image 6 | k=rgb2gray(j); % converting rgb image to gray image 7 | 8 | 9 | figure 10 | subplot(1,2,1) 11 | imshow(k); % displaying objective image 12 | title('Objective image'); 13 | 14 | x=imread('pepsi.jpg'); % image to be hidden 15 | 16 | 17 | y=imresize(x,[1000, 1000]); % resizing hidden image 18 | z=im2bw(y); % converting rbg to binary 19 | 20 | 21 | subplot(1,2,2); 22 | imshow(z) % displaying image to be hidden 23 | title('image to be hidden'); 24 | 25 | z=double(z); % increasing range to double 26 | 27 | r=double(k-mod(k,2)); % removal of LSB bits 28 | l=uint8(r+z); % adding LSB bit from image to be hidden 29 | 30 | 31 | 32 | figure 33 | imshow(l) 34 | title('Invisble watermarked Image'); 35 | 36 | %creating logistic maps m1 and m2 37 | m1 = zeros(1,256); 38 | m2 = zeros(1,256); 39 | r = 3.99; 40 | m1(1) = 0.11; 41 | m2(1) = 0.23; 42 | N = 256; 43 | for ii = 1:N-1 44 | m1(ii+1) = r*m1(ii)*(1 - m1(ii)); 45 | m2(ii+1) = r*m2(ii)*(1 - m2(ii)); 46 | end 47 | 48 | m1 = m1(129:256); 49 | m2 = m2(129:256); 50 | 51 | %creating circulant matrices c1 and c2 from the logistic maps 52 | %function c = circulantMatrix(m) 53 | c1 = zeros(128,128); 54 | c1(1,:) = m1; 55 | c2 = zeros(128,128); 56 | c2(1,:) = m2; 57 | 58 | for i = 2:128 59 | c1(i,:) = circshift(c1(i-1,:),1); 60 | end 61 | 62 | for i = 2:128 63 | c2(i,:) = circshift(c2(i-1,:),1); 64 | end 65 | 66 | %reducing the relevance among columns of circulant matrices 67 | M = 128; 68 | N = 128; 69 | lambda = 2; 70 | 71 | %c1(1,1) = lambda * c1(M,N); 72 | 73 | for i = 2:M 74 | c1(i,1) = lambda * c1(i-1,N); 75 | c2(i,1) = lambda * c2(i-1,N); 76 | end 77 | 78 | for j = 2:N 79 | for i = 2:M 80 | c1(i,j) = c1(i-1,j-1); 81 | c2(i,j) = c2(i-1,j-1); 82 | end 83 | end 84 | 85 | 86 | 87 | %Read an image 88 | I = l; 89 | I = imresize(I, 0.5); 90 | Idouble = im2double(I); 91 | 92 | I1=I(1:size(I,1)/2,1:size(I,2)/2,:); 93 | I2=I(size(I,1)/2+1:size(I,1),1:size(I,2)/2,:); 94 | I3=I(1:size(I,1)/2,size(I,2)/2+1:size(I,2),:); 95 | I4=I(size(I,1)/2+1:size(I,1),size(I,2)/2+1:size(I,2),:); 96 | 97 | %I1 = rgb2gray(I1); 98 | %I2 = rgb2gray(I2); 99 | %I3 = rgb2gray(I3); 100 | %I4 = rgb2gray(I4); 101 | %I = rgb2gray(I); 102 | 103 | %first block 104 | %dct1 = c1 * I1 * transpose(c1); 105 | d1 = dct2(I1); 106 | d2 = dct2(I2); 107 | d3 = dct2(I3); 108 | d4 = dct2(I4); 109 | 110 | 111 | d1(abs(d1) < 10) = 0; 112 | d2(abs(d2) < 10) = 0; 113 | d3(abs(d3) < 10) = 0; 114 | d4(abs(d4) < 10) = 0; 115 | 116 | 117 | L = ([d1 d3; d2 d4]); 118 | L1 = ([I1 I3]); 119 | L2 = ([I2 I4]); 120 | im = L; 121 | % Get the dimensions of the image. numberOfColorBands should be = 1. 122 | [rows, columns, numberOfColorBands] = size(im); 123 | if numberOfColorBands > 1 124 | imgray = rgb2gray(im); % Convert to gray level. 125 | end 126 | 127 | 128 | % Display the original gray scale image. 129 | subplot(1, 7, 2); 130 | imshow(I); 131 | title('Original Image'); 132 | % Enlarge figure to full screen. 133 | set(gcf, 'units','normalized','outerposition',[0 0 1 1]); 134 | % Give a name to the title bar. 135 | set(gcf, 'Name', 'image displays', 'NumberTitle', 'Off') 136 | %%%%%%%%%%%%%% 137 | compressedImage = im; 138 | 139 | subplot(1, 7, 3); 140 | imshow(log(abs(compressedImage)),[]) 141 | title('Compressed Image'); 142 | 143 | %SCRAMBLING BEGINS 144 | 145 | % Get the order to scramble them in 146 | scrambleOrder = randperm(rows*columns); 147 | % Scramble according to the scrambling order. 148 | im = im(scrambleOrder); 149 | 150 | % Reshape into a 2D image 151 | scrambledImage = reshape(im, [rows, columns]); 152 | 153 | % Display the scrambled gray scale image. 154 | subplot(1, 7, 4); 155 | imshow(log(abs(scrambledImage)),[]); 156 | title('Scrambled Image'); 157 | 158 | %To reconstruct the original image 159 | 160 | reconstruct = zeros(rows*columns, 2); 161 | reconstruct(:, 1) = 1 : (rows*columns); 162 | reconstruct(:, 2) = scrambleOrder; 163 | 164 | 165 | % Sort this to find out where each scrambled location needs to be sent to. 166 | newOrder = sortrows(reconstruct, 2); 167 | 168 | % Extract just column 1, which is the order we need. 169 | newOrder = newOrder(:,1); 170 | % Unscramble according to the reconstruct order. 171 | im = im(newOrder); 172 | % Reshape into a 2D image 173 | unscrambledImage = reshape(im, [rows, columns]); 174 | 175 | % Display the original gray scale image. 176 | subplot(1, 7, 5); 177 | imshow(log(abs(unscrambledImage)), []); 178 | title('Unscrambled Image'); 179 | 180 | 181 | I5=unscrambledImage(1:size(unscrambledImage,1)/2,1:size(unscrambledImage,2)/2,:); 182 | I6=unscrambledImage(size(unscrambledImage,1)/2+1:size(unscrambledImage,1),1:size(unscrambledImage,2)/2,:); 183 | I7=unscrambledImage(1:size(unscrambledImage,1)/2,size(unscrambledImage,2)/2+1:size(unscrambledImage,2),:); 184 | I8=unscrambledImage(size(unscrambledImage,1)/2+1:size(unscrambledImage,1),size(unscrambledImage,2)/2+1:size(unscrambledImage,2),:); 185 | 186 | 187 | %first block 188 | %idct1 = transpose(c1) * I1 * c1; 189 | K1 = idct2(d1); 190 | K2 = idct2(d2); 191 | K3 = idct2(d3); 192 | K4 = idct2(d4); 193 | 194 | 195 | L22 = ([K1 K3; K2 K4]); 196 | 197 | 198 | % Display the original image. 199 | subplot(1, 7, 6); 200 | imshow(L22, []); 201 | title('Uncompressed Image'); 202 | 203 | %detection of hidden image 204 | 205 | h=mod(l,2); 206 | p=zeros(1000,1000); 207 | 208 | for x=1:1000 209 | for y=1:1000 210 | if(h(x,y)==1) 211 | p(x,y)=255; 212 | end 213 | end 214 | end 215 | 216 | s=im2bw(p); 217 | figure 218 | imshow(s); % hidden image 219 | title('Recovered hidden image') 220 | 221 | whos 222 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ImageCompressionAndEncryption 2 | This project is done as part of the course "Image Processing". In this project we implemented an Image Compression and Encryption algorithm from the reserach paper "Novel Image Compression-encryption hybrid algorithm based on a key-controlled measurement matrix in compressive sensing" by Nanrun Zhou, Aidi Zhang, Fen Zheng, Lihua Gong. 3 | -------------------------------------------------------------------------------- /Results With LenaColor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/Results With LenaColor.jpg -------------------------------------------------------------------------------- /Results With coke.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/Results With coke.jpg -------------------------------------------------------------------------------- /ResutWithStegnography.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/ResutWithStegnography.PNG -------------------------------------------------------------------------------- /SL0.m: -------------------------------------------------------------------------------- 1 | function s=SL0(A, x, sigma_min, sigma_decrease_factor, mu_0, L, A_pinv, true_s) 2 | % 3 | % SL0(A, x, sigma_min, sigma_decrease_factor, mu_0, L, A_pinv, true_s) 4 | % 5 | % Returns the sparsest vector s which satisfies underdetermined system of 6 | % linear equations A*s=x, using Smoothed L0 (SL0) algorithm. Note that 7 | % the matrix A should be a 'wide' matrix (more columns than rows). The 8 | % number of the rows of matrix A should be equal to the length of the 9 | % column vector x. 10 | % 11 | % The first 3 arguments should necessarily be provided by the user. The 12 | % other parameters have defult values calculated within the function, or 13 | % may be provided by the user. 14 | % 15 | % Sequence of Sigma (sigma_min and sigma_decrease_factor): 16 | % This is a decreasing geometric sequence of positive numbers: 17 | % - The first element of the sequence of sigma is calculated 18 | % automatically. The last element is given by 'sigma_min', and the 19 | % change factor for decreasing sigma is given by 'sigma_decrease_factor'. 20 | % - The default value of 'sigma_decrease_factor' is 0.5. Larger value 21 | % gives better results for less sparse sources, but it uses more steps 22 | % on sigma to reach sigma_min, and hence it requires higher 23 | % computational cost. 24 | % - There is no default value for 'sigma_min', and it should be 25 | % provided by the user (depending on his/her estimated source noise 26 | % level, or his/her desired accuracy). By `noise' we mean here the 27 | % noise in the sources, that is, the energy of the inactive elements of 28 | % 's'. For example, by the noiseless case, we mean the inactive 29 | % elements of 's' are exactly equal to zero. As a rule of tumb, for the 30 | % noisy case, sigma_min should be about 2 to 4 times of the standard 31 | % deviation of this noise. For the noiseless case, smaller 'sigma_min' 32 | % results in better estimation of the sparsest solution, and hence its 33 | % value is determined by the desired accuracy. 34 | % 35 | % mu_0: 36 | % The value of mu_0 scales the sequence of mu. For each vlue of 37 | % sigma, the value of mu is chosen via mu=mu_0*sigma^2. Note that this 38 | % value effects Convergence. 39 | % The default value is mu_0=2 (see the paper). 40 | % 41 | % L: 42 | % number of iterations of the internal (steepest ascent) loop. The 43 | % default value is L=3. 44 | % 45 | % A_pinv: 46 | % is the pseudo-inverse of matrix A defined by A_pinv=A'*inv(A*A'). 47 | % If it is not provided, it will be calculated within the function. If 48 | % you use this function for solving x(t)=A s(t) for different values of 49 | % 't', it would be a good idea to calculate A_pinv outside the function 50 | % to prevent its re-calculation for each 't'. 51 | % 52 | % true_s: 53 | % is the true value of the sparse solution. This argument is for 54 | % simulation purposes. If it is provided by the user, then the function 55 | % will calculate the SNR of the estimation for each value of sigma and 56 | % it provides a progress report. 57 | % 58 | % Authors: Massoud Babaie-Zadeh and Hossein Mohimani 59 | % Version: 1.3 60 | % Last modified: 4 August 2008. 61 | % 62 | % 63 | % Web-page: 64 | % ------------------ 65 | % http://ee.sharif.ir/~SLzero 66 | % 67 | % Code History: 68 | %-------------- 69 | % Version 1.2: Adding some more comments in the help section 70 | % 71 | % Version 1.1: 4 August 2008 72 | % - Using MATLAB's pseudo inverse function to generalize for the case 73 | % the matrix A is not full-rank. 74 | % 75 | % Version 1.0 (first official version): 4 July 2008. 76 | % 77 | % First non-official version and algorithm development: Summer 2006 78 | 79 | if nargin < 4 80 | sigma_decrease_factor = 0.5; 81 | A_pinv = pinv(A); 82 | mu_0 = 2; 83 | L = 3; 84 | ShowProgress = logical(0); 85 | elseif nargin == 4 86 | A_pinv = pinv(A); 87 | mu_0 = 2; 88 | L = 3; 89 | ShowProgress = logical(0); 90 | elseif nargin == 5 91 | A_pinv = pinv(A); 92 | L = 3; 93 | ShowProgress = logical(0); 94 | elseif nargin == 6 95 | A_pinv = pinv(A); 96 | ShowProgress = logical(0); 97 | elseif nargin == 7 98 | ShowProgress = logical(0); 99 | elseif nargin == 8 100 | ShowProgress = logical(1); 101 | else 102 | error('Error in calling SL0 function'); 103 | end 104 | 105 | 106 | % Initialization 107 | %s = A\x; 108 | s = A_pinv*x; 109 | sigma = 2*max(abs(s)); 110 | 111 | % Main Loop 112 | while sigma>sigma_min 113 | for i=1:L 114 | delta = OurDelta(s,sigma); 115 | s = s - mu_0*delta; 116 | s = s - A_pinv*(A*s-x); % Projection 117 | end 118 | 119 | if ShowProgress 120 | fprintf(' sigma=%f, SNR=%f\n',sigma,estimate_SNR(s,true_s)) 121 | end 122 | 123 | sigma = sigma * sigma_decrease_factor; 124 | end 125 | 126 | 127 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 128 | function delta=OurDelta(s,sigma) 129 | 130 | delta = s.*exp(-s.^2/sigma^2); 131 | 132 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 133 | function SNR=estimate_SNR(estim_s,true_s) 134 | 135 | err = true_s - estim_s; 136 | SNR = 10*log10(sum(true_s.^2)/sum(err.^2)); 137 | -------------------------------------------------------------------------------- /Stegnography.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/Stegnography.PNG -------------------------------------------------------------------------------- /coke.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/coke.jpg -------------------------------------------------------------------------------- /lena.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/lena.png -------------------------------------------------------------------------------- /lena_color.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/lena_color.tiff -------------------------------------------------------------------------------- /pepsi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mehakgill1994/ImageCompressionAndEncryption/bba68a2c797d06fe43a8b3008847b889f94514e8/pepsi.jpg --------------------------------------------------------------------------------