colour image segmentation using k means

FIR (view profile)

on 16 Jan 2013
Latest activity Answered by Spandan Tiwari

on 11 Oct 2013

Thorsten (view profile)

I have a rgb image and have converted into hsv colour space,with k=2,now i want to segment the image as shown below,please tell what process to perform next

http://imgur.com/3qm61

Tags

Thorsten (view profile)

on 16 Jan 2013

```I = imread('./../../Downloads/planes.png');
I = im2double(I(1:320, 1:478, :));
HSV = rgb2hsv(I);
H = HSV(:,:,1); H = H(:);
S = HSV(:,:,2); S = S(:);
V = HSV(:,:,3); V = V(:);
idx = kmeans([H S V], 2);
imshow(ind2rgb(reshape(idx, size(I,1), size(I, 2)), [0 0 1; 0 0.8 0]))
```

FIR

FIR (view profile)

on 17 Jan 2013

Thanks thorsten what does [0 0 1; 0 0.8 0] specify

if i do

A=ind2rgb(reshape(idx,size(I,1),size(I,2),[0 0 1;0 0.8 0])); i get error Error using ==> reshape Size arguments must be integer scalars.

Error in ==> Untitled at 17 A=ind2rgb(reshape(idx,size(I,1),size(I,2),[0 0 1;0 0.8 0]));

can i change the background colour green to other colour say magneta or red

FIR

FIR (view profile)

on 17 Jan 2013

for the following Image i changed k=5,but why i get only two colours

http://imgur.com/y0KM1

Walter Roberson

Walter Roberson (view profile)

on 17 Jan 2013

[0 0 1; 0 0.8 0] is a color table with two entries: bright blue, and medium green. If you can come up with the RGB shade you want, change the 0 0.8 0 to that RGB triple.

If you have 5 clusters you would want 5 entries in the color table.

Spandan Tiwari (view profile)

on 11 Oct 2013

Another alternative could be to use multi-level Otsu's thresholding to get the segmentation. You can use the function multithresh in the Image Processing Toolbox to do that.

Otsu's method and k-means clustering have equivalent objective functions (minimize within-class variance). The following paper discusses this relation:

Dongju Liu, Jian Yu, " Otsu Method and K-means ," Vol. 1, pp.344-349, Ninth International Conference on Hybrid Intelligent Systems, 2009.

Image Analyst (view profile)

on 16 Jan 2013

Assuming you set k=2 and did the kmeans like you said and is shown in this example, I don't know what you want to do next. You haven't said. The most typical thing to do next is to call bwlabel() or bwconncomp() followed by regionprops to make various measurements (such as area) on the regions. I can be more specific if you get more specific.

Image Analyst

Image Analyst (view profile)

on 17 Jan 2013

I thought you had already done that part because you said " have converted into hsv colour space,with k=2" and you showed an image that you had created. Converted is past tense, meaning that it happened in the past. Was that wrong? Did you not convert (classify) the image yet and so you needed Thorsten's code to do it for you?

FIR

FIR (view profile)

on 17 Jan 2013

i actually meant last 2 lines

SAM

SAM (view profile)

on 11 Oct 2013

Assuming you set k=2 and did the kmeans like you said and is shown in this example, I don't know what you want to do next. You haven't said. The most typical thing to do next is to call bwlabel() or bwconncomp() followed by regionprops to make various measurements (such as area) on the regions. I can be more specific if you get more specific.

can you please tell me how can i calculate the area...

Join the 15-year community celebration.

Play games and win prizes!

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi