我正在尝试将使用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的尺寸存在一些问题 请帮我解释一下代码 谢谢。 :)
答案 0 :(得分:0)
A
包含很少的二维矩阵,因此A
需要是一个3D矩阵...
A = zeros(255, length(Andry));
修改为A = zeros(255, 255, length(Andry));
A(:, i) = LBP(img);
修改为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
答案 1 :(得分:0)
LBP函数返回255 * 255矩阵,而A是255 *(愤怒目录中的图像/文件数)矩阵。如果要为每个图像保存LBP结果,则应更改矩阵A的尺寸。