Finding boundaries of kmeans clustering
5 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Hello,
For a project I'm using kmeans clustering to find color differences in an image. I'm using five different grayscale colors to categorise the colors in the image. I however need to find the boundaries of each grayscale color. So which rgb values are classified as grayscale 1, which rgb values are classified as grayscale 2, etc.. Are there any formulas or scripts to find these boundaries?
Thank you in advance.
Miel Achten
I'm using the following code:
rgbImage = imread('ISIC_0000041.jpg');
mask = imread('ISIC_0000041_segmentation.png');
he = combineRgbWithMask(rgbImage,mask); %formula to combine mask and rgbImage
lab_he = rgb2lab(he);
ab = lab_he(:,:,2:3);
nrows = size(ab,1);
ncols = size(ab,2);
ab = reshape(ab,nrows*ncols,2);
nColors = 5;
% repeat the clustering 3 times to avoid local minima
[cluster_idx, cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean', 'Replicates',3);
pixel_labels = reshape(cluster_idx,nrows,ncols);
imshow(pixel_labels,[]), title('image labeled by cluster index');
1 Commento
Jan
il 18 Dic 2018
Please do not post a question twice. See https://www.mathworks.com/matlabcentral/answers/436298-finding-boundaries-kmeans-clustering . This confuses the readers and wastes time, if someone posts an answer, which has been given already. I recommend to delete one of the threads.
Risposte (1)
the cyclist
il 18 Dic 2018
xy1 = [randn(50,1) randn(50,1)];
xy2 = [randn(50,1)+5 randn(50,1)];
xy3 = [randn(50,1) randn(50,1)+5];
[idx,c] = kmeans([xy1; xy2; xy3],3)
figure
hold on
plot(xy1(:,1),xy1(:,2),'ro')
plot(xy2(:,1),xy2(:,2),'go')
plot(xy3(:,1),xy3(:,2),'bo')
voronoi(c(:,1),c(:,2))
The code above will just plot the boundaries, but you can get output from the voronoi command that will identify the endpoints of the line segments.
0 Commenti
Vedere anche
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!