label_boundaries problem with ndim = label_img.ndim

358 views
Skip to first unread message

Arctic_python

unread,
Dec 2, 2015, 12:00:17 AM12/2/15
to scikit-image
Hello,
I am trying to label the boundaries of an image that was segmented and labelled. I am doing something wrong because the code below returns

auroura_bound=segmentation.find_boundaries(props,connectivity=1,mode='thick',background=0)
  File "/usr/local/lib/python3.4/dist-packages/skimage/segmentation/boundaries.py", line 148, in find_boundaries
    ndim = label_img.ndim
AttributeError: 'list' object has no attribute 'ndim'

  1. label_image=measure.label(g_median_bin, background=0) # g_median_bin is a binary image
  2. label_image=label_image+1 # adjusted from -1 to 0
  3. props = measure.regionprops(label_image,intensity_image=g_median_bin) # creating a regionprops object
  4. label_bound=segmentation.find_boundaries(props,connectivity=1,mode='thick',background=0) # finding boundaries
  5. boundaries=segmentation.mark_boundaries(g_median,label_bound)



label_bound=segmentation.find_boundaries(props,connectivity=1,mode='thick',background=0)
  File "/usr/local/lib/python3.4/dist-packages/skimage/segmentation/boundaries.py", line 148, in find_boundaries
    ndim = label_img.ndim
AttributeError: 'list' object has no attribute 'ndim'

I think line 4. is redundant and not required for mark_boundary?!




Stefan van der Walt

unread,
Dec 2, 2015, 12:09:34 AM12/2/15
to scikit...@googlegroups.com
On 2015-12-01 21:00:16, Arctic_python <ejs...@alaska.edu> wrote:
> ndim = label_img.ndim
> AttributeError: 'list' object has no attribute 'ndim'
>
> 1. label_image=measure.label(g_median_bin, background=0) # g_median_bin
> is a binary image

That does not seem to be true, given the error message.

Stéfan

Eyal Saiet

unread,
Dec 2, 2015, 1:33:27 AM12/2/15
to scikit...@googlegroups.com
Stefan,
I do not understand what is not true about the label_image object.
bellow is the code, in addition I added a plot of the label_image object.


  1. label_image=measure.label(g_median_bin, background=0)
  2. label_image +=1
  3. plt.figure()
  4. plt.imshow(label_image,cmap=plt.cm.gray,interpolation='nearest',origin='lower')
  5. plt.title('label_image')
  6. plt.show()
  7. props = measure.regionprops(label_image,intensity_image=g_median_bin)
  8. label_bound=segmentation.find_boundaries(props,connectivity=1,mode='thick',background=0)
  9. boundaries=segmentation.mark_boundaries(g_median,label_bound)



Inline image 1


--
You received this message because you are subscribed to a topic in the Google Groups "scikit-image" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/scikit-image/PwmizxFahYE/unsubscribe.
To unsubscribe from this group and all its topics, send an email to scikit-image...@googlegroups.com.
To post to this group, send an email to scikit...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-image/87zixt8mie.fsf%40berkeley.edu.
For more options, visit https://groups.google.com/d/optout.



--
Eyal Saiet

Project manager
Remote sensing and in-situ measurements

Geophysical Institute 
University of Alaska Fairbanks
Fairbanks, AK 99775

Juan Nunez-Iglesias

unread,
Dec 2, 2015, 2:38:51 AM12/2/15
to scikit...@googlegroups.com
Hi Eyal,

You are passing a list of regionprops (props, in your code) to "find_boundaries", whereas it expects an array: a single image of labeled objects (label_img, in your code).

Juan.

--
You received this message because you are subscribed to the Google Groups "scikit-image" group.
To unsubscribe from this group and stop receiving emails from it, send an email to scikit-image...@googlegroups.com.
To post to this group, send email to scikit...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/scikit-image/CA%2BysReAKgzF%3DJXEjz7hti8sz0EBS_Hr%3DPaFWTxN6FV-GtROB0w%40mail.gmail.com.

Eyal Saiet

unread,
Dec 2, 2015, 2:47:11 AM12/2/15
to scikit...@googlegroups.com
thanks Juan, I have tried that too:
    1. label_image=measure.label(g_median_bin, background=0)
    2. label_image +=1
    3. plt.figure()
    4. plt.imshow(label_image,cmap=plt.cm.gray,interpolation='nearest',origin='lower')
    5. plt.title('label_image')
    6. plt.show()
    7. props=measure.regionprops(label_image,intensity_image=g_median_bin)
    1. label_bound=segmentation.find_boundaries(label_image,connectivity=1,mode='thick',background=0)
    2. boundaries=segmentation.mark_boundaries(g_median,label_bound)

    Traceback (most recent call last):
      File attributes_thrash.py", line 127, in <module>
        boundaries=segmentation.mark_boundaries(g_median,label_bound)#,color=(1,0,0), outline_color=None, mode='outer', background_label=0)
      File "/usr/local/lib/python3.4/dist-packages/skimage/segmentation/boundaries.py", line 213, in mark_boundaries
        background=background_label)
      File "/usr/local/lib/python3.4/dist-packages/skimage/segmentation/boundaries.py", line 156, in find_boundaries
        max_label = np.iinfo(label_img.dtype).max
      File "/usr/local/lib/python3.4/dist-packages/numpy/core/getlimits.py", line 254, in __init__
        raise ValueError("Invalid integer data type.")
    ValueError: Invalid integer data type.

    Process finished with exit code 1



    For more options, visit https://groups.google.com/d/optout.

    Juan Nunez-Iglesias

    unread,
    Dec 2, 2015, 3:00:14 AM12/2/15
    to scikit...@googlegroups.com
    You don't need to find the boundaries manually before calling mark_boundaries. From the docstring of mark_boundaries:


    Parameters
    ----------
    image : (M, N[, 3]) array
        Grayscale or RGB image.
    label_img : (M, N) array of int
        Label array where regions are marked by different integer values.

    Currently, you are passing a boolean array to a function that expects an integer array, which is why it's failing.

    In general, it's a good idea to try typing "help(function_name)" when things are failing to make sure that you are passing in the right information to the function you're using! (You can then press "q" to exit help.)

    I hope that, erm, helps! =)

    Juan.

    Reply all
    Reply to author
    Forward
    0 new messages