Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dimensions from image.mean() or other across images methods & image.squeeze() functionality #287

Open
kr-hansen opened this issue Apr 23, 2016 · 0 comments

Comments

@kr-hansen
Copy link

I was interested to know why when an across images method is applied, such as image.mean(), image.max(), or image.std(), that the final dimensions are left as (1, dim1, dim2), rather than squeezing out the first singleton dimension? I ran into a couple bumps from this functionality.

In the registration tutorials, to create a reference, .toarray() is always used. I'm guessing because it is assumed the tutorials are being done in local mode. toarray() squeezes out these extra dimensions.

When generating my own reference as a mean, image.mean() provides this additional dimension so that in and of itself does not work as a reference because the dimensions don't match. I attempted to do a image.squeeze() to fix this, but it didn't work, as it only works from [1:] in lines 240-245 of thunder/images.py:

def squeeze(self):
"""
Remove single-dimensional axes from images.
"""
axis = tuple(range(1, len(self.shape) - 1)) if prod(self.shape[1:]) == 1 else None
return self.map(lambda x: x.squeeze(axis=axis))

Is there a reason that thunder is pushing/forcing a toarray() call to successfully squeeze out these dimensions? Would it be appropriate to have these functions that apply a function across all images simply return the array with a squeeze() call built in? Otherwise, could we alter images.squeeze() to remove that first singleton dimension?

I'd be happy to submit a pull request to try and implement this, but I wanted to understand the rationale behind why toarray() is currently the only way to squeeze out that dimension and images.squeeze() doesn't work that way, or even the condensing functions themselves (images.mean(), images.std(), etc...). That way it can be implemented in the most beneficial manner. I think simply altering images.squeeze() would be the simplest to change from a pull-request point of view.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant