[R] 3d line smoothing

From: Gregory Jefferis <gsxej2_at_cam.ac.uk>
Date: Mon, 31 Mar 2008 21:46:21 +0100


Dear R People,

I would like to smooth some 3d lines, which consist of line segments specified by start and end 3d coordinates. These are experimentally derived from microscope images of neurons, so there is no sense in which one axis is any different from any other (predictor vs response).

I have tried doing repeated smoothing interpolation with smooth.splines (see below), but this doesn't behave that well with some of my data which can be multivalued with respect to x and is not a directly 3d approach since.

Could anyone suggest a package which might have appropriate functionality or a link to read up about possible approaches?

With many thanks for your help,

Greg Jefferis.

PS As an aside, wouldn't categorising the 1350 downloadable packages on CRAN according to their content make a nice exercise in applied statistical learning/visualisation?

--

LineSmooth3d<-function(l){
    lxy=smooth.spline(l[,1:2])
    lxz=smooth.spline(l[,c(1,3)])
    cbind(l[,1],predict(lxy,l[,1])$y,predict(lxz,l[,1])$y)
}


# First 2 segments of a neuron
l=structure(c(2.240391, 5.629143, 8.140456, 9.94432, 12.295891, 13.457473, 15.170222, 17.758942, 18.290545, 20.334337, 22.027239, 23.263636, 24.24404, 26.234032, 27.411226, 29.369003, 30.806803, 32.68042, 35.012493, 37.436077, 40.567665, 46.615963, 49.906017, 57.803772, 62.236923, 63.849625, 131.309967, 129.133469, 127.194168, 125.517822, 123.464272, 121.037727, 118.98951, 116.41317, 114.511192, 111.733353, 108.64267, 106.416183, 103.347008, 100.653694, 98.72525, 96.918602, 95.4189, 94.231995, 92.493828, 91.070656, 88.901505, 86.535431, 86.055229, 86.209984, 86.143341, 86.368622, 9.116494, 10.510942, 12.17625, 14.124721, 17.23107, 21.285524, 24.150547, 26.97097, 29.702291, 32.635288, 35.791851, 39.013748, 41.252228, 42.638962, 44.100445, 45.742134, 47.191525, 49.838848, 51.361511, 52.929546, 55.789406, 60.742428, 61.489536, 60.880463, 61.653023, 61.472942), .Dim = c(26L, 3L), .Dimnames = list(NULL, c("X", "Y", "Z"))) l2=structure(list(X = c(63.849625, 63.710838, 64.202766, 64.650017, 64.965698, 64.609695, 64.352356), Y = c(86.368622, 83.420357, 80.972359, 79.352409, 77.604141, 76.094627, 74.800072), Z = c(61.472942, 62.381229, 62.161339, 63.138336, 64.076202, 65.080811, 68.487137 )), .Names = c("X", "Y", "Z"), row.names = c("26", "27", "28", "29", "30", "31", "32"), class = "data.frame")
# install.packages('rgl')
require(rgl)
# First line OK
rgl.linestrips(l) rgl.linestrips(LineSmooth3d(l),col='red')
# second line not so good
rgl.linestrips(l2) rgl.linestrips(LineSmooth3d(l2),col='red') -- Gregory Jefferis, PhD and: Research Fellow Department of Zoology St John's College University of Cambridge Cambridge Downing Street CB2 1TP Cambridge, CB2 3EJ United Kingdom Lab Tel: +44 (0)1223 336683 Office: +44 (0)1223 339899 Lab Fax: +44 (0)1223 336676 gsxej2_at_cam.ac.uk http://www.zoo.cam.ac.uk/zoostaff/jefferis.html http://www.neuroscience.cam.ac.uk/directory/profile.php?gsxej2 http://flybrain.stanford.edu ______________________________________________ R-help_at_r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
Received on Mon 31 Mar 2008 - 20:50:15 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Mon 31 Mar 2008 - 21:30:25 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive