Creating hybrid images using a series of image filters. Hybrid images are static, but show different images depending on how far you are away from the picture.
- High pass filtered version of picture 1
- Low pass filtered version of picture 2
- Blended hybrid image of aligned picture 1 and 2
Detailed project description can be found here.
- cross_correlation_2d
- convolve_2d
- gaussian_blur_kernel_2d
- low_pass
- high_pass
Name | Function |
---|---|
/resources | Images used to create hybrid |
adjust_brightness.py | Adjust brightness of resulting image |
hybrid.py | Apply the five filters to the two images and blend |
test.py | Test cases provided to test and debug our code |
gui.py | Gui provided to create panorama |
- Python version: 2.7.16
- NumPy
- SciPy
Al Pacino (left.jpg): low pass Robert De Niro (right.jpg): high pass
"right_size": 8,
"left_sigma": 7.0,
"scale_factor": 2.0,
"right_sigma": 4.5,
"right_mode": "high",
"view_grayscale": 0,
"left_mode": "low",
"left_size": 13,
"mixin_ratio": 0.5,
"save_grayscale": 0
![]() |
![]() |
---|
![]() |
![]() |
---|
Detecting image features and matching pairing features across images.
- Feature detection using Harris
- Feature description (simple and MOPS)
- Feature matching (SSD and ratio)
Detailed project description can be found here.
- Compute Harris corner strength at each pixel for source image
- Find local maxima
- Implement Simple Feature Descriptor and MOPS (Multi-Scale Oriented Patches) Descriptor
- Perform feature matching with SSD or ratio distance
- Benchmark the performance of the different descriptors and matching functions in an ROC curve
Name | Function |
---|---|
/resources | Images used for feature matching |
features.py | Feature detection, description and matching |
featuresUI.py | Gui to visualize feature matches and benchmarks |
tests.py | Test cases provided to test and debug our code |
transformations.py | Image transformation functions |
benchmark.py | Code to create ROC curves |
- Python version: 3.7.4
- cv2
- NumPy
- SciPy
![]() |
![]() |
---|
Not all matches are shown in the image (1120 matches in total)
![]() |
![]() |
---|
Not all matches are shown (4960 matches in total)
Using the MOPS Detector and Ratio matching led to the best performance with an average AUC of 0.944, followed by the MOPS and SSD method with an AUC of 0.872. The Simple Descriptor with both Ratio matching (AUC of 0.86) and with SSD (AUC of 0.845) performed worse.
MOPS Ratio ROC Curve | MOPS SSD ROC Curve |
---|---|
![]() |
![]() |
Simple Ratio ROC Curve | Simple SSD ROC Curve |
---|---|
![]() |
![]() |
Building our own Autostitch system to combine overlapping photographs into a single panorama
-
Feature matching using ORB feature detector (opencv)
-
Using RANSAC to align the photographs
-
Blend the images with alpha blending (feathering)
-
Correcting for drift and create 360° panoramas
Detailed project description can be found here.
-
Take pictures with a camera / phone
-
Warp to spherical coordinates
-
Extract features
-
Match features
-
Align neighboring pairs using RANSAC
-
Write out list of neighboring translations
-
Correct for drift
-
Read in images and blend them
-
Crop the result and import into a viewer
Name | Function |
---|---|
/resources | Images used to create panoramas |
warp.py | Warp images into spherical coordinates. |
alignment.py | Compute the alignment of image pairs. |
blend.py | Stitch and blend the aligned images. |
test.py | Test cases provided to test and debug our code |
gui.py | Gui provided to create panorama |
- Python version: 3.7.4
- cv2
- NumPy
- SciPy
![]() |
![]() |
---|---|
![]() |
![]() |
These pictures were taken with the iPhone XR with 4.25mm focal length and CCD (sensor) width of 5.66m
![]() |
![]() |
![]() |
![]() |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
The final 360 panorama looks a bit blurry because we did not have a tripod, i.e. the horizontal movement is not as consistent and we were not able to fully correct for the distortion. We used a blend width of 200 pixels and a translation to create the panorama.