Tuesday, October 6, 2009

2D DCT Transform in IDL

;####################################################

; 2D DCT Transform

;                  Author : S.Ganesh Babu

;####################################################

PRO EX15

file = DIALOG_PICKFILE(PATH='E:\Image')

im = READ_IMAGE(file)

sz=SIZE(im,/DIMENSIONS)

nv=SIZE(sz,/DIMENSIONS)

nim=im

IF nv EQ 2 THEN BEGIN

FOR i = 0,sz[0]-2 DO BEGIN

FOR j = 0,sz[1]-2 DO BEGIN

IF i EQ 0 THEN begin

nim[j+1,i+1]=1/sqrt(sz[0])

endif else begin

nim[j+1,i+1]=sqrt(2./sz[0])*cos(((2.*i+1)*j*3.14)/(2.*sz[0]))

endelse

ENDFOR

ENDFOR

print,nim(1:10,1:10)

WINDOW,0,XSIZE=sz[0],YSIZE=sz[1],TITLE='INPUT IMAGE'

TV,im

WINDOW,1,XSIZE=sz[0],YSIZE=sz[1],TITLE='Laplacian filtered'

TVSCL,nim

ENDIF ELSE BEGIN

RC = REFORM(im[0,*,*])

GC = REFORM(im[1,*,*])

BC = REFORM(im[2,*,*])

rim=CONVOL(RC,ker)

gim=CONVOL(GC,ker)

bim=CONVOL(BC,ker)

nim[0,*,*]=rim

nim[1,*,*]=gim

nim[2,*,*]=bim

nim=im-nim

WINDOW,0,XSIZE=sz[1],YSIZE=sz[2],TITLE='INPUT IMAGE'

TVSCL,im,TRUE=1

WINDOW,1,XSIZE=sz[1],YSIZE=sz[2],TITLE='Laplacian filtered'

TV,nim,TRUE=1

ENDELSE

END

;####################################################

; 2D DCT Transform

;                  Author : S.Ganesh Babu

;####################################################

PRO EX15

file = DIALOG_PICKFILE(PATH='E:\Image')

im = READ_IMAGE(file)

sz=SIZE(im,/DIMENSIONS)

nv=SIZE(sz,/DIMENSIONS)

nim=im

IF nv EQ 2 THEN BEGIN

FOR i = 0,sz[0]-2 DO BEGIN

FOR j = 0,sz[1]-2 DO BEGIN

IF i EQ 0 THEN begin

nim[j+1,i+1]=1/sqrt(sz[0])

endif else begin

nim[j+1,i+1]=sqrt(2./sz[0])*cos(((2.*i+1)*j*3.14)/(2.*sz[0]))

endelse

ENDFOR

ENDFOR

print,nim(1:10,1:10)

WINDOW,0,XSIZE=sz[0],YSIZE=sz[1],TITLE='INPUT IMAGE'

TV,im

WINDOW,1,XSIZE=sz[0],YSIZE=sz[1],TITLE='Laplacian filtered'

TVSCL,nim

ENDIF ELSE BEGIN

RC = REFORM(im[0,*,*])

GC = REFORM(im[1,*,*])

BC = REFORM(im[2,*,*])

rim=CONVOL(RC,ker)

gim=CONVOL(GC,ker)

bim=CONVOL(BC,ker)

nim[0,*,*]=rim

nim[1,*,*]=gim

nim[2,*,*]=bim

nim=im-nim

WINDOW,0,XSIZE=sz[1],YSIZE=sz[2],TITLE='INPUT IMAGE'

TVSCL,im,TRUE=1

WINDOW,1,XSIZE=sz[1],YSIZE=sz[2],TITLE='Laplacian filtered'

TV,nim,TRUE=1

ENDELSE

END

No comments: