blob detection and dust removal

234 views
Skip to first unread message

Raphael

unread,
Apr 30, 2016, 2:02:51 AM4/30/16
to scikit-image
hi folks, 

  Got a problem removing dust and identifying blobs/crytals. Kindly see my code below


from __future__ import division, print_function
import matplotlib.pyplot as plt
import numpy as np
from skimage import io, feature, color, measure, draw, img_as_float, exposure
from skimage.filters.rank import median
from skimage.feature import blob_dog, blob_log, blob_doh
from skimage.morphology import disk

#raw image
image_raw = img_as_float((io.imread('/home/raphael/Documents/ScikitImage/Run 4-2_00061cropped.tif'))) (RawImage.tif attached)
plt.imshow(image_raw)

#converted to grayscale

img_gray = color.rgb2gray(io.imread('/home/raphael/Documents/ScikitImage/Run 4-2_00061cropped.tif'))
plt.imshow(image_gray)


#applied median filter to take out small dust particles. But the big dust particle on the top right corner still persists (see median1.png attached)
img_filtered=median(img_gray,disk(10))
plt.imshow(img_filtered)


#applied  adapthist to make image more clearer (see adaptive.png)

img_equalized=exposure.equalize_adapthist(img_filtered)
plt.imshow(img_equalized)

#trying to detect the crystals/blobs. I followed the example here http://scikit-image.org/docs/dev/auto_examples/features_detection/plot_blob.html But this gave an error. matplotlib was not happy with the data type
blobs_doh = blob_doh(img_equalized,  max_sigma=30, threshold=.1)
plt.imshow(blobs_doh)

My problems are:

1. I could not get the dust particle out especially the really big one on the top right. How can I get it out?

2. I could not detect the crystals/blobs in the image using blob_doh

Any ideas/suggestions is highly appreciated.  Thank you!
median1.png
Adaptive.png
RawImage.tif

Vighnesh Birodkar

unread,
May 1, 2016, 4:48:13 AM5/1/16
to scikit-image
Hello Raphael

What error did you get ? Can you post the traceback or the output after blob detection ?

Thanks
Vighnesh

Raphael

unread,
May 1, 2016, 4:19:28 PM5/1/16
to scikit-image

hi Vighnesh,

  This is the error I got :

--------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-73-121959b15938> in <module>()
      1 blobs_doh = blob_doh(img_equalized,  max_sigma=30, threshold=.1)
----> 2 plt.imshow(blobs_doh)

/usr/lib/python3/dist-packages/matplotlib/pyplot.py in imshow(X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, hold, **kwargs)
   2890                         vmax=vmax, origin=origin, extent=extent, shape=shape,
   2891                         filternorm=filternorm, filterrad=filterrad,
-> 2892                         imlim=imlim, resample=resample, url=url, **kwargs)
   2893         draw_if_interactive()
   2894     finally:

/usr/lib/python3/dist-packages/matplotlib/axes.py in imshow(self, X, cmap, norm, aspect, interpolation, alpha, vmin, vmax, origin, extent, shape, filternorm, filterrad, imlim, resample, url, **kwargs)
   7300                        filterrad=filterrad, resample=resample, **kwargs)
   7301 
-> 7302         im.set_data(X)
   7303         im.set_alpha(alpha)
   7304         self._set_artist_props(im)

/usr/lib/python3/dist-packages/matplotlib/image.py in set_data(self, A)
    428         if (self._A.ndim not in (2, 3) or
    429             (self._A.ndim == 3 and self._A.shape[-1] not in (3, 4))):
--> 430             raise TypeError("Invalid dimensions for image data")
    431 
    432         self._imcache = None

TypeError: Invalid dimensions for image data


I also printed
blobs_doh and discovered it was an empty array..Don't know why it should be empty...

Thank you

Vighnesh Birodkar

unread,
May 1, 2016, 9:27:54 PM5/1/16
to scikit-image
Hello Raphael

