https://github.com/cran/spatstat
Raw File
Tip revision: 3aca716ce2576a0dab83f08052acd47afed8ee6a authored by Adrian Baddeley on 29 February 2012, 00:00:00 UTC
version 1.25-4
Tip revision: 3aca716
exactPdt.R
#
#	exactPdt.R
#	R function exactPdt() for exact distance transform of pixel image
#
#	$Revision: 4.12 $	$Date: 2010/12/22 12:07:01 $
#

"exactPdt"<-
  function(w)
{
  verifyclass(w, "owin")
  if(w$type != "mask")
    stop(paste("Input must be a window of type", sQuote("mask")))
#	
  nr <- w$dim[1]
  nc <- w$dim[2]
# input image will be padded out with a margin of width 2 on all sides
  mr <- mc <- 2
  # full dimensions of padded image
  Nnr <- nr + 2 * mr
  Nnc <- nc + 2 * mc
  N <- Nnr * Nnc
  # output image (subset): rows & columns (R indexing)
  rmin <- mr + 1
  rmax <- Nnr - mr
  cmin <- mc + 1
  cmax <- Nnc - mc
  # do padding
  x <- matrix(FALSE, nrow=Nnr, ncol=Nnc)
  x[rmin:rmax, cmin:cmax] <- w$m
  #
  DUP <- spatstat.options("dupC")
  res <- .C("ps_exact_dt_R",
            as.double(w$xrange[1]),
            as.double(w$yrange[1]),
            as.double(w$xrange[2]),
            as.double(w$yrange[2]),
            nr = as.integer(nr),
            nc = as.integer(nc),
            mr = as.integer(mr),
            mc = as.integer(mc),
            inp = as.integer(t(x)),
            distances = as.double (double(N)),
            rows      = as.integer(integer(N)),
            cols      = as.integer(integer(N)),
            boundary  = as.double (double(N)),
            DUP=DUP,
            PACKAGE="spatstat"
            )
  dist <- matrix(res$distances,
                 ncol=Nnc, nrow=Nnr, byrow = TRUE)[rmin:rmax, cmin:cmax]
  rows <- matrix(res$rows,
                 ncol=Nnc, nrow=Nnr, byrow = TRUE)[rmin:rmax, cmin:cmax]
  cols <- matrix(res$cols,
                 ncol=Nnc, nrow=Nnr, byrow = TRUE)[rmin:rmax, cmin:cmax]
  bdist<- matrix(res$boundary,
                 ncol=Nnc, nrow=Nnr, byrow = TRUE)[rmin:rmax, cmin:cmax]
  # convert from C to R indexing
  rows <- rows + 1
  cols <- cols + 1
  return(list(d=dist,row=rows,col=cols,b=bdist, w=w))
}
back to top