localCurvature: Local Curvature

View source: R/localCurvature.R

localCurvatureR Documentation

Local Curvature

Description

Computes signed curvature along a line.

Usage

localCurvature(x, h, maxk)

Arguments

x

A data frame or matrix of dimensions N x 2 containing the coordinates of the line, where N is the number of points. The points should be ordered according to their position on the line. The columns should contain the x and y coordinates. The curvature calculation is unaffected by any permutation of the columns. Directly accepts a list element from ocontour.

h

Specifies the length of the smoothing window. See locfit::lp for more details.

maxk

See locfit::locfit.raw for details.

Details

localCurvature fits a local non-parametric smoothing line (polynomial of degree 2) at each point along the line segment, and computes the curvature locally using numerical derivatives.

Value

Returns a list containing the contour coordinates x, the signed curvature at each point curvature and the arc length of the contour length.

Author(s)

Joseph Barry, Wolfgang Huber, 2013

See Also

ocontour

Examples

  ## curvature goes as the inverse of the radius of a circle
  range=seq(3.5,33.5,by=2)
  plotRange=seq(0.5,33.5,length.out=100)
  circleRes=array(dim=length(range))
  names(circleRes)=range
  for (i in  seq_along(1:length(range))) {
   y=as.Image(makeBrush('disc', size=2*range[i]))
   y=ocontour(y)[[1]]
   circleRes[i]=abs(mean(localCurvature(x=y,h=range[i])$curvature, na.rm=TRUE))
  }
  plot(range, circleRes, ylim=c(0,max(circleRes, na.rm=TRUE)), xlab='Circle Radius', ylab='Curvature', type='p', xlim=range(plotRange))
  points(plotRange, 1/plotRange, type='l')

  ## Calculate curvature
  x = readImage(system.file("images", "shapes.png", package="EBImage"))[25:74, 60:109]
  x = resize(x, 200)
  y = gblur(x, 3) > .3
  display(y)
  
  contours = ocontour(bwlabel(y))
  c = localCurvature(x=contours[[1]], h=11)
  i = c$curvature >= 0
  pos = neg = array(0, dim(x))
  pos[c$contour[i,]+1]  = c$curvature[i]
  neg[c$contour[!i,]+1] = -c$curvature[!i]
  display(10*(rgbImage(pos, , neg)), title = "Image curvature")

aoles/EBImage documentation built on Oct. 16, 2024, 2:06 p.m.