# Clustering of an image by taking into account the spatial context of each pixel (besides its intensity)

Hakim Benoudjit h.benoudjit at gmail.com
Mon Nov 23 19:19:39 EST 2015

Hi Jonas,

That's exactly what I've tried this week-end, by adding the (x, y) to
gray-level intensity and giving the matrix of 3-components vector as input
to k-means.
As for the normalization, I applied this formula to each column (intensity,
x, y): (value - mean) / std_dev.
But, even with this normalization step, adding the (x, y) coordinates will
influence the pixels on the left (resp. right) to be grouped together (See
http://imgur.com/HxfkRig and original image taken from
http://uk.mathworks.com/help/images/texture-segmentation-using-gabor-filters.html?refresh=true).

Maybe I will need to find another normalization to apply of the (intensity,
x, y) space.

Le lundi 23 novembre 2015 23:53:34 UTC, Jonas Wulff a écrit :
>
> Hi Hakim,
>
> Have you tried just adding the coordinates of a pixel to its features? For
> each pixel, the features would then be R,G,B,X,Y. From your description,
> that seems what you're looking for.
>
> So if you have an RGB image I (so that I.shape = (height,width,3)), you
> can do:
>
> y,x = np.mgrid[:height,:width]
> I_stacked = np.dstack((I,x,y))
> data = I_stacked.reshape((-1,5))
>
> ... and then use "data" as input to your clustering algorithm.
>
> You might want to scale / normalize the coordinates to fit the general
> range of your color values -- but in general, this should do what I think
> you're looking for.
>
> Cheers,
> -Jonas
>
>
>
>
>
> On Sat, Nov 21, 2015 at 2:23 AM, Hakim Benoudjit <h.ben... at gmail.com
> <javascript:>> wrote:
>
>> Hi Juan,
>>
>> Thanks for your answer, this seems to be a nice algorithm for the
>> denoising of speckle.
>> But actually I'm looking for an image clustering (segmentation) technique
>> instead (that would take into consideration the spatial context of pixels).
>>
>> Le samedi 21 novembre 2015 00:47:21 UTC, Juan Nunez-Iglesias a écrit :
>>>
>>> Hey Hakim,
>>>
>>> The right answer here depends on your ultimate goal. If you're after
>>> denoising, non-local means denoising (recently added to skimage) sounds
>>> like exactly what you're after.
>>>
>>> Juan.
>>>
>>> On Sat, Nov 21, 2015 at 11:28 AM, Hakim Benoudjit <h.ben... at gmail.com>
>>> wrote:
>>>
>>>> Hi Stéfan,
>>>>
>>>> What I'm looking for is a *spatial criteria* that encourages the *clustering
>>>> algorithm* (K-means or others) to group together similar *neighbouring
>>>> pixels* inside the same cluster. This will help avoid having
>>>> persistent noise inside a cluster.
>>>>
>>>> Le vendredi 20 novembre 2015 13:20:15 UTC, Hakim Benoudjit a écrit :
>>>>>
>>>>> Hi,
>>>>>
>>>>> Is there a clustering algorithm implemented in *scikit-image *that
>>>>> perform the image clustering by taking into account the *spatial
>>>>> context *of the clustered pixel (its neighbourhood), besides its *pixel
>>>>> brightness*?
>>>>>
>>>>> For the time being, I'm clustering images by reshaping them as vectors
>>>>> of pixels intensities distributions, and then performing the *K-means
>>>>> *or *Gaussian mixture models* implemented in *scikit-learn*. But, I'm
>>>>> looking for a image clustering technique implemented (or could be
>>>>> implemented) in *scikit-image *that would consider the neighbourhood
>>>>> of a pixel when classifying it.
>>>>>
>>>>> Thanks.
>>>>>
>>>> --
>>>> 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... at googlegroups.com.
>>>> To post to this group, send email to scikit... at googlegroups.com.
>>>> To view this discussion on the web, visit
>>>> .
>>>>
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>> --
>> 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... at googlegroups.com <javascript:>.
>> To post to this group, send email to scikit... at googlegroups.com
>> <javascript:>.
>> To view this discussion on the web, visit