Dear all,

I have a set of matrix and I need to compute several measures on source image 
and to generate other matrices, in a moving window way. My input images have 
integer and double precision values, and also NAs.

I need to compute some measures that I will define as functions (like the 
sample below). As a tentative way of to do so, I made two for() looping, but I 
feel that the spear is so slow. For the sample below the time is not so big, 
but in fact I will neet about 1.000 matrices, and for several windows sizes 
(like 3=3x3.... up to 17x17).

Any idea?


window.size<-7 # 7x7
window.offset<-(window.size-1)/2
vin<-matrix(runif(10000)*20,nc=100)
vin[sample(1:length(vin),1000)]<-NA
x11(1024,768)
image(vin)

vin.range<-vin; vin.range[]<-NA
vin.range<-vin; vin.range[]<-NA
vin.sde<-vin; vin.sde[]<-NA
vin.min<-vin; vin.min[]<-NA

for (ll in (window.offset+1):(dim(vin)[1]-window.offset))
{
for (cc in (window.offset+1):(dim(vin)[2]-window.offset))
{
 
windows.tmp<-vin[(ll-window.offset):(ll+window.offset),(cc-window.offset):(cc+window.offset)]
 if (length(windows.tmp[!is.na(windows.tmp)])>0) {
  
vin.range[ll,cc]<-range(windows.tmp[!is.na(windows.tmp)])[2]-range(windows.tmp[!is.na(windows.tmp)])[1]
  vin.sde[ll,cc]<-sd(windows.tmp[!is.na(windows.tmp)])
  vin.min[ll,cc]<-min(windows.tmp[!is.na(windows.tmp)])
  }
} #ll
} #cc

par(mfrow=c(2,2))
image(vin,main=paste("VIN - ws 
=",window.size,"\n",var.desc),col=rainbow(20),panel.first = grid(8,8))
image(vin.range,main="VIN.RANGE",col=rainbow(20),panel.first = grid(8,8))
image(vin.sde,main="VIN.SD",col=rainbow(20),panel.first = grid(8,8))
image(vin.min,main="VIN.MIN",col=rainbow(20),panel.first = grid(8,8))


Thanks,

Miltinho
Brazil.



 para armazenamento!

        [[alternative HTML version deleted]]

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to