how to pass image to function after k-means?
조회 수: 1(최근 30일)
표시 이전 댓글
Teshan Rezel 2020년 1월 28일
댓글: Teshan Rezel 2020년 1월 29일
I want to perform a watershed transform on an image after performing a k-means clustering, below is my code.
img = imread('myimage.jpg');
lab_img = rgb2lab(img);
ab = lab_img(:,:,2:3);
a = lab_img(:,:,2);
b = lab_img(:,:,3);
ab = im2single(ab);
nColours = 2;
k = 20;
pixelLabels = imsegkmeans(ab, nColours, "NumAttempts", k);
title('Image Labeled by Cluster Index');
parfor i = 1 : k
maskID = strcat('mask', i);
clusterID = strcat('cluster', i);
maskID = pixelLabels == i
clusterID = img.*uint8(maskID);
title(['Objects in Cluster ', num2str(i)]);
My question is: how can I pass the result of the k-means to the watershed function? I tried to pass "clusterID" and "cluster20" but it returned an error.
Any help would be appreciated, thanks in advance!
댓글 수: 3
Adam 2020년 1월 28일
Well, it's a parfor loop so the final iteration is not guaranteed to be k = 20.
I can't remember off the top of my head, but if you declare clusterID before the parfoor loop then it may still exist after it, though I doubt in a satisfactory way if it does, as there is no guarantee which result will complete last and I suspect you would get a warning or error on the variable.
Simplest option would be to store the results in a 3d array so you have all of them after the parfor loop.
Image Analyst 2020년 1월 29일
댓글 수: 1
Find more on k-Means and k-Medoids Clustering in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!Start Hunting!