读取图像文件并在matlab中转换为矢量

时间:2016-05-30 15:16:22

标签: matlab

如何拍摄图像文件,然后将其转换为矢量以应用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表示。

1 个答案:

答案 0 :(得分:1)

您需要读取图像,然后将其重新整形为列矢量。如果它是RGB图像,您将希望它是[M*N x 3],如果它是灰度图像,您将希望它是[M*N x 1]kmeans会将输入的每一行视为一个单独的数据点。

执行此操作的一般方法是:

nGroups = 2;
reshaped = reshape(img, [], size(img, 3));
groups = kmeans(reshaped, nGroups);