A binary image defines the "potential" for deformation.
library( ANTsR ) img = antsImageRead( getANTsRData( "r16" ) ) ptmat = matrix( c( 95.5, 95.5, 63.5, 63.5 ), ncol=2 ) mymask = img * 0 + 1 aa = makePointsImage( ptmat, mask = mymask, radius = 16 ) aaDist = iMath( aa, "MaurerDistance") + makeImage( mymask, rnorm( sum( mymask ), sd=5 )) plot( aaDist ) bb = iMath( aa, "MD", 5 ) areg = antsRegistration( aa, aaDist * bb, typeofTransform = "SyNOnly", synMetric = "demons", synIterations = 15, flowSigma = 6, totalSigma = 3, gradStep = 0.2 ) field = antsImageRead( areg$fwdtransforms[ 1 ] ) warpTx = antsrTransformFromDisplacementField( field ) warped = applyAntsrTransform( warpTx, data = img, reference = img) field = antsImageRead( areg$fwdtransforms[ 1 ] ) warpTx = antsrTransformFromDisplacementField( field ) txlist = list( ) ncomp = 6 for ( i in 1:ncomp ) txlist[[ i ]] = warpTx warped = applyAntsrTransform( txlist, data = img, reference = img)
Look.
plot( img ) plot( warped )
Grid.
f = areg$fwdtransforms[ 1 ] grid = createWarpedGrid( img, gridStep = 10, gridWidth = 2, fixedReferenceImage = img, transform = rep( f, ncomp ) ) plot( grid )
Compute a population mean warp.
poplist = list( antsImageRead( getANTsRData( "r16" ) ), antsImageRead( getANTsRData( "r27" ) ), antsImageRead( getANTsRData( "r30" ) ), antsImageRead( getANTsRData( "r62" ) ), antsImageRead( getANTsRData( "r64" ) ), antsImageRead( getANTsRData( "r85" ) ) ) template = antsImageClone( poplist[[ 1 ]] ) if ( !exists( "reglist" ) ) { reglist = list( ) for ( i in 1:length( poplist ) ) { reglist[[ i ]] = antsRegistration( template, poplist[[ i ]], typeofTransform = "SyN" ) } } awrp = antsImageRead( reglist[[ 1 ]]$fwdtransforms[1] ) for ( i in 2:length( reglist ) ) awrp = awrp + antsImageRead( reglist[[ i ]]$fwdtransforms[1] ) awrp = awrp * ( -1.0 * gradstep ) / length( reglist ) warpTx = antsrTransformFromDisplacementField( awrp ) txlist = list( ) ncomp = 10 for ( i in 1:ncomp ) txlist[[ i ]] = warpTx warped = applyAntsrTransform( txlist, data = template, reference = template ) plot( warped )
Curvature flow.
img = antsImageRead( "precuneus.nii.gz" ) msk = thresholdImage( img, 1, Inf ) grad = getNeighborhoodInMask( img, msk, rep(0,img@dimension), get.gradient=T, physical.coordinates = T, boundary.condition = 'mean')$gradients kappa = weingartenImageCurvature( smoothImage(img,0.5) ) * msk # convert grad to channels glist=list() for ( k in 1:3 ) { gradimg1 = msk * 0 gradimg1[ msk == 1 ] = (-1) * grad[k,] * kappa[ msk == 1 ] glist[[ k ]] = gradimg1 } field = mergeChannels( glist ) %>% smoothImage( 1.0 ) jac = createJacobianDeterminantImage( img, field ) warpTx = antsrTransformFromDisplacementField( field * 0.5 / max( abs( field ) ) ) warplist = list( ) for ( i in 1:20 ) warplist[[ i ]] = warpTx warped = applyAntsrTransform( warplist, data=img, reference=img ) # antsImageWrite( warped , '/tmp/temp.nii.gz' )
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.