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

erode/dilate offset integers by -1/+1 #29

Open
thouis opened this issue Feb 21, 2013 · 5 comments
Open

erode/dilate offset integers by -1/+1 #29

thouis opened this issue Feb 21, 2013 · 5 comments

Comments

@thouis
Copy link

thouis commented Feb 21, 2013

Booleans are fine.

>>> mahotas.erode(np.array([[0,0,0,1,1,1],[0,0,0,1,1,1],[0,0,0,1,1,1],], dtype=np.bool))
array([[False, False, False, False,  True,  True],
       [False, False, False, False,  True,  True],
       [False, False, False, False,  True,  True]], dtype=bool)
>>> mahotas.dilate(np.array([[0,0,0,1,1,1],[0,0,0,1,1,1],[0,0,0,1,1,1],], dtype=np.bool))
array([[False, False,  True,  True,  True,  True],
       [False, False,  True,  True,  True,  True],
       [False, False,  True,  True,  True,  True]], dtype=bool)
>>> mahotas.dilate(np.array([[0,0,0,1,1,1],[0,0,0,1,1,1],[0,0,0,1,1,1],], dtype=np.int32))
array([[1, 1, 2, 2, 2, 2],
       [1, 1, 2, 2, 2, 2],
       [1, 1, 2, 2, 2, 2]], dtype=int32)
>>> mahotas.erode(np.array([[0,0,0,1,1,1],[0,0,0,1,1,1],[0,0,0,1,1,1],], dtype=np.int32))
array([[-1, -1, -1, -1,  0,  0],
       [-1, -1, -1, -1,  0,  0],
       [-1, -1, -1, -1,  0,  0]], dtype=int32)
>>> mahotas.__version__
'0.9.7'
>>> 
@luispedro
Copy link
Owner

What did you expect the result to be?

The default is that the structuring element is::

np.ones([
       [0,1,0],
       [1,1,1],
       [0,1,0]])

It's late in the day, so I could be misthinking this, but it seems that greyscale erosion should result in zero-valued areas to become -1.

@thouis
Copy link
Author

thouis commented Feb 21, 2013

I was confused. However, it's not clear from the docs the difference
between the structuring element neighborhood and structuring element value.
Is the SE neighborhood all nonzero entries, or are they denoted some other
way?

@luispedro
Copy link
Owner

Ok, I think the problem might be the documentation.

mahotas uses the pymorph convention (I maintain pymorph, but I didn't start it; so, I inherited this convention): the structuring element is its values, except that the lowest possible value (-2147483648 in np.int32) indicates minus infinity.

I am not sure I completely buy this convention, but I adopted it.

@thouis
Copy link
Author

thouis commented Feb 22, 2013

Ok. This was partly me not understanding the generalization of binary
erosion to grayscale, having only used it with 0-height structuring
elements. You might document that as well, for confused people like me.

I'll try to submit a PR to the docs sometime next week, if you don't get to
it.

@ErichZimmer
Copy link

I am not entirely sure my comment fits here, but when I perform phase separation through erosion and dilation, I get completely different results from scipy. Further testing with particle image velocimetry image pairs yields results that were not suitable for further processing. Perhaps, following a convention like scipy would be better? Or am I simply misinterpreting the results and need to scale them in some fashion?

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

No branches or pull requests

3 participants