【无标题】

下面展示一些 内联代码片

function [cluster] = labpcak(img,k)
% 表示对img图像在lab颜色空间的坐标进行pca投影后,对投影值采用k-means方法进行投影值分类,完成图像分割。
% img为rgb图像
% k带预期分割颜色的类数
% cluster为分类结果,其是k个三维数据叠加,每个三维数据为单个颜色分类结果
% [m,n] = size(img(:,:,1));
q = 0.35;p = 0.35;
[m,n] = size(img);
%rgb转lab  如果不转就是rgb分类
% lab = rgb2lab(img);
lab = double(img);
% l1 = reshape(lab(:,:,1),[m*n,1]);
% a1 = reshape(lab(:,:,2),[m*n,1]);
b1 = normalize(reshape(lab,[m*n,1]));
[tm1,tm2] = ndgrid(1:max(m,n));%加坐标的的,但是效果不好
c1 = normalize(reshape(tm1(1:m,1:n),[m*n,1]));
d1 = normalize(reshape(tm2(1:m,1:n),[m*n,1]));
%3维数据点投影至PCA第一主成分坐标轴上
% t=[l1 a1 b1 c1 d1];
% t=[l1 a1 b1 ];
t=[b1 q.*c1 q.*d1 ];
% [coeff,score,latent] = pca(t);
% B = score(:,2);
% B = b1+q.*c1+q.*d1;%PCA则沿第一主成分方向,直接加就是45度,直接去掉一个就是横平竖直
% B = b1+q.*c1+p.*d1;
B = b1;
% 对投影值k-means分类
[idx,C] = kmeans(B,k);
idx1 = reshape(idx,m,n);
cluster = zeros(m,n,k);
for i=1:1:k
    c = zeros(m,n);
    c(find(idx1==i))=1;
    cluster(:,:,i) = c.*double(img);
    figure;
    imshow(cluster(:,:,i),[]);
    title(num2str(i))
end
figure
imshow(idx1,[])
end



你可能感兴趣的:(计算机视觉,图像处理,人工智能)