Closed dorianps closed 9 years ago
as usual - need a reproducible example
brian
On Mon, Mar 16, 2015 at 10:52 AM, dorianps notifications@github.com wrote:
I am using cropImage: predlabel = cropImage(predlabel, predlabel, max(predlabel)) At this stage predlabel can be plotted, but there is already corrupt:
predlabel[15,15,15] index not inside the image : [14, 14, 14] [1] NA
After cropping, resampleImage is performed (within mrvnrfs, but I tried manually as well). There is no error but resampleImage produces a corrupt image, it cannot be plotted and getNeirghborhoodInMask is a matrix with 0 columns.
The image, however, works fine if I use traditional code:
ttt2 = as.antsImage(as.array(predlabel)[20:80, 30:100, 1:84])
ttt2[15,15,15] , , 1
[,1]
[1,] 0
plot(ttt2) NULL ttt3=resampleImage(ttt2, rep(4,3), 0, 1) plot(ttt3) NULL
— Reply to this email directly or view it on GitHub https://github.com/stnava/ANTsR/issues/28.
https://www.dropbox.com/s/umhio3bp1npu1x5/predlabel.nii.gz?dl=1
predlabel=antsImageRead('predlabel.nii.gz', 3) predlabel = cropImage(predlabel, predlabel, max(predlabel)) predlabel[15,15,15]
here is an example
fi <- antsImageRead(getANTsRData("r16"), 2)
cropped <- cropImage(fi)
cropped[1,1]
cropped[128,128]
this is the expected behavior because 1,1 is not in the image anymore ... after resampling, though, there is an issue but it's not clear how to resolve this "perfectly" b/c indices and physical space dont match exactly. what needs to be done is that the function SetOutputStartIndex in ResampleImageFilter
needs to be set correctly ... not sure how to resolve that. So, this needs to be dealt with here:
https://github.com/stnava/ANTs/blob/master/Examples/ResampleImage.cxx#L244
@ntustison ... any thoughts re: how to define this?
i've learned more about this ... no resolution but here is an interesting example:
fi <- antsImageRead( getANTsRData("r16") ,2)
cropped <- cropImage( fi )
rcropped<-resampleImage( cropped, dim(cropped)/2, 1 , 0 ) # not correct ( i think )
antsImageWrite( cropped , '/tmp/crop.nii.gz')
cropread<-antsImageRead("/tmp/crop.nii.gz")
rcropped2<-resampleImage( cropread, dim(cropped)/2, 1 , 0 ) # correct
these produced different results but should not ... @jeffduda @ntustison - any insight / guesses?
This behavior is somewhat confusing, as this is the only case I'm aware of where indexing an antsImage doesn't work like indexing an array, and as far as I can tell there's no way to tell where the indexing starts. Should we at least make it possible to see where the indexing begins?
2015-03-16 16:47 GMT-04:00 stnava notifications@github.com:
i've learned more about this ... no resolution but here is an interesting example:
fi <- antsImageRead( getANTsRData("r16") ,2) cropped <- cropImage( fi ) rcropped<-resampleImage( cropped, dim(cropped)/2, 1 , 0 ) # not correct ( i think ) antsImageWrite( cropped , '/tmp/crop.nii.gz') cropread<-antsImageRead("/tmp/crop.nii.gz") rcropped2<-resampleImage( cropread, dim(cropped)/2, 1 , 0 ) # correct
these produced different results but should not ... @jeffduda https://github.com/jeffduda @ntustison https://github.com/ntustison - any insight / guesses?
— Reply to this email directly or view it on GitHub https://github.com/stnava/ANTsR/issues/28#issuecomment-81928221.
that (albeit correct) behavior is a separate issue ... but one reason that this is difficult to debug is because i cant (or dont know how to) see the startindex for this image .... this can be accessed via:
image->GetLargestPossibleRegion().GetIndex()
or ( better but doesnt always work right )
image->GetRequestedRegion().GetIndex()
there probably should be an r interface implemented for this ...
the only reason this has not come up previously is that the StartIndex is usually zero for itk images ... but not always (obviously).
brian
On Mon, Mar 16, 2015 at 4:57 PM, bkandel notifications@github.com wrote:
This behavior is somewhat confusing, as this is the only case I'm aware of where indexing an antsImage doesn't work like indexing an array, and as far as I can tell there's no way to tell where the indexing starts. Should we at least make it possible to see where the indexing begins?
2015-03-16 16:47 GMT-04:00 stnava notifications@github.com:
i've learned more about this ... no resolution but here is an interesting example:
fi <- antsImageRead( getANTsRData("r16") ,2) cropped <- cropImage( fi ) rcropped<-resampleImage( cropped, dim(cropped)/2, 1 , 0 ) # not correct ( i think ) antsImageWrite( cropped , '/tmp/crop.nii.gz') cropread<-antsImageRead("/tmp/crop.nii.gz") rcropped2<-resampleImage( cropread, dim(cropped)/2, 1 , 0 ) # correct
these produced different results but should not ... @jeffduda
https://github.com/jeffduda @ntustison https://github.com/ntustison
any insight / guesses?
— Reply to this email directly or view it on GitHub https://github.com/stnava/ANTsR/issues/28#issuecomment-81928221.
— Reply to this email directly or view it on GitHub https://github.com/stnava/ANTsR/issues/28#issuecomment-81935510.
ok - i changed this behavior to use the origin rather than the index
fi <- antsImageRead( getANTsRData("r16") ,2)
cropped <- cropImage( fi )
d1<-decropImage( cropped , fi)
rcropped<-resampleImage( cropped, dim(cropped)/2, 1 , 0 )
upsam<-resampleImage( rcropped, dim(cropped), 1, 0 )
d2<-decropImage( upsam, fi )
the above shows "invertible" cropping resampling and decropping
not sure if this will fix other issues but it seems more consistent ....
Relevant to this conversation, I enabled indexing of antsImages without explicit indices, so something like img[2, , ] will get the second slice of an image. This returns a matrix or array, not an antsImage, but if you just need the voxel values you can use it.
2015-03-16 17:52 GMT-04:00 stnava notifications@github.com:
ok - i changed this behavior to use the origin rather than the index
fi <- antsImageRead( getANTsRData("r16") ,2) cropped <- cropImage( fi ) d1<-decropImage( cropped , fi) rcropped<-resampleImage( cropped, dim(cropped)/2, 1 , 0 ) upsam<-resampleImage( rcropped, dim(cropped), 1, 0 ) d2<-decropImage( upsam, fi )
the above shows "invertible" cropping resampling and decropping
not sure if this will fix other issues but it seems more consistent ....
— Reply to this email directly or view it on GitHub https://github.com/stnava/ANTsR/issues/28#issuecomment-81957671.
I am using cropImage: predlabel = cropImage(predlabel, predlabel, max(predlabel))
At this stage predlabel can be plotted, but it is already corrupt:
"> predlabel antsImage Pixel Type : float Pixel Size :
Dimensions : 32x49x38 Voxel Spacing: 2x2x2 Origin : -93 138.1172 -82 Direction : 1 0 0 0 -1 0 0 0 1 > predlabel[15,15,15] index not inside the image : [14, 14, 14] [1] NA"
After cropping, resampleImage is performed (within mrvnrfs, but I tried manually as well). There is no error but resampleImage produces a corrupt image, it cannot be plotted and getNeirghborhoodInMask is a matrix with 0 columns.
Cropping works fine if I use traditional code:
[1,] 0