quartz/content/notes/06-homographies.md
2023-03-16 13:39:33 +13:00

72 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "06-homographies"
tags:
- lecture
- cosc342
---
Homographies and mosaics
- A homography* is:
- A linear map between two planes (or views of a plane)
- A 3 x 3 matrix, up to a scale
- Two images of a scene are related by a homography
- If the scene is planar, or
- If the camera only rotates
- ![|300](https://i.imgur.com/Rfh38wF.png)
Homographies for planar scenes
- Take a line in one view
- This projects to a plane
- That intersects the scene (another plane) at a line
- That projects to a line in the other image
- So lines are preserved
- ![|300](https://i.imgur.com/YZPAFl6.png)
> [!INFO] can create a "straight" view of a picture!
[|300](https://i.imgur.com/BEjOoFL.png)
> [!INFO] homography: maps points from one image to another
> [!INFO] rephotography, mathing old photographs onto the current view of the user
homography for rotating camera
![|300](https://i.imgur.com/L6MqmUD.png)
> [!INFO] K matric describe parameters of camera. R matric describes rotation of camera. T is zero because the camera is only rotating. H is the homograhy matrix
not homographies
- If we have both:
- Non-planar scene, and
- Translating camera
- There is no homography between the images
- Lines may not be preserved
- Cannot make a mosaic
- But we can do stereo
![|150](https://i.imgur.com/8P81y7T.png)
making mosiac
- To make a mosaic image:
- Need to warp images to align
- This warping is a homography
- How to find the homography?
- If a feature at in one image matches to in the other, then
![|300](https://i.imgur.com/lryK0b8.png)
HOMOGRAPHY ESTIMATION IN OPENCV
- https://docs.opencv.org/4.4.0/d9/d0c/group__calib3d.html#ga4abc2ece9fab9398f2e560d53c8c9780
- pts1 Points in first image (std::vector)
- pts2 Points in second image (std::vector)
- cv::RANSAC - method to use (well just use RANSAC)
- 3.0 RANSAC threshold
cv::Mat H = cv::findHomography(pts1, pts2, cv::RANSAC, 3.0);