我需要在rgb图像上使用kmeans
函数。算法的每个元素都需要3个维度,每个图像的每个通道都有一个维度。元素的数量将是图像的总像素数量。我需要在群集#5上使用kmeans
。K表示聚类和Matlab
所以这是我的尝试:
img = imread('mypic.jpg');
red = img(:,:,1);
green = img(:,:,2);
blue = img(:,:,3);
kmeans(red,5)
我不知道如果我正确或者不这样做。我有此错误:
??? Error using ==> plus
Integers can only be combined with integers of the same class, or scalar doubles.
Error in ==> kmeans>distfun at 704
D(:,i) = D(:,i) + (X(:,j) - C(i,j)).^2;
Error in ==> kmeans at 313
D = distfun(X, C, distance, 0);
Error in ==> mysegmentation at 9
kmeans(R,2)
谁能给我个忙吗?由于
是!这就是我需要的,一个numpixels x 3矩阵。我很难理解一点重塑的功能。该函数返回一个'size(img,1)* size(img,2)'x'size(img,3)'矩阵,对吧?你能解释一下吗?你在矩阵上放置了'R * G x B'?我很抱歉,但我很新的图像处理,我需要一些帮助:) – user1030373
img(1,1,:)的值是一个3元素向量,其中包含索引(1 ,1)。 flatImg(1,:)的值与img(1,1,:)的值相同。同样,img(1,2,:)中的3个元素与flatImg(2,:)中的3个元素相同。我们正在重新组织img矩阵的结构,将像素视为RGB值的向量,并忽略其空间关系。 – John
太好了,我明白了,我一点一点地理解它!如果我想加入2个维度(现在总共有5个维度),该怎么办?一个具有像素的行号,另一个具有列的编号。我怎样才能改变'flatImg'重塑?提前致谢。 – user1030373