Tuesday, August 3, 2010

Creating Object boundaries in IDL

pro OBJECTBOUNDARY_SMOOTHING

;Initializing the display
DEVICE, DECOMPOSED = 0, RETAIN = 2
LOADCT, 0

;Reading a jpeg file
file = FILEPATH('meteor_crater.jpg', SUBDIRECTORY = ['examples','data'])
READ_JPEG,file, f,/GRAYSCALE
sz = SIZE(f, /DIMENSIONS)
print, sz

;creating a window
WINDOW, 0, XSIZE = (2*SZ[0]),YSIZE=(SZ[1])

TV,f,0

;writing a text object on image
XYOUTS, 50, 220, 'Original Image', ALIGNMENT = 0.5, /DEVICE, COLOR = 255

;Image smoothing
f1 = smooth(f,7,/edge_truncate)
tvscl, f1,1
XYOUTS, (50+SZ[0]), 220, 'SMOOTH IMAGE', ALIGNMENT = 0.5, /DEVICE, COLOR = 255

end

HIGH_PASS filter in IDL

PRO HIGH_PASS_FILTER


READ_GIF,'d:\Image\bird.gif',im
sz=SIZE(im,/DIMENSIONS)
im1=float(im)/255;
nim=im1
KER = REPLICATE(-1.0,3,3)
KER[1,1]=8.0
kER=FLOAT(KER)
PRINT,KER

nim=CONVOL(im1,ker)
nim=byte(nim*255)
WINDOW,0,XSIZE=sz[0],YSIZE=sz[1],TITLE='INPUT IMAGE'
TV,im
WINDOW,1,XSIZE=sz[0],YSIZE=sz[1],TITLE='MEAN filtered'
TV,nim
PRINT,NIM[0:9,0:9]
END

MEDIAN filter in IDL

PRO MEDIAN_FILTER
READ_GIF,'d:\Image\bird.gif',im
im1=im
sz=SIZE(im,/DIMENSIONS)
s=[0,0,0,0,0,0,0,0,0]
FOR i=1,sz[0]-2 DO BEGIN
FOR j=1,sz[1]-2 DO BEGIN
CO=0;
FOR k = i-1,i+1 DO BEGIN
FOR l = j-1,j+1 DO BEGIN
s[CO]=im[k,l]
CO=CO+1
ENDFOR
ENDFOR
im1[i,j]=MEDIAN(s)
ENDFOR
ENDFOR
WINDOW,0,XSIZE=sz[0],YSIZE=sz[0],TITLE='ORIGINAL IMAGE'
TV,im
WINDOW,1,XSIZE=sz[0],YSIZE=sz[0],TITLE='MEDIAN IMAGE'
TV,im1
END

REGION GROWING in IDL

pro REGION_GROWING

; initialize the device
DEVICE, DECOMPOSED = 0, RETAIN = 2
LOADCT, 0
;read the image

file = FILEPATH('md1107g8a.jpg',SUBDIRECTORY = ['examples','data'])
READ_JPEG, file, f,/GRAYSCALE
sz = SIZE(f,/DIMENSIONS)

;RESIZE THE IMAGE
f = REBIN(BYTSCL(f),sz[0]*2,sz[1]*2)
sz=2*sz

WINDOW,0,XSIZE = SZ[0], YSIZE=SZ[1],TITLE = 'SELECT A POINT ON THE IMAGE'
TVSCL, F

;SELECT A POINT  FROM THE IMAGE
CURSOR, xi,yi, /DEVICE
x = LINDGEN(10*10) MOD 10 + xi
y = LINDGEN(10*10) / 10 + yi
roiPixels = x + y * sz[0]

WDELETE, 0
TOPCLR = !D.TABLE_SIZE - 1
TVLCT, 255,0,0, TOPCLR
regionPts = BYTSCL(F, TOP = (topClr - 1))
regionPts[roiPixels] = topClr

WINDOW, 0, XSIZE = sz[0], YSIZE = sz[1], TITLE = 'ORIGINAL REGION'
TV, regionPts

;REGION GROWING FUNCTION

ROIPIXELS = REGION_GROW(F,roiPixels, THRESHOLD = [185,235])

F1 = BYTSCL(F, TOP = (TOPCLR-1))
F1[ROIPIXELS] = TOPCLR

WINDOW,2, XSIZE=SZ[0],YSIZE=SZ[1],TITLE = 'THRESHOLD GROWN REGION'
TV, F1

end

Monday, August 2, 2010

Auto Draft

Morphology Edge Detection

clear all; close all; clc;
a = imread('circles.png');
a = imresize(a,[256,256]);
%a = imcrop(a);
[m n]=size(a);
b = zeros([m n]);
figure,imshow(a);
w = [1 1 1 1 1]; % structuring element
for i=1:m-1
for j=3:n-2
con=0;
for p=j-2:j+2
con=con+1;
s(con)= a(i,p)*w(con);
end
s1 = 1;
for r=1:con
s1 = s1*s(r);
end
if s1 > 0
b(i,j)=1;
end
end
end
figure,imshow(b);
f1 = a-b;
figure,imshow(f1);

Chain Coding

clear all; close all; clc;
a = imread('circles.png');
a = imresize(a,[256,256]);
[m n]=size(a);
b = zeros([m n]);
figure,imshow(a);
w = [0 1 0 1 1 1 0 1 0]; % structuring element
for i=2:m-1
for j=2:n-1
con=0;
for k=i-1:i+1
for p=j-1:j+1
con=con+1;
s(con)= a(k,p)*w(con);
end
end
if sum(s) > 0
b(i,j)=1;
end
end
end
f2 = xor(a,b);
figure,imshow(f2),title('Object Edge');
Ipo = a(19,35);
co=0; Cont = 0;Cva = 0;
i=19; j=35;
while (co==0)
if a(i,j)==Ipo
if a(i,j+1) == a(i,j)
Cont=Cont+1;
CVa(Cont)=0;
i=i;j=j+1;
if (i==19) && (j == 35)
co=1;
end
elseif a(i-1,j+1) ==  a(i,j)
Cont=Cont+1;
CVa(Cont)=1;
i=i-1;j=j+1;
if (i==19) && (j == 35)
co=1;
end
elseif a(i-1,j) ==  a(i,j)
Cont=Cont+1;
CVa(Cont)=2;
i=i-1; j=j;
if (i==19) && (j == 35)
co=1;
end
elseif a(i-1,j-1) ==  a(i,j)
Cont=Cont+1;
CVa(Cont)=3;
i=i-1; j=j-1;
if (i==19) && (j == 35)
co=1;
end
elseif a(i-1,j) ==  a(i,j)
Cont=Cont+1;
CVa(Cont)=4;
i=i-1; j=j;
if (i==19) && (j == 35)
co=1;
end
elseif a(i+1,j-1) ==  a(i,j)
Cont=Cont+1;
CVa(Cont)=5;
i=i+1; j=j-1;
if (i==19) && (j == 35)
co=1;
end
elseif a(i+1,j) ==  a(i,j)
Cont=Cont+1;
CVa(Cont)=6;
i=i+1; j=j-1;
if (i==19) && (j == 35)
co=1;
end
elseif a(i+1,j+1) ==  a(i,j)
Cont=Cont+1;
CVa(Cont)=7;
i=i+1; j=j+1;
if (i==19) && (j == 35)
co=1;
end
else
co=1;
end
else
co=1;
end
end