Ошибка MATLAB: функция "subsindex" не определена для значений класса "struct"

Я пробовал эти команды:

im=imread('untitled_test1.jpg');
im1=rgb2gray(im);
im1=medfilt2(im1,[15 15]);
BW = edge(im1,'sobel'); 

msk=[0 0 0 0 0;
 0 1 1 1 0;
 0 1 1 1 0;
 0 1 1 1 0;
 0 0 0 0 0;];
B=conv2(double(BW),double(msk));

Ibw = im2bw(B);
CC = bwconncomp(Ibw); %Ibw is my binary image
stats = regionprops(CC,'pixellist');

% pass all over the stats
for i=1:length(stats),
size = length(stats(i).PixelList);
% check only the relevant stats (the black ellipses)
if size >150 && size < 600 
    % fill the black pixel by white    

    x = round(mean(stats(i).PixelList(:,2)));
    y = round(mean(stats(i).PixelList(:,1)));
    Ibw = imfill(Ibw, [x, y]);

else
    Ibw([CC.PixelIdxList{i}]) = false;
end;
end;

(здесь у меня есть другие командные строки, но я думаю, что проблема не в них.)

labeledImage = bwlabel(binaryImage, 8);     % Label each blob so we can make measurements of it
blobMeasurements = regionprops(labeledImage, Ibw, 'all');   
numberOfBlobs = size(blobMeasurements, 1); 

я получил это сообщение об ошибке:

??? Error using ==> subsindex
Function 'subsindex' is not defined for values of class 'struct'.

Error in ==> test2 at 129
numberOfBlobs = size(blobMeasurements, 1);

что происходит?

2 ответов


вы получаете эту ошибку, потому что вы создали переменная называется "размер", который тени встроенный функции в размере. Вместо вызова функции вычислить numberOfBlobs, MATLAB вместо этого пытается индекс переменной, используя конструкцию blobMeasurements как индекс (который не работает, как показывает сообщение об ошибке).

В общем случае вы не должны давать переменной или функции имя уже существующего функция (если вы знаю, что ты делаешь). Просто измените имя переменной в коде на что-то другое, кроме "size", введите команду clear size чтобы удалить старую переменную размера из рабочей области и повторно запустить код.


ваше сообщение об ошибке говорит вам, что ошибка в numberOfBlobs = size(blobMeasurements, 1);. subsindex скорее всего используется в size(..., 1) для доступа к этим элементам.

Я предполагаю, что blobMeasurements - это массив структур (или одна структура), для которых эта операция не полностью определена.

почему бы вам не использовать length команда, как и раньше? Это сработало немного раньше в вашем коде.