#------------------------------------------------------------------------ # # Copyright (c) 1997-1998 by Cornell University. # # See the file "license.txt" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # #------------------------------------------------------------------------ package require DvmBasic package require DvmPnm package require DvmKernel source ../lib/pnmlib.tcl if {$argc < 2} { puts "enter input pgm filename :" set inname [gets stdin] puts "enter output pgm filename :" set outname [gets stdin] } else { set inname [lindex $argv 0] set outname [lindex $argv 1] } set hdrbyte [read_pgm $inname] set hdr [lindex $hdrbyte 0] set image [lindex $hdrbyte 1] set w [pnm_hdr_get_width $hdr] set h [pnm_hdr_get_height $hdr] set kw 4 set kh 4 set k [kernel_new $kw $kh] kernel_set_values $k {{1 1 1 1} {1 0 0 1} {1 0 0 1} {1 1 1 1}} kernel_set_offset $k 0 kernel_set_div_factor $k 12 #Use a virtual byte image to get a resultant image of the same dimensions #as the source image. Basically copy the source image into a larger temp #image and extend the boundaries of the source image until it fills the #entire temp image. Finally apply the convolution to the temp image. set t1 [byte_new [expr $w+$kw-1] [expr $h+$kh-1]] set t2 [byte_clip $t1 [expr $kw/2] [expr $kh/2] $w $h] byte_copy $image $t2 byte_extend $t1 [expr $kw-1] [expr $kh-1] set kernimage [byte_new $w $h] kernel_apply $k $t1 $kernimage write_pgm [lindex $hdrbyte 0] $kernimage $outname byte_free $kernimage byte_free $image byte_free $t2 byte_free $t1 kernel_free $k pnm_hdr_free [lindex $hdrbyte 0]