Fixed compiler complaints by CRAN
bindArr: check for input as array
crossProduct: added option normalize.
Replace rgl.* calls with *3d calls. (#33)
read.slicerjson: read undefined landmarks from json info instead of checking position values
read.slicerjson: read orientation from file instead of generic lps2ras matrix
read.slicerjson: allow to read undefined landmarks
write.slicerjson: allow export of NA values for Slicer >=5.0
read.fcsv: optimize handling of fiducial names
NEW: computeArea: function computing projected area enclosed by set of ordered landmarks.
pls2B: fixed CV and permutest for univariate cases.
pls2B: Added RV-coefficient (and permutation test)
getPLSCommonShape: fixed common sd calculation in example
procSym/align2procSym: support use.lm option in align2procSym
restoreShapes: add option meanlogCS / procSym add meanlogCS as output in case sizeshape=TRUE
restoreShapes: add option origsize.
restoreShapes: add option sizeshape
readallTPS: add scale to allow scaling by included scale factor.
deformGrid2d: added option lty
read.slicerjson: add option to specify na values.
rotonto: return correctly dimensioned matrices in NA cases.
NEW: getPointAlongOutline and resampleCurve
meshDist: added option titleplot for customizing heatmap axis.
procSym: Add numbering to PC-Variance table.
groupPCA: remove misleading combinedVar table from output
mirror: added option to mirror on plane, using it as a wrapper for mirror2plane.
fixed arguments in deprecated function showPC
deprecated: showPC
getSides: set default values for pcAlign and icpiter
NEW: getSides to find bilateral landmarks.
NEW: updateIndices: update a vector of indices after removel of some of the indexed items
NEW: restoreFromPCA: retrieve data back from a pca space.
slider3d: new option smoothnormals to obtain tangent plains from smoothed normals
read.slicer.json: added option lps2ras to automatically convert lps 2 ras space on import
read.fcsv: add option lps2ras to allow an automatic conversion to RAS space if coordinates are recorded in LPS (as of Slicer > 4.11).
classify: added option newdata to predict class affinity for new data
NEW: added predict functions for CVA and groupPCA
warpmovie3d: supports now colored meshes
changed mesh coloring to new rgl default of per-vertex color vector
deformGrid3d: fixed correct position of grid
typprob: fix mean matrix for single cases
computeTransform: fix checking for NA Landmarks in all transform types
angleTest: if values exceed system max for doubles, set them to .Machine$double.xmax and issue warning
mesh2obj: now simply a wrapper for Rvcg::vcgObjWrite. Fixes Issue #14.
test-slider3d: correctly renamed test
rotonto: readded accidentally commented line
rotonto: fix case when x and y are missing different coordinates
read.fcsv: adapted to latest 3D slicer fiducials format
classify.bgPCA: fixed arrayhandling for non-landmark data
deformGrid2d: significant speed up in grid generation
slider3d: removed unnecessary print statement.
export.meshDist: use vcgPlyWrite for export
warpmovie: bug preventing to export to subfolder
meshDist, render: set meshColor="legacy" for latest rgl-dev
slider3d: check if number of meshes matches number of landmark configs
mergeMeshes: fixed color handling in case color is a vector.
getTrafoRotaxis: fixed critical bug
checkLM: added option meshlist
Docu fixes.
classify.bgPCA: fix case for 3D arrays
write.pts: fix cases with duplicate rownames (prohibited by R)
read.pts: don't set rownames if there are duplicate namings in the pts file.
virtualMeshScan, getOuterViewpoints: perform a virtual rescan of a mesh using defined POVs.
deformGrid3d: fixed indices starting with 0 for slices, add gridcol and gridwidth and added options to select subsets of slices.
deformGrid2d: added options cex1,cex2,gridcol
fixLMmirror: now allowing heavy abuse with loads of missing data and improved error handling
plotNormals: allow for per vertex lenght vector and changed long=>length and deprecated old option
checkLM: added possibility to view backwards
slider3d: made function work in parallel on all OS
pls2B: added CV (+ options)
added plsCoVarCommonShape: Compute the shape changes along the common axis of deformations
added getPLSCommonShape: Obtain linear combinations associated with the common shape change in each latent dimension of a pls2B
deformGrid3d: fixed indices starting with 0 for slices, add gridcol and gridwidth and added options to select subsets of slices.
line2plane: fixed deprectated array multiplication warning
changed Matrix::cBind to base::cbind
Depend: > R 3.2.0
GetPhi (retrodeform): set h to average between landmark distance (not the squared distance)
CVA: add rownames and colnames to scores and CVs
procSym: reverted to old behaviour, disabling orp if CSinit= FALSE
added align2procSym to align new data to existing Procrustes aligned data.
CVA: added option to specify prior probs
fixLMtps, proc.weight: allow custom weight functions
slider2d: public version of formerly private Semislide function
procSym: added weights and centerweights to control Procrustes registration
predictRelWarps: added prediction of uniform scores
added support in predictRelWarps for alpha=0
icpmat: added options for weights and centerweight
deformGrid3d: allow exporting resulting 3D object as mesh
cSize now also operates on mesh vertices
computeTransform: decreased singularity tolerance for type="tps"
tps2d: added as alias of tps3d to avoid user confusion
equidistantCurve: some minor improvements and fix for 2D case
CreateL: fixed return of Lsubk3 if dim=2
made read.mpp more generic
applyTransform: more efficient normal handling for affine transform
write.* functions: only append file suffix if missing in the filename
fixed amount of covariance estimation
added sortCurve and equidistantCurve
added kappa statistic to print.classify
added read/write.fcsv to read write landmark in 3DSlicer format
added prcompfast, a faster and more memory efficient version of prcomp
slider3d: now sliding without specifying surfaces is possible. Surface is estimated by computing normals from point clouds using vcgUpdateNormals
added plot method for slider3d
added fastKmeans a very fast and efficient way to compute kmeans-clustering for 2D and 3D data.
fixed c++14 standard requirements
made index in rmVertex unique
showPC: for single PCs vectors of length> 1 are coerced to matrix
added option margin in deformGrid3d and deforGrid2d
unified code for creating bending energy matrix
made relWarps more memory and speed efficient and added option getBasis to disable (computationally expensive) calculation of vector basis.
added dimnames from rownames in vecx
returns Grandmean and Groupmeans as matrix/array for landmark data
correct output in find.outliers if mahalanobis=TRUE and add probability
added reflection=FALSE in find.outliers and corrected reported distances
fixed read.lmdta for single configs
slider3d: fixed case where all file infos are stored in sur.name
fixed print.classify
removed dependency yaImpute using vcgKDtree instead
added unit testing for slider3d
made CreateL and tps3d multi-threaded
added options silent to slider3d and relaxLM
ignore missing values when calculating quantiles and mindist in meshdist
refactored CVA and added test for CVA
fixed predictPLSfromScores for ncomp=1
fixed correct lwd passing in deformGrid3d
fixed procAOVsym for 2D case (correct df)
added unit test for pls2B
speed up pls2B by some orders of magnitude, now suitable for very large landmark configurations
showPC: for single PCs vectors of length> 1 are coerced to matrix
fixed c++14 standard requirements
made index in rmVertex unique
meshPlaneIntersect now also supports normals (as cutSpace)
added default method for applyTransform for 2D and 3D vectors
removed bePCs with zero variance from output in relWarps
improved error handling in placePatch
set square=FALSE in qqmat
added message if CSinit = F and orp = T, that orp is disabled
fixed applyTransform for type="tps" and inverse = TRUE
added testthat test for relWarps
tweaked relWarps to work with large amounts of coordinates
fixed wrong bracket position in ProcGPA leading to only a single iteration
CVA: fixed calculation of posterior probs if cv=F
fixed linewidth in CVA example to stop check complaints
set p.adjust.method="none"
only return significant scores in relWarps
named output of plsCoVar
added function line2plane to calculate intersection of a line and a plane
added option pcAlign in function mirror to improve alignment to original object
added option pcAlign in relWarps and procSym to allow alignment to first specimen rather than PC-axes.
Gregory Jefferis added unit testing setup infrastructure
added new functions getPLSfromScores, getPLSscores predictPLSfromScores,predictPLSfromData and plsCoVar for prediction and handling results from 2-Block PLS regression.
made relaxLM an S3 function and added methods for mesh3d to relax two meshes with corresponding vertices. Added use.lm to specify subset of coordinates for alignment if bending =FALSE
new option 'as.factor' in name2factor
deprecated warp.mesh (use tps3d now for meshes and matrices)
meshDist now allows custom colorramps
added option wireframe in deformGrid2d
added support for registered meshes in computeTransform
added selection of transform type in icpmat
added option use.lm to slider3d to specify subset for alignment if bending =FALSE
added getMeaningfulPCs to determine meaningful Principal Components.
made optimization in pcAlign and mirror run in parallel (not supported on Windows OS).
fixed normal handling in mergeMeshes
fixed coefficient scaling in RegScore
added update of normals in meshDist
removed unnecessary function meanMat and replaced it with generic colMeans
fixed calculation of loadings in pls2B
set lambda (regularization) in all tps related functions to 1e-8 to avoid gross distortions in some cases
fixed typo in pcAlign leading to misbehaviour if iterations < 1
slider3d, relaxLM and procSym now allow minimizing Procrustes distance
added orientation check in pcAlign to avoid reflections
massive speed improvements in sliding semi-landmarks routines
added options missing/missingList in relaxLM and slider3d to allow using semi-landmarks in "thin-air"
added helper function createMissingList
added function points2plane for projecting a point/pointcloud onto a plane.
pcAlign with y missing now centers a shape and aligns it by its principal axes.
added option pcAlign in procSym and ProcGPA to enable/disable alignment of sample by principal axes
renamed conv2backf to invertFaces
renamed crossp to crossProduct
renamed tanplan to tangentPlane
reorient faces if reflections are involved in applyTransform
made read.lmdta more versatile
fixed an issue with argument "size" in deformGrid3d
set default method to "vcg" in meshDist
added new function mirror to mirror a landmark configuration or a mesh and registering onto the original one.
added new functions retroDeform3d and retroDeformMesh for removing affine deformation from a 3D-meshes and pointclouds
deformGrid3d now also accepts meshes
added function classify for CVA and groupPCA for creating classification tables
added new function getTrafo4x4, getTrafoRotaxis, computeTransform and applyTransform, for computing and applying affine transformations.
new function pcAlign to align meshes and pointclouds by their principal axes
added function meshPlaneIntersect to find intersection points between a mesh and a plane
added function getFaces to get indices of faces that contain specified vertices
fixed issue with argument sep in typprobClass
added option size in deformGrid3d
fixed argument tol in ray2mesh
fixed rhotol in placePatch if inflate=NULL
fixed NA in colors from meshDist
fixed rmVertex in case no faces remain
changed relaxLM to accept 2D configs
replaced workhorse function in projRead by the faster vcgClostKD
made plotNormals to work with homogenous and non-homogeneous coordinates
fixed issue in output of CVAdists (wrong attribution of p-value tables)
added support for objects stored in a list in bindArr
made rotreverse an S3 function for matrices and mesh3d
fixed bug in slider3d if pairedLM != 0
fixed pooled within covariance matrix (covW) for single group entries
speed up rotonto, rotonmat by vectorizing
removed junk comments
added fix for weighted Grandmean in CVA (thanks to Anne-Beatrice Defour)
added check for empty patches and curves in cExtract (thanks to M. Friess for pointing that out)
added 'cutMeshPlane' and 'cutSpace' to cut a pointcloud into upper and lower part
added function 'solutionSpace' to calculate the basis of the solution space for Ax=b, with det(A)=0
minor changes in asymPermute (docu and table naming)
enabled multigroup support in asymPermute
added groupmean output in asymPermute
updateNormals: if no faces are present, mesh will be returned unchanged now. quadric faces are converted to triangular ones
add new function 'quad2trimesh' for converting quadric meshes into triangular meshes.
made code in pcaplot3d easier to maintain by creating .pcaplot3d
assigned additional attributes to output of procSym
exposed armaGinv, a simple wrapper to call Armadillos pseudo-inverse function.
added function 'fixLMmirror' to estimate missing bilateral landmarks
wrote C++ versions of some subroutines to speed up Procrustes registration.
added function arrMean3 to calculate fast average of 3D-array
reprojection onto surface in 'slider3d' now can run in parallel (only OS X and Linux)
'createAtlas' has new option "keep.fix" to specifiy landmarks that should be kept from sliding in case corrCurves are defined.
wrote C++ implementation of 'covPCA' (much faster) and added bootstrapping option to compute confidence intervals for PC-scores (removed obsolete options "mc.cores" and "scores")
all functions calling trimesh-tools are now wrappers for much faster implementations from Rvcg
placePatch now runs in parallel
warpmovie3d now allows make movie of deformed mesh AND landmarks
renamed 'adnormals' to 'updateNormals'
'permudist' is now massively faster by using C++ code for permutation. It can handle more than 2 groups now.
as the new 'permudist' is now implemented in 'groupPCA', it gets a boost, too.
added function 'RegScore' to calculate Regression scores as described in Drake & Klingenberg(2008)
added 'CAC' (common allometric component)
added functions 'asymPermute' (assessing directional asymmetry) and 'meanMat' (fast Matrix averaging)
covPCA now returns the distances instead of squared distances
added option to revert vecx to translate a matrix back into an array containing landmarks
adapted 'ray2mesh' to work in parallel calls and added option "mc.cores" in 'placePatch' - even in Windows
added optipn "add" in "meshDist" and "render" to add to existing rgl window.
fixed error in in 'placePatch' in case "data" is a matrix
switched to roxygen2
fixed some docu and added examples in 'pcaplot3d' and 'rotonmat'
added link to PDF-manual in Morpho's help page
commented out the answers in find.outliers to be able to run run_examples(...,run=FALSE) without errors
marked more examples as dontrun, as the usage of roxygen2 allows the detailed check of ALL examples by using run_examples(devtools package). This uses less checking time and keeps CRAN from complaining
translated all FORTRAN routines into C++ using Rcpp/RcppArmadillo
added option "barycoords" in 'closemeshKD' and added normal weighting
made reprojection ind 'slider3d' using multiple cores in case "meshlist" is specified
added option "blockdiag" in 'CreateL' to supress returning blockdiagonal matrix containin Lsubk
significant speedup in calcGamma (responsible for sliding)
added option "meshlist" in 'slider3d' and fixed memory allocation problem for orthogonal projection with large amounts of landmarks in 'procSym' (underlying routine 'orp')
added autonaming of output in write.pts
'mergeMeshes' now allows a list of meshes to merge
fixed error in 'mcNNindex' in case k=1
added landmark matrix to output of 'cExtract'
set pointsize to 10 in 'deformGrid3d' in case "type="p""
added options "silent"/"ignore.stdout" to 'ply2mesh', 'projRead', 'ray2mesh', 'slider3d' and 'warp.mesh' to supress terminal output
added option "pt.size" instead of "radius" in 'checkLM' and 'plotAtlas' to control point/sphere size.
added option "fixRepro" in 'slider3d' and 'relaxLM' to supress reprojection of fix landmarks onto the surface. This can be useful when some fix landmarks are in "thin air".
added support for point cloud export in 'mesh2ply' and 'mesh2obj'
added option "silent" in 'rmUnrefVertex'
fixed error in 'relWarps' preventing it to work for 2D configs
added function 'checkLM'. Useful to visualize if projection by 'placePatch' was successful by browsing through sample.
added functions 'placePatch', 'createAtlas' and 'plotAtlas' for defining templates and functions to project (semi-) landmarks from an atlas onto all specimen in a given sample
fixed missing '-1' subtraction in 'covW'
added function 'mergeMeshes' to concatenate multiple triangular meshes.
made function 'procAOVsym' (procrustes Anova for object symmetry) public.
made functions 'cSize', 'mcNNindex', 'meshcube', 'meshres', 'ProcGPA' public.
added option 'info' in 'read.mpp'
merged 'CreateL' and 'CreateL2D'
rewrote large parts of 'CVA', 'groupPCA' and 'permudist' to make the code more efficient
'covPCA' now allows permutation tests to check if pairwise distances between covariance matrices are significant and reports rownames for two-group case
removed unnecessary complicated check for empty groups by simply using function 'factor' in 'covW' and 'typprobClass'
white space formatting in code
added option "mshape" to function 'orp' to specify a custom pole for projection
made function 'fx', 'PCAcrova' and 'calcTang_U' interntal-only by prefixing function name with '.'
removed unnecessary sinus calculation in 'angle.calc'
added docu and examples for all newly exposed functions (see above)
added examples for 'find.outliers'
added more examples for covPCA, performing permutation tests
added docu for function 'barycenter'
added a lot of examples to docu and documented data(nose)
added documentation for 'angle.calc'
added example in 'relaxLM'
added section "details" in procSym, added example in slider3d
added example for procAOVsym
changed parameters in examples for 'pls2B' and 'relaxLM' to decrease completion time
changed doParallel from Dependency to Import - needs 'doParallel' >= 1.06
removed obsolete Fortran code
added minimum version for imported package 'Matrix'(>= 1.0-1)
changed foreach, parallel and rgl (needs rgl version >= 0.93.963) from 'Depends' to 'Imports' (affecting DESCRIPTION and NAMESPACE)
massive NAMESPACE editing by switching to manual export instead of regular expression export
replaced abind with 'bindArr' in 'fixLMtps' and 'procSym'
moved Distance calculation in 'CVA' to '.CVAdists' and radically cleaned code;
removal of redundant variables in 'groupPCA'
added option 'reflect' to 'procSym' (and underlying functions) and added copyright note for code copied from shapes package
added docu for new data set "boneData"
added examples in 'procSym'
added example for 'tps3d'
added additional example data (landmarks and a bone surface mesh)
updated DESCRIPTION and README
updated README added sourceforge and github download links
added README.Rd
added NEWS.Rd
simplified code in 'CVA' and 'CVA.crova'
fixed issue when n-groups > n variables in 'CVA' and 'CVA.crova'
replaced 'nn2' (RANN) with 'ann' (yaImpute) because RANN got (temporarily) banned from CRAN because of violation of policy
added 'readLandmarks.csv' to read landmarks stored in spreadsheet text files (e.g. comma separated)
added check for empty groups in 'typprobClass' and 'covW'
changed cube creation in 'deformGrid3d' (much faster now).
added options weights and centerweight in 'rotonmat'
added confirmation for plotting spheres in 'deformGrid3d' when n > 1000 (can be slow)
'pcaplot3d' now works if data has only 1 PC
removed useless code remains
added 'bindArr' to concatenate matrices/arrays
changed default core value in 'closemeshKD' from detectCores() to 1.
added option 'keep' in 'rmVertex'
changed default method in 'meshDist.mesh3d' from vcglib to morpho
renamed 'regdist.raw' to 'regdist' and removed original 'regdist' (too prone to user error)
finally mentioned Marta Rufino for providing all examples in docu for 'CVA' (sorry Marta, I simply forgot)
fixed some docu and added examples in 'pcaplot3d' and 'rotonmat'
added docu for 'anonymize', 'r2morphoj', 'r2morphologika', 'NNshapeReg', 'kendalldist'
updated COPYRIGHT file
switched from depends to import for colorRamps, MASS, RANN