Я отслеживаю объект, который брошен в воздух, и этот объект управляет параболическим узором. Я отслеживаю объект через серию из 30 изображений. Мне удалось исключить весь фон и сохранить объект видимым, а затем использовать его центроид, чтобы получить его координаты и построить их. Теперь я должен предсказать, куда упадет объект, поэтому я использовал polyfit & polyval. Проблема в том, что MATLAB говорит:
??? Индекс превышает размеры матрицы.
Теперь центроид создает свою собственную структуру со строкой и двумя столбцами. Каждый раз, когда объект перемещается в цикле, он обновляет только первую строку.
Вот часть кода:
For N = 1:30
.
.
.
x = centroid(1,1); % extract first row and column for x
y = centroid(1,2); % extract secnd row and column for x
plot_xy = plot(x,y)
set(plot_xy,'XData',x(1:N),'YData',y(1:N));
fitting = polyfit(x(1:N),y(1:N),2);
parabola = plot(x,nan(23,1));
evaluate = polyval(fitting,x);
set(parabola,'YData',evaluate)
.
.
end
Я получаю сообщение об ошибке:
??? Index exceeds matrix dimensions.
Кажется, что (1: N) вызывает проблемы. Я, честно говоря, не знаю, почему, но когда я удаляю N, объект наносится на график вместе с его точками, но пригонка не будет работать. Это дает мне ошибку, говоря:
Warning: Polynomial is not unique; degree >= number of
data points.
> In polyfit at 72
Если я сделал это (1: N-1) или что-то еще, он набирает больше очков, прежде чем начнет давать мне ту же ошибку (не уникальную ...). Но я не могу удалить (1: N), потому что я должен оценивать коэффициенты полинома в каждом цикле (каждое значение N), так в чем же решение?
Редактировать 2:
Это больше моего кода
for N = 1:30
hold on
I = figure.image.(['j' num2str(N)]);
bw = (I);
imshow(bw)
ss = bwlabel(bw);
s = regionprops(bw,'centroid');
centroids = cat(1, s.Centroid);
hold(imgca,'on')
plot(imgca,centroids(1,1), centroids(1,2),'r*')
x = centroids(1,1);
y = centroids(1,2);
points = plot(x,y,'bo',x,y,'rx');
hold on;
for N>3
C1 = centroids(1,1);
C2 = centroids(1,2);
set(points,'XData',C1,'YData',C2);
poly = polyfit(C1,C2,2);
parabola = plot(C1,nan(size(centroids,1),1));
pval = polyval(poly,x);
set(parabola,'YData',pval);
pause(0.5)
end
end
Редактировать 3
Код для отображения местоположения объекта:
poly = polyfit(C1,C2,2);
g = roots(poly);
v = max(g)
plot(xPlot,polyval(poly,xPlot),'y')
plot(v,'go')
Линия параболы построена правильно из-за xPlot, но для g
(прогноз) все идет не так ... Использую ли я неправильный синтаксис для получения максимального значения?
Альтернативный текст http://img706.imageshack.us/img706/6343/parabolaaaaa.jpg
Я также понял, что если я поставлю plot(g,'g--')
вместо v, я получу:
Интересно, смогу ли я получить эту горизонталь вместо вертикали? Тогда у меня будет линия с кружком, где парабола, как предсказывают, остановится.
Альтернативный текст http://img101.imageshack.us/img101/6343/parabolaaaaa.jpg