I'm tring to implement matlab code for Kalman filter as object tracking .There are sample images provided with code.But I tried for another images with different dimensions.It makes .error-'Index exceeds matrix dimensions'

2 ビュー (過去 30 日間)
Testtrackkalman.m
clear all
NoOfImg = 8;
Xmsaved = zeros(2, NoOfImg); Xhsaved = zeros(2, NoOfImg);
for k = 1:NoOfImg [xm, ym] = GetBallPos(k); [xh, yh] = TrackKalman(xm, ym);
hold on
plot(xm, ym, 'r*')
plot(xh, yh, 'bs')
pause(1)
Xmsaved(:, k) = [xm ym]';
Xhsaved(:, k) = [xh yh]';
end
figure hold on plot(Xmsaved(1,:), Xmsaved(2,:), '*') plot(Xhsaved(1,:), Xhsaved(2,:), 's')
Trackkalman.m
if true
% code
end
function [xh, yh] = TrackKalman(xm, ym)
%
%
persistent A H Q R
persistent x P
persistent firstRun
if isempty(firstRun) dt = 1;
A = [ 1 dt 0 0
0 1 0 0
0 0 1 dt
0 0 0 1 ];
H = [ 1 0 0 0
0 0 1 0 ];
Q = 1.0*eye(4);
R = [ 50 0
0 50 ];
x = [0, 0, 0, 0]';
P = 100*eye(4);
firstRun = 1;
end
xp = A*x; Pp = A*P*A' + Q;
K = Pp*H'*inv(H*Pp*H' + R);
z = [xm ym]'; x = xp + K*(z - H*xp); P = Pp - K*H*Pp;
xh = x(1); yh = x(3);
function [xc, yc] = GetBallPos1(index) % % persistent imgBg persistent firstRun
if isempty(firstRun) imgBg = imread('Process1/bg1.tif',1);
firstRun = 1;
end
xc = 0; yc = 0;
imgWork = imread(['Process1/', int2str(index), '.tif']); imshow(imgWork)
fore = imabsdiff(imgWork, imgBg); fore = (fore(:,:,1) > 10) | (fore(:,:,2) > 10) | (fore(:,:,3) > 10);
L = logical(fore); stats = regionprops(L, 'area', 'centroid'); area_vector = [stats.Area]; [tmp, idx] = max(area_vector);
centroid = stats(idx(1)).Centroid;
xc = centroid(1) + 15*randn; yc = centroid(2) + 15*randn;

採用された回答

Image Analyst
Image Analyst 2016 年 3 月 27 日
stats is probably empty. What does this show
numBlobs = size(stats)
  4 件のコメント
Sajith Galgamuwa
Sajith Galgamuwa 2016 年 3 月 28 日
centroid = stats.Centroid;
xc = centroid(1:2:end); yc = centroid(2:2:end);
Again some errors..*
Too many outputs requested. Most likely cause is missing [] around left hand side that
has a comma separated list expansion.
Error in GetBallPos (line 27) centroid = stats.Centroid;
Error in TestTrackKalman (line 9) [xm, ym] = GetBallPos(k);
Image Analyst
Image Analyst 2016 年 3 月 28 日
Look at my code. Then look at what the error says is the most likely cause. Anything strike you? Notice how I used brackets, and you didn't, and the error message says that the most likely cause is that you didn't use them. Knowing that, do you still have a question?

サインインしてコメントする。

その他の回答 (3 件)

Sajith Galgamuwa
Sajith Galgamuwa 2016 年 3 月 28 日
centroid = [stats.centroid];
xc = centroid(1:2:end);
yc = centroid(2:2:end);
I have corrected but,,,,-
Reference to non-existent field 'centroid'.
Error in GetBallPos (line 26)_
centroid = [stats.centroid];
Error in TestTrackKalman (line 9)_
[xm, ym] = GetBallPos(k);

Sajith Galgamuwa
Sajith Galgamuwa 2016 年 3 月 28 日
編集済み: Sajith Galgamuwa 2016 年 3 月 28 日
centroid = [stats.Centroid];
xc = centroid(1:2:end);
yc = centroid(2:2:end);
Now that part o.k..Thanks

Sajith Galgamuwa
Sajith Galgamuwa 2016 年 3 月 28 日
But kalman filter part has some problems.
Error using - Matrix dimensions must agree.
Error in TrackKalman (line 37)
x = xp + K*(z - H*xp);
Error in TestTrackKalman (line 10)
[xh, yh] = TrackKalman(xm, ym)

カテゴリ

Help Center および File ExchangeImage Processing and Computer Vision についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by