2017-02-12 39 views
-1

我试图将使用LBP提取的所有图像的特征存储在矩阵中。
但它给我这个错误:将特征提取数据存储在矩阵中时的尺寸不匹配错误

Subscripted assignment dimension mismatch.

Error in fe1 (line 10) A(i, :) = LBP(img);

这里是我的代码:

fe.m

clc; 
clear all; 

pat = 'D:/modified database'; 
Angry = dir([pat '/anger']); 
Andry = Angry(3:end); 
A = zeros(255, length(Andry)); 

for i = 1:length(Andry) 
    img = imread(Andry(i).name); 
    A(:, i) = LBP(img); 
end 

display(A); 

LBP.m

function LBP0 = LBP(I) 
    I = imresize(I, [256,256]); 
    I = rgb2gray(I); 
    m = size(I,1); 
    n = size(I,2); 
    for i = 2:m-1 
     for j = 2:n-1 
      J0 = I(i,j); 
      I3(i-1,j-1) = I(i-1,j-1)>J0; 
      I3(i-1,j) = I(i-1,j)>J0; 
      I3(i-1,j+1) = I(i-1,j+1)>J0; 
      I3(i,j+1) = I(i,j+1)>J0; 
      I3(i+1,j+1) = I(i+1,j+1)>J0; 
      I3(i+1,j) = I(i+1,j)>J0; 
      I3(i+1,j-1) = I(i+1,j-1)>J0; 
      I3(i,j-1) = I(i,j-1)>J0; 
      LBP0(i,j) = I3(i-1,j-1)*2^7 + I3(i-1,j)*2^6 + I3(i-1,j+1)*2^5 + I3(i,j+1)*2^4 + I3(i+1,j+1)*2^3+I3(i+1,j)*2^2 + I3(i+1,j-1)*2^1 + I3(i,j-1)*2^0; 
     end 
    end 
end 

我认为有一些问题与矩阵A的尺寸。
请帮我编码。
谢谢。 :)

回答

0

A hols几个二维矩阵,所以A需求为3D矩阵...

  1. 修改A = zeros(255, length(Andry));A = zeros(255, 255, length(Andry));
  2. 修改A(:, i) = LBP(img);到​​

我认为下面的代码应该可以工作:

fe.m

clc; 
clear all; 

pat = 'D:/modified database'; 
Angry = dir([pat '/anger']); 
Andry = Angry(3:end); 
A = zeros(255, 255, length(Andry)); 

for i = 1:length(Andry) 
    img = imread(Andry(i).name); 
    A(:, :, i) = LBP(img); 
end 

display(A); 

如果图像具有不同的尺寸,可以使用cell array代替3D矩阵:

fe.m

clc; 
clear all; 

pat = 'D:/modified database'; 
Angry = dir([pat '/anger']); 
Andry = Angry(3:end); 
A = cell(1, length(Andry)); %Allocate cell array 

for i = 1:length(Andry) 
    img = imread(Andry(i).name); 
    A{i} = LBP(img); %Store LBP(img) in index i of cell array A 
end 

%Use loop to display cell array elements. 
for i = 1:length(A) 
    display(A{i}); 
end 
+0

我仍然得到相同的错误在线A(:,:,i)= LBP(img); – Tejashree

+0

所有图像的LBP输出尺寸是否必须相同? – Tejashree

+0

如果大小不同,可以使用单元阵列而不是3D矩阵。 – Rotem

0

LBP函数返回一个255 * 255基体而A是255 *(你的Angry dir中的图像/文件数量)矩阵。如果你想保存每个图像的LBP结果,你应该改变矩阵A的尺寸。