如何拍摄图像文件,然后将其转换为矢量以应用k均值函数。我想将图像分为两种类型。因此需要在向量中存储图像,然后可以应用k均值算法。所以任何人都可以帮助我如何实现这一目标?
>> mkdir('D:\Matlab\appdata\Data','Ads');
Warning: Directory already exists.
>> Dir='D:\Matlab\appdata\Data\Ads\*.jpg';
>> Imgs=dir(Dir);
>> for j=1:length(Imgs)
l1=imread(Imgs(j).name);
data=imresize(l1,[500 600]);
mg=rgb2gray(data);
imwrite(mg,['D:\Matlab\appdata\Data\Images\img',num2str(0),'.jpg']);
end
>> for j=1:length(Imgs)
l1=imread(Imgs(j).name);
data=imresize(l1,[500 600]);
mg=rgb2gray(data);
imwrite(mg,['D:\Matlab\appdata\Data\Images\img',num2str(j),'.jpg']);
end
>> direc=='D:\Matlab\appdata\Data\Images\*.jpg';
>> vector=reshape(imgg(1)',1,[]);
>> imgV=reshape(imgg(1)',[],1);
>> plotv(imgV,'-');
??? Error using ==> plotv at 22
Matrix must have at least 2 rows.
>> v=reshape(imgg(1)',2,50);
??? Error using ==> reshape
To RESHAPE the number of elements must not change.
>> imgV
imgV =
name: 'img0.jpg'
date: '31-May-2016 14:37:48'
bytes: 53732
isdir: 0
datenum: 7.3648e+005
>> plotv(imgV,'-')
??? Error using ==> plotv at 22
Matrix must have at least 2 rows.
在这段代码中,imgV是一个结构,我想存储一个向量,将它传递给K表示。
答案 0 :(得分:1)
您需要读取图像,然后将其重新整形为列矢量。如果它是RGB图像,您将希望它是[M*N x 3]
,如果它是灰度图像,您将希望它是[M*N x 1]
。 kmeans
会将输入的每一行视为一个单独的数据点。
执行此操作的一般方法是:
nGroups = 2;
reshaped = reshape(img, [], size(img, 3));
groups = kmeans(reshaped, nGroups);