# 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

### Converting RGB image to Binary Image without using im2bw function

In the first example, image is filled with primary colors (RGB). So I am finding the sum of the values in the pixel position. If the sum is greater than zero then the value will be 1(white) otherwise zero (black).

In the second example, the following steps are needed to convert a RGB image to binary image.

1. Convert the RGB image into grayscale image.
2. Find the threshold value. If the value at the pixel position is greater than the threshold value then the value will be 1(white) else zero (black).

```
function mybinary

global GIm T1;

figure,imshow(A);

title('Original image');

B=zeros(size(A,1),size(A,2));

for l=1:size(A,1)

for m=1:size(A,2)

if(sum(A(l,m,:))>0)

B(l,m)=1;

end

end

end

B=logical(B);

figure,imshow(B);

```

```

figure,imshow(Im);

title('Original Image');

%0.2989 * R + 0.5870 * G + 0.1140 * B

GIm=uint8(zeros(size(Im,1),size(Im,2)));

for m=1:size(Im,1)

for n=1:size(Im,2)

GIm(m,n)=0.2989*Im(m,n,1)+0.5870*Im(m,n,2)+0.1140*Im(m,n,3);

end

end

```
we can perform the grayscale conversion without using the for loop:

%GIm=0.2989*Im(:,:,1)+0.5870*Im(:,:,2)+0.1140*Im(:,:,3);

```

ssz = get(0,'ScreenSize');

T.fg=figure('Visible','on','Name','IMAGE THRESHOLDING','NumberTitle','off','Position', ssz);

T.holder=axes('units','pixels','Position',[ssz(3)/35 ssz(4)/4 ssz(3)-(ssz(3)/3) ssz(4)-(ssz(4)/3)]);

imshow(GIm);

set(T.holder,'xtick',[],'ytick',[])

T.slid=uicontrol('Style','Slider','Visible','on','Value',1,'Max',255,'Min',0,'Sliderstep',[1 1],'Position',[ssz(3)/35 ssz(4)/5 ssz(3)-(ssz(3)/3) 20],'Callback', @tresher);

T.ent=uicontrol('Style','pushbutton','Visible','on','String','THRESHOLD VALUE','Position',[ssz(3)-(ssz(3)/4) ssz(4)-(ssz(4)/8) 105 30]);

T.ed=uicontrol('Style','edit','Visible','on','String','0','Value',1,'Position',[ssz(3)-(ssz(3)/4) ssz(4)-(ssz(4)/6) 90 20]);

function tresher(object,~)

val=get(object,'value');

in=GIm;

T1=Imthreshold1(in,val);

T.view1=imshow(T1);

set(T.holder,'xtick',[],'ytick',[])

set(T.ed,'String',val);

end

function Im=Imthreshold1(Image,Tvalue)

sz=size(Image);

mybin=zeros(size(Image));

for i=1:sz(1)

for j=1:sz(2)

if(Image(i,j)>Tvalue)

mybin(i,j)=1;

end

end

end

```

Instead of this for loop, the equivalent one line code is:

%mybin(find(Image>Tvalue))=1;

Explanation:
The output of find(Image>Tvalue) will be the values that are greater than Tvalue.

For instance,
consider a matrix,

>> A=[1,2,3,4;2,4,6,8;3,6,9,12];
>> A

A =

1     2     3     4
2     4     6     8
3     6     9    12

>> find(mod(A,2)==0)

ans =

2
4
5
6
8
10
11
12

``````
```
Im=logical(mybin);

end

end
```

Like "IMAGE PROCESSING" page

### YIQ Image to RGB Image

MATLAB code:
%YIQ to RGB

%R=Y+0.956*I+0.621*Q
%G=Y-0.272*I-0.647*Q
%B=Y-1.106*I+1.703*Q
RGB=uint8(zeros(size(YIQ)));
for i=1:size(YIQ,1)
for j=1:size(YIQ,2)
RGB(i,j,1)=YIQ(i,j,1)+0.956*YIQ(i,j,2)+0.621*YIQ(i,j,3);
RGB(i,j,2)=YIQ(i,j,1)-0.272*YIQ(i,j,2)-0.647*YIQ(i,j,3);
RGB(i,j,3)=YIQ(i,j,1)-1.106*YIQ(i,j,2)+1.703*YIQ(i,j,3);
end
end

figure,imshow(RGB);
title('RGB Image');

Like "IMAGE PROCESSING" page

### RGB Image to YIQ Image

YIQ  builds the basis for the NTSC (National Television System Commitee) format.
The Component division of YIQ :
Y=0.30R+0.59G+0.11B
I=0.60R-0.28G-0.32B
Q=0.21R-0.52G+0.31B

MATLAB code:

figure,imshow(Im);
title('Original Image')

%y=0.2989 * R + 0.5870 * G + 0.1140 * B

%I=0.60*R - 0.28*G-0.32*B
%Q=0.21*R -0.52*G+0.31*B
YIQ=uint8(zeros(size(Im)));
for i=1:size(Im,1)
for j=1:size(Im,2)
YIQ(i,j,1)=0.2989*Im(i,j,1)+0.5870*Im(i,j,2)+0.1140*Im(i,j,3);
YIQ(i,j,2)=0.596*Im(i,j,1)-0.274*Im(i,j,2)-0.322*Im(i,j,3);
YIQ(i,j,3)=0.211*Im(i,j,1)-0.523*Im(i,j,2)+0.312*Im(i,j,3);
end
end
figure,imshow(YIQ);
title('YIQ Image');

Like "IMAGE PROCESSING" page

### RGB Image to Grayscale Image without using rgb2gray function

A gray-scale image is composed of different shades of grey color.
A true color image can be converted to a gray scale image by preserving the luminance(brightness) of the image.

Here the RGB image is a combination of RED, BLUE AND GREEN colors.
The RGB image is 3 dimensional. In an image ,
at a particular position say  ( i,j)
Image(i,j,1) gives the value of RED pixel.
Image(i,j,2) gives the value of BLUE pixel.
Image(i,j,3) gives the value of GREEN pixel.
The combination of these primary colors are normalized with R+G+B=1;
This gives the neutral white color.

The grayscale image is obtained from the RGB image by combining 30% of RED , 60% of GREEN and 11% of BLUE.
This gives the brightness information of the image. The resulting image will be two dimensional. The value 0 represents black and the value 255 represents white. The range will be between black and white values.

MATLAB CODE:

figure,imshow(Im);
title('Original Image');

%0.2989 * R + 0.5870 * G + 0.1140 * B
GIm=uint8(zeros(size(Im,1),size(Im,2)));
for i=1:size(Im,1)
for j=1:size(Im,2)
GIm(i,j)=0.2989*Im(i,j,1)+0.5870*Im(i,j,2)+0.1140*Im(i,j,3);
end
end

%Without using for loop:
%GIm=0.2989*Im(:,:,1)+0.5870*Im(:,:,2)+0.1140*Im(:,:,3);

figure,imshow(GIm);
title('Grayscale Image');

Check out : Partially colored gray scale image - MATLAB CODE
Like "IMAGE PROCESSING" page