2017-01-09 11 views
0

Я работаю над проектом, который выполняет сегментацию путем кластеризации k-mean. Я должен применить кластеризацию K-средних для K = [2, 3, 4, ... K-max] и рассчитать среднее расстояние каждой точки до ее центра кластера. Кроме того, я должен определить K *, для которого это расстояние не сильно меняется при переключении на K * + 1. Kmax = 20.Как сегментировать цветное изображение с помощью кластеризации K-типа?

Насколько я записал код ниже. Моя первая забота возникла, я сделал что-то не так?

I = imread('image'); 
imshow(I); 

Id = im2double(I); 

red = I(:,:,1); 
green = I(:,:,2); 
blue = I(:,:,3); 
[c, r] = meshgrid(1:size(I,1), 1:size(I,2)); 
X = [red(:) green(:) blue(:) red(:) c(:)]; 


K  = 2:20;      %Cluster Numbers 
[IDX, C, SUMD] = kmeans(X, K); 
ave_dist(K) = sum(SUMD(:))/number_of_pixels_in_image; 

1) Как я собираюсь построить среднее расстояние до центров кластеров как функцию K?

2) Как определить наименьший K *, для которой

`| ave_dist(K*) - ave_dist(K*+1) |< THR_K. THR_K = 100` 

Спасибо.

+0

Matlab? Можете добавить тег. – MSalters

+0

да, спасибо, сэр, почему-то я забыл, что .. – aod

+0

Посмотрите на [ЭТОТ ВОПРОС] (http://stackoverflow.com/questions/32034344/accurately-detect-color-regions-in-an- image-using-k-means-clustering? rq = 1) –

ответ

0

первого вопрос: Вы строите вектор ave_dist, который можно использовать непосредственно с plot(ave_dist)

2 вопросом: Вы можете использовать find для этого: index = find(abs(ave_dist(1:end-1)-ave_dist(2:end)) <= 100,1,'first')

+0

Мне нужно найти график или диаграмму, которая должна быть в трехмерной векторной системе. например https://www.mathworks.com/help/matlab/ref/contour3.html, но он должен отображать среднее расстояние до центров кластеров. и для первого вопроса: я должен был забыть, что также должно быть пороговое значение для k равно 100 – aod

+0

Если это не то, что вы хотели, мне все еще немного неясно, что вам нужно. Не могли бы вы привести пример? – flawr

+0

Я могу объяснить это снова. У меня есть изображение с доминирующими цветами: красный, зеленый, синий, желтый и белый. Мне нужно извлечь компоненты R, G и B изображения, которые я тогда присваивал матрице данных. Для K = 2: Kmax (Kmax = 20) и должна использовать функцию kmeans для получения индексов кластера каждого пикселя (IDX) и внутриклассовых сумм расстояний точка-центроид (SUMD). Затем появляются мои 1-й и 2-й вопросы. K * автоматически из вектора ave_dist, который не может быть найден с помощью функции ave_dist. – aod