# IMAGE PROCESSING

" Two roads diverged in a wood, and I,
I took the one less traveled by,
And that has made all the difference "-Robert Frost

### Add salt and pepper noise to image

How to add salt and pepper noise to an image

To obtain an image with ‘speckle’ or ‘salt and pepper’ noise we need to add white and black pixels randomly in the image matrix.

First convert the RGB image into grayscale image.
Then generate random values for the size of the matrix.
Here I used MATLAB function ‘randint’.

This function will generate random values for the given matrix size within the specified range.
For instance, consider an image matrix of size 4X3

Imgmatrix =
237   107   166
234    95   162
239   116   169
56   126    89

Generate random values for a 4X3 matrix with range 0 to 10.
randint(4,3,[0,10])

ans =
4    10     4
7     8     4
10     0     5
3    10     9

Now we can replace with pixel value zero (black) in the image matrix if there is ‘0’ value in the random matrix.

Now the image matrix will have black pixels.

Imgmatrix =
237   107   166
234    95   162
239   0   169
56   126    89

Similarly, replace the image matrix pixel value with ‘255’ if there is value ‘10’ in the random matrix.
The white pixels are now added.

Imgmatrix =
237   255   166
234    95   162
255   0   169
56   126    89

 Black=0 white=255

MATLAB CODE:

B=rgb2gray(A);

black=3;
white=253;
%Adjust the values in 'black' and 'white' to increase the noise.

NoiseImg = B;
Rmatrix = randint(size(B,1),size(B,2),[0,255]);
NoiseImg(Rmatrix <= black) = 0;
NoiseImg(Rmatrix >=white) = 255;
RImg=medfilt2(NoiseImg);
subplot(1,2,2),imshow(RImg),title('After Noise Removal');

I used the MATLAB function 'medfilt2' to remove noise.

Like "IMAGE PROCESSING" page

### I can't sleep Illusion

In this illusion, I used slanted lines in two different directions  to highlight the foreground from the background.

First, the background is formed with slanting lines in one direction.

Steps to form background with slanting lines:
1.       Get the size of the foreground image. For instance, MXN =5X8
2.       Initialize a matrix of size 1XN=1X8.
3.       Generate values for the matrix.
Eg. [10  10 250 250 10 10 250 250]ie [BBWWBBWW] B-Black, W-White
4.       Initialize another matrix of size MXN. In the first row copy the random values.
5.       For the second row perform circshift. By circshift the pixel at the first column will be moved to the last column and the remaining pixels are shifted to left by one.Eg [10 250 250 10 10 250 250 10].
Now the colors will be [BWWBBWWB].
6.       Continue to perform circshift  for all the rows.  Now the slanting lines are formed.
10    10   250   250    10    10   250   250
10   250   250    10    10   250   250    10
250   250    10    10   250   250    10    10
250    10    10   250   250    10    10   250
10    10   250   250    10    10   250   250

MATLAB CODE:

m=size(TImg,1);
n=size(TImg,2);

if(mod(n,2)~=0)
n=n-mod(n,2);
end
if(mod(n,4)~=0)
n=n-mod(n,4);
end
BImg=uint8(zeros([1 n 3]));
flag=0;
%Values for first column (bbwwbbwwbbww)
for i=1:2:n
if(flag==1)
BImg(1,i:i+1,:)=10;
flag=0;
else
BImg(1,i:i+1,:)=240;
flag=1;
end
end
%Initialization
A=uint8(zeros([m size(BImg,2) 3]));
Arot=uint8(zeros([m size(BImg,2) 3]));
SImg=uint8(zeros([m size(BImg,2) 3]));
FImg=uint8(zeros([m size(BImg,2) 3]));
A(1,:,:)=BImg(1,:,:);

%Slanting lines
for i=2:m
BImg=circshift(BImg,[1,-1]);
A(i,:,:)=BImg(1,:,:);
end

Steps to perform on foreground Image:
1.       Rotate the background image from left to right.
2.       Convert the foreground image into binary image and negate it. Then perform image multiplication with the rotated background image.

MATLAB CODE:
%Flip the image from left to right
Arot(:,:,1)=fliplr(A(:,:,1));
Arot(:,:,2)=fliplr(A(:,:,2));
Arot(:,:,3)=fliplr(A(:,:,3));
%Foreground
BImg=uint8(~im2bw(TImg));
BImg=imresize(BImg,[size(Arot,1) size(Arot,2)]);
SImg(:,:,1)=BImg.*Arot(:,:,1);
SImg(:,:,2)=BImg.*Arot(:,:,2);
SImg(:,:,3)=BImg.*Arot(:,:,3);
SImg(SImg==0)=1;

1.       Multiply the background image with the binary foreground image to obtain the mask.
MATLAB CODE:
BImg1=uint8(im2bw(TImg));
BImg1=imresize(BImg1,[size(Arot,1) size(Arot,2)]);
FImg(:,:,1)=BImg1.*A(:,:,1);
FImg(:,:,2)=BImg1.*A(:,:,2);
FImg(:,:,3)=BImg1.*A(:,:,3);
FImg(FImg==0)=1;

Combine Foreground Image and the background Image mask.

MATLAB CODE:
Zig=FImg.*SImg;
figure,imshow(Zig);

GUESS THE IMAGE:

Check this link for more optical Illusion Images: Images from Blog

Like "IMAGE PROCESSING" page

### Black and White-Optical illusion

Today, Some of my friends in Facebook posted black and white optical illusion photo saying 'ITS FREAKING AWESOME'.
After seeing the image, I found it's actually black and white illusion. Yes, convert the image to binary and do logical not of the image. When you look or concentrate at one point on the image ,maybe in center you can see a logical not of the image (i.e) White pixels will be black and black pixels will be white.

The most interesting thing is, you can try with your own photo.

MATLAB CODE:

B=uint8(zeros(size(A)));
A=~im2bw(A);
 Logical Not on Binary Image

for i=1:size(A,1)
for j=1:size(A,2)
if(A(i,j)==1)
B(i,j,:)=255;
end
end
end

Stare at the dots on image for 20 to 30 secs. Close your eyes or look up towards the ceiling.
You can see a binary image. i.e im2bw(A);

To draw the dots on the image:

C=uint8(ones(4 ,4, 3));
C(:,:,1)=C(:,:,1)*200;
C(:,:,2)=C(:,:,2)*0;
C(:,:,3)=C(:,:,3)*250;
%Find the mid point of the image and draw 3 dots.

midx=round(size(B,1)/2);
midy=round(size(B,2)/2)+30;
for i=1:size(C,1)
for j=1:size(C,2)
B(midx+i+5,midy+j,:)=C(i,j,:);
B(midx+i-5,midy+j,:)=C(i,j,:);
B(midx+i+15,midy+j,:)=C(i,j,:);
end
end

Check this Illusion also:I cant sleep Illusion
Check this link for more optical Illusion Images: Images from Blog

Like "IMAGE PROCESSING" page