# 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

### Sobel edge detection

The gradient of the image is calculated for each pixel position in the image.

The procedure and the MATLAB  code for sobel edge detection without using MATLAB built-in function:

MATLAB CODE:

B=rgb2gray(A);

C=double(B);

for i=1:size(C,1)-2
for j=1:size(C,2)-2
Gx=((2*C(i+2,j+1)+C(i+2,j)+C(i+2,j+2))-(2*C(i,j+1)+C(i,j)+C(i,j+2)));
Gy=((2*C(i+1,j+2)+C(i,j+2)+C(i+2,j+2))-(2*C(i+1,j)+C(i,j)+C(i+2,j)));

%B(i,j)=abs(Gx)+abs(Gy);
B(i,j)=sqrt(Gx.^2+Gy.^2);

end
end

%Define a threshold value
Thresh=100;
B=max(B,Thresh);
B(B==round(Thresh))=0;

B=uint8(B);
figure,imshow(~B);title('Edge detected Image');

 Edge detected Image

 Edge detected Image(Threshold value:35)
The edge detected image can be obtained from the sobel gradient by
using a threshold value.

• If the sobel gradient values are lesser than the threshold value then replace it with the threshold value.
if f < threshold value then
f = threshold value.

To avoid complex computation, the gradient can also be computed using the formula:

The Image obtained from computing X-direction derivative:

The Image obtained from computing Y-direction derivative:

 Also Check  Sobel Edge Detection - Part 2

Like "IMAGE PROCESSING" page

### Darker Edges

 Captured Image

Last week my friend was in need of her signature in digital format. Fortunately, it was not for any official purpose. So we captured the signature using the camera and used it.

The image that we acquired using the camera was not that much good. So we processed the image and then included in the document.

After this thing happened, I thought of trying the image with MATLAB.
The syntax for the imadjust for rgb image is
imadjust(RGB,[Low_R Low_G Low_B; High_R High G High B],[]);
The Low values should always be lower than High values.
The range of these values between 0 to 1.

Then I detected the edge of the image. Then to enlarge the image parts I dilated it. Use an appropriate structure element. Here I used 'disk'.
After that, using labeling method, I labeled all the connected components. Based on the size of the components the components where finally used and components whose size are less are ignored.
 Edge detected Image

MATLAB CODE:
``````

function my_edge

global filename A I ;

scz=get(0,'ScreenSize');

figure('Position',[round(scz(1,3)/4) round(scz(1,4)/8) 700 500],'MenuBar','None','NumberTitle','off','Name','Pencil sketch Application','Resize','off');

axes('Position',[0 0 .7 1],'xtick',[],'ytick',[]);

Low=uicontrol('Style','slider','Position',[500,280 200 20],'Max',0.99 ,'Min',0,'Value',0.0,'SliderStep',[0.05,0.1],'Callback',@draw);

High=uicontrol('Style','slider','Position',[500,370 200 20],'Max',1,'Min',0.1,'Value',.5,'SliderStep',[0.05,0.1],'Callback',@draw);

uicontrol('Style','pushbutton','String','Done','Position',[500 200 40 20],'Callback',@pushme);

directory=dir('*.jpg');

files={directory.name}';

uicontrol('style','text','Position',[500,310 100 20]','String','Low:');

uicontrol('style','text','Position',[500,395 100 20]','String','High :');

uicontrol('style','text','Position',[500,455 100 20]','String','Filename:');

function displayfile(obj,eve)

ptr=get(obj,'value');

filename=char(files(ptr));

A=imresize(A,0.4);

subplot('Position',[0.05 0.1 .6 .9]);imshow(A);

end

function draw(obj,eve)

H=get(High,'Value');

L=get(Low,'Value');

uicontrol('Style','edit','position',[500 250 50 20],'String',L);

uicontrol('Style','edit','position',[500 340 50 20],'String',H);

if( L < H )

%The intensity values for each R,G,B planes are adjusted.

I=imadjust(A,[L L L; H H H],[]);

end

subplot('Position',[0.05 0.1 .6 .9]);imshow(I);

end

function pushme(obj,eve)

myedges(I);

end

function myedges(A)

A1=rgb2gray(A);

B=(edge(A(:,:,1))|edge(A(:,:,2))|edge(A(:,:,3)));
```

```

 Edge detected

``````
```

SE=strel('disk',3);

C=~(imdilate(B,SE));

target=(ones([size(A1,1) size(A1,2)] ));

[BW,label]=bwlabel(~C,8);

for l=1:max(max(label))

[row, col] = find(BW==l);

if(size(row,1)>30)

for i=1:size(row,1)

x=row(i,1);

y=col(i,1);

target(x,y)=C(x,y);

end

end

end
```

```
subplot('Position',[0 0.5 .8 .45]);imshow(A);title('Original Image');

subplot('Position',[0 0   .8 .45]);imshow(target);title('Final Image');

end

end

```

Another example:

Like "IMAGE PROCESSING" page

Here I tried to shade the RGB image which results in a pencil sketched type image. The user selects the image from the pop-up menu and by adjusting the line value in the slider, the edge thickness is made.
By adjusting the thresh value in the slider the image shade is increased or decreased.
To make your own pencil sketch without using MATLAB try Autodesk Sketchbook.
Based on the customers review, this software is best to try on low pixel camera images.
Steps To Be Performed:

1.     Input a RGB image
2.     Convert the image to grayscale image.
3.     Find the edges using Sobel Method.[gradient Estimation]
4.     Filter the Image to obtain the image without noise
4.1.          The blurred or unsharp image is subtracted from the image to obtain the sharpened image.
5. Blend the edge and the sharpened image.

MATLAB Code:

The GUI is designed.

global filename A;
scz=get(0,'ScreenSize');
figure('Position',[round(scz(1,3)/4) round(scz(1,4)/8) 700 500],'MenuBar','None','NumberTitle','off','Name','Pencil sketch Application','Resize','off');
axes('Position',[0 0 .7 1],'xtick',[],'ytick',[]);
thresh=uicontrol('Style','slider','Position',[500,370 200 20],'Max',255,'Min',0,'Value',30,'Callback',@draw);
directory=dir('*.jpg');
files={directory.name}';
tval=uicontrol('style','text','Position',[500,340 100 20]','String','Thresh :');
line=uicontrol('style','text','Position',[500,395 100 20]','String','Line :');
uicontrol('style','text','Position',[500,455 100 20]','String','Filename:');

function displayfile(obj,~)
ptr=get(obj,'value');
filename=char(files(ptr));
imshow(A);
end
function draw(~,~)

thr=get(thresh,'Value');
thval=strcat('Thresh :', num2str(sh));
set(tval,'String',thval);

lineval=strcat('Line :', num2str(thr));
set(line,'String',lineval);
if(~isempty(A))
B=rgb2gray(A);

The Edge of the image is detected using the sobel edge detection method.

C3=~edge(B,'sobel','VERTICAL');
C2=~edge(B,'sobel','HORIZONTAL');
C=uint8(C3.*C2);

The image is sharpened by subtracting the blur image.

F1=uint8(imfilter(B,fspecial('unsharp')/sh));

The blending of the edge and the filtered image is done.

for m=1:size(F1,1)
for n=1:size(F1,2)
if(C(m,n)==0)
F1(m,n)=B(m,n)-thr;
end
end
end

imshow(F1);
end
end
end