Я создал собственный детектор объектов, который работает довольно хорошо, но я получаю NaN для всех значений в моей матрице. Я выяснил это после отладки кода, и ограниченная область на моем изображении показывает NaN метров . Я использовал код из Matlab для вычисления расстояния, но я не знаю, является ли это общим методом вычисления расстояния. Ниже приведен код.
points3D = reconstructScene(disparityMapBM,stereoParams);
points3D = points3D ./ 1000;
trainingData = objectDetectorTrainingData(gTruth);
myAFCdetector = trainACFObjectDetector(trainingData,'NumStages',5, 'NegativeSamplesFactor',2);
img = imread('Right_Image.jpg');
[bboxes,scores] = detect(myAFCdetector,img);
for i = 1:length(scores)
annotation = sprintf('Confidence = %.1f',scores(i));
I1 = insertObjectAnnotation(img,'rectangle',bboxes(i,:),annotation);
end
figure
imshow(I1)
centroids = [round(bboxes(:, 1) + bboxes(:, 3) / 2), ...
round(bboxes(:, 2) + bboxes(:, 4) / 2)];
% Find the 3-D world coordinates of the centroids.
centroidsIdx = sub2ind(size(disparityMapBM), centroids(:, 2), centroids(:, 1));
X = points3D(:, :, 1);
Y = points3D(:, :, 2);
Z = points3D(:, :, 3);
centroids3D = [X(centroidsIdx)'; Y(centroidsIdx)'; Z(centroidsIdx)'];
% Find the distances from the camera in meters.
dists = sqrt(sum(centroids3D .^ 2));
% Display the detected people and their distances.
labels = cell(1, numel(dists));
for i = 1:numel(dists)
labels{i} = sprintf('%0.2f meters', dists(i));
end
figure;
imshow(insertObjectAnnotation(I1, 'rectangle', bboxes, labels));
title('Detected People');
Я обнаружил матрицу NaN в centroids3D . Может ли быть какая-то причина, почему я заполняю эти матрицы NaN?
Centoids3D = [Nan NaN NaN NaN; Nan NaN NaN NaN; Nan NaN NaN NaN]