Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

localCurvature

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

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=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")

EBImage

Image processing and analysis toolbox for R

v4.32.0
LGPL
Authors
Andrzej Oleś, Gregoire Pau, Mike Smith, Oleg Sklyar, Wolfgang Huber, with contributions from Joseph Barry and Philip A. Marais
Initial release

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.