将特征提取数据存储在矩阵中时的尺寸不匹配错误

时间:2017-02-12 15:09:10

标签: matlab matrix feature-extraction mismatch

我正在尝试将使用LBP提取的所有图像的特征存储在矩阵中 但它给了我这个错误:

  

订阅的分配维度不匹配。

     

fe1错误(第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的尺寸存在一些问题 请帮我解释一下代码 谢谢。 :)

2 个答案:

答案 0 :(得分:0)

A包含很少的二维矩阵,因此A需要是一个3D矩阵...

  1. A = zeros(255, length(Andry));修改为A = zeros(255, 255, length(Andry));
  2. A(:, i) = LBP(img);修改为A(:, :, i) = LBP(img);
  3. 我认为以下代码应该有效:

    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
    

答案 1 :(得分:0)

LBP函数返回255 * 255矩阵,而A是255 *(愤怒目录中的图像/文件数)矩阵。如果要为每个图像保存LBP结果,则应更改矩阵A的尺寸。