script4
Contents
clear
close all
load pts1
rgb = imread(filename);
starting image
kp(1,:) = pts(1,:) - pts(2,:);
kp(2,:) = pts(3,:) - pts(4,:);
for k=1:2
kp(k,:) = kp(k,:)/norm(kp(k,:));
end
s = det(kp(1:2,:));
s = asin(s)*180/pi;
str = sprintf('divergence %g deg',s);
disp(str);
imshow(rgb);
hold on
plot(pts(1:2,1),pts(1:2,2),'b','LineWidth',2);
plot(pts(3:4,1),pts(3:4,2),'b','LineWidth',2);
hold off
title(str);
divergence -75.0002 deg
Warning: Image is too big to fit on
screen; displaying at 25%
find zero divergence
KK = [6500 0 0; 0 6500 0; 2000 1000 1];
clear ang dang
ang(1) = -60;
ang(2) = ang(1)-1;
dang(1) = div_angle(ang(1),pts,KK);
dang(2) = div_angle(ang(2),pts,KK);
for k=1:5
q = -dang(1)/(dang(2)-dang(1));
anew = ang(1)+(ang(2)-ang(1))*q;
dang(1) = dang(2);
ang(1) = ang(2);
ang(2) = anew;
dang(2) = div_angle(ang(2),pts,KK);
if abs(dang(2))<1e-6
break;
end
end
[da,tf] = div_angle(anew,pts,KK);
str = sprintf('angle %g deg divergence %g deg',anew,da);
[x, y] = transformPointsForward(tf,pts(:,1),pts(:,2));
pts2 = [x y];
angle -60 deg divergence -32.0416 deg
angle -61 deg divergence -30.7132 deg
angle -84.1202 deg divergence 3.52504 deg
angle -81.7398 deg divergence -0.165754 deg
angle -81.8467 deg divergence -1.1049e-05 deg
angle -81.8467 deg divergence 3.33715e-10 deg
wide view
ymax = max(y);
spread = 20000;
xrng = [min(x)-spread max(x)+spread];
diff = xrng(2)-xrng(1);
yrng = [ymax-diff ymax];
myref = imref2d([800 800],xrng,yrng);
[img, ref] = imwarp(rgb,tf,'OutputView',myref,'FillValues',[255 255 200]);
imshow(img);
ref
[xp, yp] = worldToIntrinsic(myref,x,y);
hold on
plot(xp(1:2),yp(1:2),'b','LineWidth',2);
plot(xp(3:4),yp(3:4),'b','LineWidth',2);
hold off
title(str);
ref =
imref2d with properties:
XWorldLimits: [-2.2334e+04 2.8735e+04]
YWorldLimits: [-6.6408e+04 -1.5338e+04]
ImageSize: [800 800]
PixelExtentInWorldX: 63.8372
PixelExtentInWorldY: 63.8372
ImageExtentInWorldX: 5.1070e+04
ImageExtentInWorldY: 5.1070e+04
XIntrinsicLimits: [0.5000 800.5000]
YIntrinsicLimits: [0.5000 800.5000]
narrow view
ymax = max(pts2(:,2));
spread = 2000;
xrng = [min(pts2(:,1))-spread max(pts2(:,1))+spread];
diff = xrng(2)-xrng(1);
yrng = [ymax-diff ymax];
myref = imref2d([800 800],xrng,yrng);
[img, ref] = imwarp(rgb,tf,'OutputView',myref,'FillValues',[255 255 200]);
imshow(img);
[xp, yp] = worldToIntrinsic(myref,pts2(:,1),pts2(:,2));
hold on
plot(xp(1:2),yp(1:2),'b','LineWidth',2);
plot(xp(3:4),yp(3:4),'b','LineWidth',2);
hold off
title(str);
ref
ref =
imref2d with properties:
XWorldLimits: [-4.3344e+03 1.0735e+04]
YWorldLimits: [-3.0408e+04 -1.5338e+04]
ImageSize: [800 800]
PixelExtentInWorldX: 18.8372
PixelExtentInWorldY: 18.8372
ImageExtentInWorldX: 1.5070e+04
ImageExtentInWorldY: 1.5070e+04
XIntrinsicLimits: [0.5000 800.5000]
YIntrinsicLimits: [0.5000 800.5000]