Live Video processing and analysing
Show older comments
mov=aviread('mov.avi');
mov1 = 'mov.avi';
fileinfo = aviinfo(mov1);
for x = 1:fileinfo.NumFrames
[im1,map] = frame2im(mov(x));
imshow(im1);
pause(1);
startpos_E = 74.963269;
startpos_N = 32.732582;
endpos_E = 75.357845;
endpos_N = 33.075700;
[a b c] = size(im1);
disp (a);
disp (b);
[x,y] = ginput(1);
disp (x); disp (y);
lon1 = startpos_E + ((endpos_E - startpos_E)*y)/b;
lat1 = startpos_N + ((endpos_N - startpos_N)*(a-x))/a;
[x,y] = ginput(1);
disp (x); disp (y);
lon2 = startpos_E + ((endpos_E - startpos_E)*y)/b;
lat2 = startpos_N + ((endpos_N - startpos_N)*(a-x))/a;
fid = fopen('text.txt', 'wt');
fprintf(fid,'\n Pixel position is %i & %i',x,y);
fprintf(fid,'\n %i E ',lon1);
fprintf(fid,'%i N',lat1);
fprintf(fid,'\n %i E ',lon2);
fprintf(fid,'%i N',lat2);
if abs(lat1)>90 | abs(lat2)>90
error('Input latitudes must be between -90 and 90 degrees, inclusive.')
end
a = 6378137;
b = 6356752.31424518;
lat1 = lat1 * 0.0174532925199433;
lon1 = lon1 * 0.0174532925199433;
lat2 = lat2 * 0.0174532925199433;
lon2 = lon2 * 0.0174532925199433;
if abs(pi/2-abs(lat1)) < 1e-10;
lat1 = sign(lat1)*(pi/2-(1e-10));
end
if abs(pi/2-abs(lat2)) < 1e-10;
lat2 = sign(lat2)*(pi/2-(1e-10));
end
f = (a-b)/a;
U1 = atan((1-f)*tan(lat1));
U2 = atan((1-f)*tan(lat2));
lon1 = mod(lon1,2*pi);
lon2 = mod(lon2,2*pi);
L = abs(lon2-lon1);
if L > pi
L = 2*pi - L;
end
lambda = L;
lambdaold = 0;
itercount = 0;
while ~itercount | abs(lambda-lambdaold) > 1e-12
itercount = itercount+1;
if itercount > 50
warning('Points are essentially antipodal. Precision may be reduced slightly.');
lambda = pi;
break
end
lambdaold = lambda;
sinsigma = sqrt((cos(U2)*sin(lambda))^2+(cos(U1)*...
sin(U2)-sin(U1)*cos(U2)*cos(lambda))^2);
cossigma = sin(U1)*sin(U2)+cos(U1)*cos(U2)*cos(lambda);
sigma = atan2(sinsigma,cossigma);
alpha = asin(cos(U1)*cos(U2)*sin(lambda)/sin(sigma));
cos2sigmam = cos(sigma)-2*sin(U1)*sin(U2)/cos(alpha)^2;
C = f/16*cos(alpha)^2*(4+f*(4-3*cos(alpha)^2));
lambda = L+(1-C)*f*sin(alpha)*(sigma+C*sin(sigma)*...
(cos2sigmam+C*cos(sigma)*(-1+2*cos2sigmam^2)));
if lambda > pi
warning('Points are essentially antipodal. Precision may be reduced slightly.');
lambda = pi;
break
end
end
u2 = cos(alpha)^2*(a^2-b^2)/b^2;
A = 1+u2/16384*(4096+u2*(-768+u2*(320-175*u2)));
B = u2/1024*(256+u2*(-128+u2*(74-47*u2)));
deltasigma = B*sin(sigma)*(cos2sigmam+B/4*(cos(sigma)*(-1+2*cos2sigmam^2)...
-B/6*cos2sigmam*(-3+4*sin(sigma)^2)*(-3+4*cos2sigmam^2)));
s = b*A*(sigma-deltasigma);
fprintf(fid,'\n distance is %i m', s);
fclose(fid);
winopen('text.txt')
end
Answers (0)
Categories
Find more on Motion Detection in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!