{"id":22111470,"url":"https://github.com/guillem222/panoramic-image-creator","last_synced_at":"2025-03-24T04:29:47.675Z","repository":{"id":228642853,"uuid":"774554974","full_name":"Guillem222/Panoramic-Image-Creator","owner":"Guillem222","description":"An algorithm for creating panoramic views from sequential images using computer vision techniques such as keypoints extraction, matching, and image alignment. Made in Python along with OpenCV and NumPy.","archived":false,"fork":false,"pushed_at":"2024-03-19T18:55:20.000Z","size":9111,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-29T10:30:38.714Z","etag":null,"topics":["computer-vision","image-stitching","keypoint-matching","opencv-python","panoramic-images","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Guillem222.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2024-03-19T18:50:18.000Z","updated_at":"2024-03-19T19:00:57.000Z","dependencies_parsed_at":"2024-03-19T20:07:40.604Z","dependency_job_id":null,"html_url":"https://github.com/Guillem222/Panoramic-Image-Creator","commit_stats":null,"previous_names":["guillem222/panoramic-image-creator"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Guillem222%2FPanoramic-Image-Creator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Guillem222%2FPanoramic-Image-Creator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Guillem222%2FPanoramic-Image-Creator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Guillem222%2FPanoramic-Image-Creator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Guillem222","download_url":"https://codeload.github.com/Guillem222/Panoramic-Image-Creator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245210074,"owners_count":20578156,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["computer-vision","image-stitching","keypoint-matching","opencv-python","panoramic-images","python"],"created_at":"2024-12-01T10:41:48.118Z","updated_at":"2025-03-24T04:29:47.637Z","avatar_url":"https://github.com/Guillem222.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Panoramic-Image-Creator\nThis project is about the development of an algorithm for creating panoramic views from sequential images using computer vision techniques such as keypoints extraction, matching, and image alignment. The algorithm aims to merge images while overcoming challenges in scale, rotation, and lighting variations. It is implemented by using Python along with OpenCV and NumPy.\n\n\n## Requirements\n- Python 3.9.6\n- opencv-contrib-python 4.5.1.48\n- numpy 1.26.1\n- matplotlib-base 3.4.2 (only for plotting the result)\n\n# How to use it\n\nAn example has been provided in the `src/` folder, in which you can\nfill it up with your own images paths and provide the corresponding image list\nto the function.\n\nIn order to use the implemented function, first, you will need to read your images and store them in variables. Then, call\n`computePanoramicView`, providing a list with the images read\nordered sequentally from left to right. You will need also to import the\n`panoramic.py` file where the implementation is located. As follows:\n\n```python\nimport cv2\nfrom panoramic import computePanoramicView\n\n# Read the images\n# img1 = cv2.imread('img_file.png')\n# img2 = cv2.imread('...')\n# ...\n# img5 = cv2.imread('...')\n\nresult = computePanoramicView([img1,img2,img3,img4,img5])\n```\n\nThe result variable will be the panoramic view image constructed. You can pass a list of $n$ images it is not restricted to five. For further information about the approach, optional arguments and return value, see the header comment section above the function definition in the source file `src/panoramic.py`.\n\n\n# Algorithm constraints\n\n- **Sequential Images**: the images have to be sequential, otherwise probably the matches found will be false matches.\n\n- **Order importance**: not only have to be sequential, but also go from left to right in the list that has to be delivered to the function: `list[0]` will be the leftmost image (in the real scenario) and `list[len(list) - 1]` will be the rightmost image.\n\n- **Shared elements within adjacent images**: between two adjacent images in the list must be shared\nelements: a tree, a rock, a field, building, etc. If not, it will be impossible to find true matches between\nthe two adjacent images.\n\n\n- **Planar transformation Assumption**: the accuracy of image alignment using homography depends on\nthe assumption that the scene undergoes planar transformations. This constraints the use of the algorithm\nin non-planar or complex 3D scenes. For instance, if the user takes photos changing dramatically in position\nand orientation, the algorithm's accuracy may be affected drastically.\n\n- **Static scene**: the algorithm success is tied on the assumption of a static scene. The presence of moving\nelements such as people, cars, or big objects can significantly impact correct keypoint matching. Dynamic\nelements introduce variations in the scene between consecutive images, leading to mismatches in keypoints\nduring feature extraction and compromising the accuracy of subsequent steps. Nevertheless, it could work fine in some dynamic scenarios.\n\n\n# Output Example\nHere, you can see one possible outcome of the algorithm (using the default values for the optional parameters). The top 3 images belong to the input, and bottom image is the output result.\n\n\u003cimg src=\"imgs/panoramic_park.png\" width=80%\u003e\n\n\n# Analysis\nFor further analysis of the algorithm, please refer to the `report.pdf`. This document was the report I submitted for the final assignment of a Computer Vision course. Within it, you will find:\n\n- An explanation, breakdown and diagram of the algorithm.\n\n- The technologies used.\n\n- Experimentation with the tuneable parameters: image scale factor, percentages of keypoint matches, RANSAC reprojection error, hard illumination variance resiliance, and more.\n\n- Potential improvements.\n\n# Note\nBy using the algorithm, you may notice visible boundaries between stitched images in the panoramic result. This is particularly noticeable on mobile phones and is caused by slight variations in the amount of light hitting the camera sensor during recording. As a result, ISO and other camera configurations adjust automatically when this option is activated, leading to more pronounced changes in illumination and colors between sequential images.\n\n\n# References\n\n[1] P. Premsingh, Image stitching using opencv — a step-by-step tutorial.  https://medium.com/@paulsonpremsingh7/image-stitching-using-opencv-a-step-by-step-tutorial-9214aa4255ec\n\n[2] D. Tyagi, Introduction to feature detection and matching.\nhttps://medium.com/@deepanshut041/introduction-to-feature-detection-and-matching-65e27179885d.\n\n[3] D. Tyagi, Introduction to sift( scale invariant feature transform). https://medium.com/@deepanshut041/introduction-to-sift-scale-invariant-feature-transform-65d7f3a72d40.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillem222%2Fpanoramic-image-creator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fguillem222%2Fpanoramic-image-creator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fguillem222%2Fpanoramic-image-creator/lists"}