2017-02-12 40 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的尺寸。