H = u2H( u, u0 )
Create function u2H
computing homography from four image matches. Let u
be the image coordinates of points in the first image (2×4 matrix) and u0
(2×4 matrix) be the image coordinates of the corresponding points in the second image. Then H
is a 3×3 homography matrix, such that
λ_i [u0(:,i);1] = H * [u(:,i);1]
for all i=1:4
and some nonzero λ_i
. Matrix H
is regular. Return an empty matrix []
if there is no solution.
u2H
. Use the following test data:u = [0 0 1 1; 0 1 1 0] u0 = [1 2 1.5 1; 1 2 0.5 0] % result should be (but verify yourself): H = [1 1 1 -1 1 1 1 0 1 ]
00ID: Your data
.
edit_points
from the Tools repository can be used (see its help). Store the matches as column vectors in 2×10 matrices u
and u0
for your and the reference image, respectively. The i
-th correspondence is thus u(:,i)
and u0(:,i)
.
H
) that maps your image to the reference image. Find it as the best homography by optimizing over all 210 quadruplets among the ten matches. Minimize the maximal transfer error (in the domain of points u0
) on all image matches. Create function u2h_optim
(with arbitrary inputs and outputs) solving this step. The function will be used in the one of the future homeworks.
05_homography.mat
save( '05_homography.mat', 'H', 'u', 'u0', 'point_sel', '-v6' )
H
. Store the corrected bitmap image as 05_corrected.png
. Optionally, try some colour normalization of filled-in area (up to one bonus point).
H
. Export as 05_homography.pdf
.
The part of reference image is transferred to your image, so we need the transformation of coordinates in the opposite direction.
u
of all pixels in your image that are to be filled. These are typically integers.
u0
point to the reference image (typically not integers).
i
:
rgb = im0(round(u0(2,i)),round(u0(1,i)),:); % here we take all values (':') along the third dimensionIn general situations, the coordinates should be checked no to be outside the image.
u(:,i)
).im(u(2,i), u(1,i),:) = rgb;
Upload an archive consisting of: