2012-04-08 28 views
6

tôi đã cố gắng các lệnh này:MATLAB lỗi: Chức năng 'subsindex' không được định nghĩa cho các giá trị của lớp '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; 

(ở đây tôi có một dòng lệnh, nhưng tôi đoán vấn đề không phải là vì trong số họ .)

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

tôi đã thông báo lỗi này:

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

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

gì đang xảy ra vậy?

Trả lời

17

Bạn đang nhận lỗi rằng vì bạn đã tạo ra một biến gọi là "kích thước" mà bóng tối được xây dựng trong chức năngSIZE. Thay vì gọi hàm để tính numberOfBlobs, MATLAB thay vì cố gắng chỉ số biến bằng cách sử dụng cấu trúc blobMeasurements làm chỉ mục (không hoạt động khi thông báo lỗi hiển thị).

Nói chung, bạn không nên đưa ra một biến hoặc chức năng tên của một chức năng đã tồn tại (trừ khi bạn know what you're doing). Chỉ cần thay đổi tên của biến trong mã của bạn thành một cái gì đó khác với "kích thước", hãy ra lệnh clear size để xóa biến kích thước cũ khỏi không gian làm việc và chạy lại mã của bạn.

1

thông báo lỗi của bạn nói với bạn rằng lỗi là ở numberOfBlobs = size(blobMeasurements, 1);. subsindex rất có thể được sử dụng trong size(..., 1) để truy cập các yếu tố đó.

Tôi giả định rằng blobMeasurements là một mảng cấu trúc (hoặc một cấu trúc đơn), mà hoạt động đó chưa được xác định hoàn toàn.

Tại sao bạn không sử dụng lệnh length như trước đây? Điều đó đã làm việc sớm hơn một chút trong mã của bạn.

Các vấn đề liên quan