Create a Window
Creates an object of class
an observation window in the two-dimensional plane
owin(xrange=c(0,1), yrange=c(0,1), ..., poly=NULL, mask=NULL, unitname=NULL, xy=NULL)
- $x$ coordinate limits of enclosing box
- $y$ coordinate limits of enclosing box
- Optional. Polygonal boundary of window.
- Optional. Logical matrix giving binary image of window.
- Optional. Name of unit of length. Either a single character string, or a vector of two character strings giving the singular and plural forms, respectively.
- Optional. List with components
yspecifying the pixel coordinates for
owin.object for an overview.
To create a window in its own right,
users would normally invoke
as.owin may be convenient.
A window may be rectangular, polygonal, or a mask (a binary image).
- rectangular windows:If only
yrangeare given, then the window will be rectangular, with its$x$and$y$coordinate dimensions given by these two arguments (which must be vectors of length 2). If no arguments are given at all, the default is the unit square with dimensions
- polygonal windows:If
polyis given, then the window will be polygonal.
- single polygon:If
polyis a matrix or data frame with two columns, or a structure with two component vectors
yof equal length, then these values are interpreted as the cartesian coordinates of the vertices of a polygon circumscribing the window. The vertices must be listedanticlockwise. No vertex should be repeated (i.e. do not repeat the first vertex).
- multiple polygons or holes:If
polyis a list, each entry
poly[[i]]of which is a matrix or data frame with two columns or a structure with two component vectors
yof equal length, then the successive list members
poly[[i]]are interpreted as separate polygons which together make up the boundary of the window. The vertices of each polygon must be listedanticlockwiseif the polygon is part of the external boundary, butclockwiseif the polygon is the boundary of a hole in the window. Again, do not repeat any vertex.
- single polygon:If
- binary masks:If
maskis given, then the window will be a binary image. The argument
maskshould be a logical matrix such that
TRUEif the point
(x[j],y[i])belongs to the window, and
FALSEif it does not. Note carefully that rows of
maskcorrespond to the$y$coordinate, and columns to the$x$coordinate. Here
yare vectors of$x$and$y$coordinates equally spaced over
yrangerespectively. The pixel coordinate vectors
ymay be specified explicitly using the argument
xy, which should be a list containing components
y. Alternatively there is a sensible default.
raster.y()as in the examples below.
- An object of class
"owin"describing a window in the two-dimensional plane.
Validity of polygon data
Polygon data may contain geometrical inconsistencies such as
self-intersections and overlaps. These inconsistencies must be
removed to prevent problems in other
w <- owin() w <- owin(c(0,1), c(0,1)) # the unit square w <- owin(c(10,20), c(10,30), unitname=c("foot","feet")) # a rectangle of dimensions 10 x 20 feet # with lower left corner at (10,10) # polygon (diamond shape) w <- owin(poly=list(x=c(0.5,1,0.5,0),y=c(0,1,2,1))) w <- owin(c(0,1), c(0,2), poly=list(x=c(0.5,1,0.5,0),y=c(0,1,2,1))) # polygon with hole ho <- owin(poly=list(list(x=c(0,1,1,0), y=c(0,0,1,1)), list(x=c(0.6,0.4,0.4,0.6), y=c(0.2,0.2,0.4,0.4)))) w <- owin(c(-1,1), c(-1,1), mask=matrix(TRUE, 100,100)) # 100 x 100 image, all TRUE X <- raster.x(w) Y <- raster.y(w) wm <- owin(w$xrange, w$yrange, mask=(X^2 + Y^2 <= 1)) # discrete approximation to the unit disc plot(c(0,1),c(0,1),type="n") bdry <- locator() # click the vertices of a polygon (anticlockwise) <testonly>bdry <- list(x=c(0.1,0.3,0.7,0.4,0.2), y=c(0.1,0.1,0.5,0.7,0.3))</testonly> w <- owin(poly=bdry) plot(w) im <- as.logical(matrix(scan("myfile"), nrow=128, ncol=128)) # read in an arbitrary 128 x 128 digital image from text file rim <- im[, 128:1] # Assuming it was given in row-major order in the file # i.e. scanning left-to-right in rows from top-to-bottom, # the use of matrix() has effectively transposed rows & columns, # so to convert it to our format just reverse the column order. w <- owin(mask=rim) plot(w) # display it to check!