Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/laserborg/linescanner
DIY 3D Scanner | based on Line Laser and Webcam.
https://github.com/laserborg/linescanner
Last synced: 2 months ago
JSON representation
DIY 3D Scanner | based on Line Laser and Webcam.
- Host: GitHub
- URL: https://github.com/laserborg/linescanner
- Owner: LaserBorg
- License: gpl-3.0
- Created: 2022-01-14T18:41:42.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2024-02-13T01:37:47.000Z (12 months ago)
- Last Synced: 2024-02-13T02:34:07.169Z (12 months ago)
- Language: Python
- Size: 65.5 MB
- Stars: 9
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# LineScanner | work-in-progress
### working principle
A stepper motor sweeps a linelaser across the view of a camera. The script tries to detect a laser line
in each row of the camera frame, repeating for each frame during the laser's motion.
It uses frame subtraction to detect subtle changes in brightness and can therefore be used even in bright daylight.![source image](doc/example_input.jpg)
It then triangulates the 3D position of each point of the laser line using:
* distance between camera <-> laser
* current angle of the laser's stepper motor
* camera intrinic parameters (currently only field-of-view, later also distortion)Each point is colored (Vertex Color) either by the point's grayscale-value ( = "Laser-Illuminated")
or by providing a clean image for texturing (e.g. first frame of daylight shooting).![Linescanner](doc/example_result.jpg)
-----------LINKS:
Vector Intersection based on [geomalgorithms.com](https://web.archive.org/web/20210428000731/http://geomalgorithms.com/a05-_intersect-1.html)
https://stackoverflow.com/questions/5666222/3d-line-plane-intersectionindices of max-values in numpy array
https://www.w3resource.com/python-exercises/numpy/python-numpy-exercise-31.phpweighted average
https://stackoverflow.com/questions/30057046/weighted-mean-in-numpy-python#30057626color:
https://github.com/isl-org/Open3D/issues/614pcd = PointCloud()
pcd.points = Vector3dVector(np_points)
pcd.colors = Vector3dVector(np_colors)