icpmat | R Documentation |
match two landmark configurations using iteratively closest point search
icpmat(
x,
y,
iterations,
mindist = 1e+15,
subsample = NULL,
type = c("rigid", "similarity", "affine"),
weights = NULL,
threads = 1,
centerweight = FALSE
)
x |
moving landmarks |
y |
target landmarks |
iterations |
integer: number of iterations |
mindist |
restrict valid points to be within this distance |
subsample |
use a subsample determined by kmean clusters to speed up computation |
type |
character: select the transform to be applied, can be "rigid","similarity" or "affine" |
weights |
vector of length |
threads |
integer: number of threads to use. |
centerweight |
logical: if weights are defined and centerweigths=TRUE, the matrix will be centered according to these weights instead of the barycenter. |
returns the rotated landmarks
data(nose)
icp <- icpmat(shortnose.lm,longnose.lm,iterations=10)
## example using weights
## we want to assign high weights to the first three cordinates
icpw <- icpmat(shortnose.lm,longnose.lm,iterations=10,
weights=c(rep(100,3),rep(1,620)),centerweight = TRUE)
## the RMSE between those four points and the target is now smaller:
require(Rvcg)
RMSE <- sqrt(sum(vcgKDtree(longnose.lm,icp[1:3,],k=1)$distance^2))
RMSEW<- sqrt(sum(vcgKDtree(longnose.lm,icpw[1:3,],k=1)$distance^2))
barplot(c(RMSE,RMSEW),names.arg=c("RMSE weighted","RMSE unweighted"))
## Not run:
## plot the differences between unweighted and weighted icp
deformGrid3d(icp,icpw)
## plot the first four coordinates from the icps:
spheres3d(icp[1:3,],col="red",radius = 0.5)
spheres3d(icpw[1:3,],col="green",radius = 0.5)
## plot the target
spheres3d(longnose.lm,col="yellow",radius = 0.2)
## End(Not run)
##2D example using icpmat to determine point correspondences
if (require(shapes)) {
## we scramble rows to show that this is independent of point order
moving <- gorf.dat[sample(1:8),,1]
plot(moving,asp=1) ## starting config
icpgorf <- icpmat(moving,gorf.dat[,,2],iterations = 20)
points(icpgorf,asp = 1,col=2)
points(gorf.dat[,,2],col=3)## target
## get correspondences using nearest neighbour search
index <- mcNNindex(icpgorf,gorf.dat[,,2],k=1,cores=1)
icpsort <- icpgorf[index,]
for (i in 1:8)
lines(rbind(icpsort[i,],gorf.dat[i,,2]))
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.