フィルターのクリア

Draw rectangle on optical flow points

2 ビュー (過去 30 日間)
Nataliya
Nataliya 2015 年 6 月 18 日
Hello, I am detecting the moving object using optical flow. Here is the code to find the vectors of optical flow.
%%Load images
clear all;
load traffic_frames
figure();
subplot 211
imshow(fr1);
im1 = im2double(rgb2gray(fr1));
subplot 212
imshow(fr2);
im2 = im2double(rgb2gray(fr2));
%%Find corners
% Define the window size for Lucas-Kanade method
ww = 40;
w = round(ww/2);
% Reduce the size of the image
sc = 2;
im2c = imresize(im2, 1/sc);
C1 = corner(im2c);
C1 = C1*sc;
% Discard coners near the margin of the image
k = 1;
for i = 1:size(C1,1)
x_i = C1(i, 2);
y_i = C1(i, 1);
if x_i-w>=1 && y_i-w>=1 && x_i+w<=size(im1,1)-1 && y_i+w<=size(im1,2)-1
C(k,:) = C1(i,:);
k = k+1;
end
end
% Plot corners on the image
figure();
imshow(fr2);
hold on
plot(C(:,1), C(:,2), 'r*');
%%Implementing Lucas Kanade Method
% for each point, calculate I_x, I_y, I_t
Ix_m = conv2(im1,[-1 1; -1 1], 'valid'); % partial on x
Iy_m = conv2(im1, [-1 -1; 1 1], 'valid'); % partial on y
It_m = conv2(im1, ones(2), 'valid') + conv2(im2, -ones(2), 'valid'); % partial on t
u = zeros(length(C),1);
v = zeros(length(C),1);
% within window ww * ww
for k = 1:length(C(:,2))
i = C(k,2);
j = C(k,1);
Ix = Ix_m(i-w:i+w, j-w:j+w);
Iy = Iy_m(i-w:i+w, j-w:j+w);
It = It_m(i-w:i+w, j-w:j+w);
Ix = Ix(:);
Iy = Iy(:);
b = -It(:); % get b here
A = [Ix Iy]; % get A here
nu = pinv(A)*b;
u(k)=nu(1);
v(k)=nu(2);
end;
%%Draw the optical flow vectors
figure();
imshow(fr2);
hold on;
quiver(C(:,1), C(:,2), u,v, 1,'r')
Now I want to draw a rectangle around moving area. How can I do this. Thanks in advance.

回答 (0 件)

カテゴリ

Help Center および File ExchangeOptics についてさらに検索

タグ

タグが未入力です。

Community Treasure Hunt

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

Start Hunting!

Translated by