filterim<-function(Im,Masksizeh,Masksizev,Masktype) { # Use odd dim Masksize # # Masksizeh is the horizontal size mask # Masksizev is the vertical size mask # Masktype: 0=maxfilter, 1=minfilter, 2=meanfilter, 3=medianfilter # m1<-Masksizeh m2<-Masksizev n1<-dim(Im)[1] n2<-dim(Im)[2] Imu<-matrix(0,n1+2*floor(m1/2),n2+2*floor(m2/2)) Imu[(floor(m1/2)+1):(n1+floor(m1/2)),(floor(m2/2)+1):(n2+floor(m2/2))]<-Im Imo<-Imu # mirror edges for (zz1 in ((floor(m1/2)+1):(n1+floor(m1/2)))) { for (zz2 in ((floor(m2/2)+1):(n2+floor(m2/2)))) { if (Masktype==0) { Imo[zz1,zz2]<-max(Imu[(zz1-floor(m1/2)):(zz1+floor(m1/2)),(zz2-floor(m2/2)):(zz2+floor(m2/2))]) } if (Masktype==1) { Imo[zz1,zz2]<-min(Imu[(zz1-floor(m1/2)):(zz1+floor(m1/2)),(zz2-floor(m2/2)):(zz2+floor(m2/2))]) } if (Masktype==2) { Imo[zz1,zz2]<-mean(Imu[(zz1-floor(m1/2)):(zz1+floor(m1/2)),(zz2-floor(m2/2)):(zz2+floor(m2/2))]) } if (Masktype==3) { Imo[zz1,zz2]<-median(Imu[(zz1-floor(m1/2)):(zz1+floor(m1/2)),(zz2-floor(m2/2)):(zz2+floor(m2/2))]) } } } Imo<-Imo[(floor(m1/2)+1):(n1+floor(m1/2)),(floor(m2/2)+1):(n2+floor(m2/2))] return(Imo) }