image.smooth function - RDocumentation (2024)

Description

Takes an image matrix and applies a kernel smoother to it. Missing valuesare handled using the Nadaraya/Watson normalization of the kernel.

Usage

# S3 method for smoothimage(x, wght = NULL, dx = 1, dy = 1, kernel.function = double.exp, aRange = 1, grid = NULL, tol = 1e-08, xwidth = NULL, ywidth = NULL, weights = NULL, theta=NULL, ...)

setup.image.smooth(nrow = 64, ncol = 64, dx = 1, dy = 1, kernel.function = double.exp, aRange = 1, xwidth = nrow * dx, ywidth = ncol * dx, lambda=NULL,theta=NULL, ...)

Value

The smoothed image in R image format. ( A list with components x, yand z.) setup.image.smooth returns a list with components W amatrix being the FFT of the kernel, dx, dy, xwidth and ywidth.

Arguments

x

A matrix image. Missing values can be indicated by NAs.

wght

FFT of smoothing kernel. If this is NULL the default is to compute thisobject.

grid

A list with x and y components. Each are equally spaced and define the rectangular. ( see grid.list)

dx

Grid spacing in x direction

dy

Grid spacing in x direction

kernel.function

An R function that takes as its argument the squared distance between two points divided by the bandwidth. The default is exp(-abs(x)) yielding a normal kernel

aRange

the bandwidth or scale parameter.

theta

Same as aRange.

xwidth

Amount of zero padding in horizontal dimension in units of the grid spacing.If NULL the default value is equal to the width of the image the most conservative value but possibly inefficient for computation.Set this equal to zero to get periodic wrapping of the smoother. This isuseful to smooth a Mercator map projection.

ywidth

Same as xwidth but for the vertical dimension.

weights

Weights to apply when smoothing.

tol

Tolerance for the weights of the N-W kernel. This avoids kernelestimates that are "far" away from data. Grid points with weightsless than tol are set to NA.

nrow

X dimension of image in setting up smoother weights

ncol

Y dimension of image

lambda

Smoothing parameter if smoother is interpreted in a spline-likeway.

...

Other arguments to be passed to the kernel function

Details

The function works by taking convolutions using an FFT. The missingpixels are taken into account and the kernel smoothing is correctlynormalized for the edge effects following the classical Nadaraya-Watsonestimator. For this reason the kernel doe snot have to be a desity as itis automatically normalized when the kernel weight function is found forthe data. If the kernel has limited support then the width argumentscan be set to reduce the amount of computation. (See example below.) For multiple smoothing compute the fft of the kernel just once usingsetup.image.smooth and pass this as the wght argument toimage.smooth. this will save an FFT in computations.

See Also

as.image, sim.rf, image.plot

Examples

Run this code

# first convert precip data to the 128X128 discretized image format ( with # missing values to indicate where data is not observed) # out<- as.image( RMprecip$y, x= RMprecip$x, nx=128, ny=128) # out$z is the image matrix dx<- out$x[2]- out$x[1] dy<- out$y[2] - out$y[1] # # grid scale in degrees and choose kernel bandwidth to be .25 degrees. look<- image.smooth( out, aRange= .25)# pass in a tophat kerneltopHat<- function( dd, h ){ ifelse( dd <= h^2, 1, 0)} ## dd is the distance squaredlook2<- image.smooth( out, kernel.function=topHat, h=.8)image.plot(look) points( RMprecip$x)US( add=TRUE, col="grey", lwd=2)# to save on computation, decrease the padding with zeroes # only pad 32 grid points around the margins ofthe image. look<- image.smooth(out$z, dx=dx, dy=dy, aRange= .25, xwidth=32*dx,ywidth=32*dy) # the range of these data is ~ 10 degrees and so # with a padding of 32 grid points 32*( 10/128) = 2.5 # about 10 standard deviations of the normal kernel so there is still # lots of room for padding # a minimal choice might be xwidth = 4*(.25)= 1 4 SD for the normal kernel# creating weighting object outside the call # this is useful when one wants to smooth different data sets but on the # same grid with the same kernel function # ## random fields from smoothing white noise with this filter.#set.seed(123)test.image<- matrix( rnorm(128**2),128,128)dx<- .1dy<- .8wght<- setup.image.smooth( nrow=128, ncol=128, dx=dx, dy=dy, aRange=.25, xwidth=2.5, ywidth=2.5)#look<- image.smooth( test.image, dx=dx, dy=dy, wght)# NOTE: this is the same as using ## image.smooth( test.image , 128,128), xwidth=2.5,# ywidth=2.5, dx=dx,dy=dy, aRange=.25)## but the call to image.smooth is faster because the fft of kernel# has been precomputed.# periodic smoothing in the horizontal dimensionlook<- image.smooth( test.image , xwidth=1.5, ywidth=2.5, dx=dx,dy=dy, aRange=1.5)look2<- image.smooth( test.image , xwidth=0, ywidth=2.5, dx=dx,dy=dy, aRange=1.5)# compare these twoset.panel( 1,2)image.plot( look, legend.mar=7.1)title("free boundaries")image.plot( look2, legend.mar=7.1) # look for periodic continuity at edges!title("periodic boundary in horizontal")set.panel(1,1)

Run the code above in your browser using DataLab

image.smooth function - RDocumentation (2024)
Top Articles
Latest Posts
Article information

Author: Ouida Strosin DO

Last Updated:

Views: 5826

Rating: 4.6 / 5 (76 voted)

Reviews: 83% of readers found this page helpful

Author information

Name: Ouida Strosin DO

Birthday: 1995-04-27

Address: Suite 927 930 Kilback Radial, Candidaville, TN 87795

Phone: +8561498978366

Job: Legacy Manufacturing Specialist

Hobby: Singing, Mountain biking, Water sports, Water sports, Taxidermy, Polo, Pet

Introduction: My name is Ouida Strosin DO, I am a precious, combative, spotless, modern, spotless, beautiful, precious person who loves writing and wants to share my knowledge and understanding with you.