The error here is because the output of blob_doh in a numpy array of blobs, it is not an image meant for display. If you notice the example the blobs are being drawn separately inside the for loop. If no blobs are being detected, you can adjust the threshold. Lowering the threshold will make the function detect more blobs. It is clarified futher in the documentation

I was able to detect one blob in your image with the default threshold value. See:

Find the result attached.

Thanks
Vighnesh

On Saturday, April 30, 2016 at 2:02:51 AM UTC-4, Raphael wrote:
dust.png

Raphael Okoye

unread,
May 2, 2016, 12:13:27 AM5/2/16
to scikit...@googlegroups.com
hi Vighnesh,

 Thanks a bunch!! I see my error now.

Actually that blob you detected a dust particle. Which  operation would you suggest to erase it? I tried morphological erosion but it doesn't take it away.

Thanks
Raphael

--
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/VtkzL9ZCY6Q/unsubscribe.
To unsubscribe from this group and all its topics, 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/0fd22d80-4549-470f-b61b-f48d9a8d66f5%40googlegroups.com.

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

Vighnesh Birodkar

unread,
May 2, 2016, 12:27:52 AM5/2/16
to scikit-image
Hi

That really depends on your application. What's your motivation for removing these dust particles ? How are these images going to be processed further ?

Thanks
Vighnesh

Raphael Okoye

unread,
May 2, 2016, 1:07:29 AM5/2/16
to scikit...@googlegroups.com
hi Vighnesh,

 Further processing involves getting the size and positions of real crystals (I want to use the positions to estimate the pair correlation function and then using the pair correlation function to estimate the structure factor) The image comes from a sequence of time lapse images. There are dust particles of various sizes in the images so if they are not eliminated, a false structure factor will be determined.  The median filter took care of the very little ones but didn’t work for the bigger ones.

Thanks a lot.

Raphael

Vighnesh Birodkar

unread,
May 2, 2016, 5:30:58 AM5/2/16
to scikit...@googlegroups.com
How do you plan to find the position of the real crystals ? Maybe the function you will use to find the original crystals will take a mask argument ?

Raphael Okoye

unread,
May 2, 2016, 3:34:45 PM5/2/16
to scikit...@googlegroups.com
hi Vighnesh

I plan to use this guy http://scikit-image.org/docs/dev/auto_examples/plot_regionprops.html. The documentation  on regionprops (http://scikit-image.org/docs/dev/api/skimage.measure.html#regionprops) says I can get parameters such as co-ordinate positions, equivalent diameter etc

 But first I need to think of a way to exclude the dust particles, that is the main challenge.

Thanks
Raphael

Vighnesh Birodkar

unread,
May 2, 2016, 4:54:28 PM5/2/16
to scikit...@googlegroups.com
regionprops takes a labelled image as input. The question still remains, how will you generate the image in which the interested regions are labelled accordingly. You need to make that part of your algorithm exclude the dust particles.

Raphael Okoye

unread,
May 3, 2016, 12:48:05 AM5/3/16
to scikit...@googlegroups.com
hi Vighnesh,


Thats an interesting question..never really given it a thought. I think this http://scikit-image.org/docs/dev/auto_examples/plot_label.html or the help in section  3.3.4.1.2 given here http://www.scipy-lectures.org/packages/scikit-image/ might work. As how to create the mask image to mask dust particles, I'm currently not sure how to implement that in scikit image.

Thanks a lot.

3.3.4.1.2


Vighnesh Birodkar

unread,
May 13, 2016, 7:43:07 PM5/13/16
to scikit-image
Hello

Sorry for not getting back sooner. As mentioned in the scipy-lectures website you can use measure.label and set the dust particle pixels to 0 and they will be ignored as the background

Raphael Okoye

unread,
May 17, 2016, 2:19:59 AM5/17/16
to scikit...@googlegroups.com
No worries...thanks for your input man..I appreciate 

Reply all
Reply to author
Forward
0 new messages