From 8d927dc8ddd8638d84b52c05aabcbedcef160fb2 Mon Sep 17 00:00:00 2001 From: Thomas Schwery Date: Fri, 17 Apr 2020 14:53:54 +0200 Subject: [PATCH] Add article on photogrammetry for a custom bow grip --- articles/2020-04-15-custom-bow-grip.md | 378 ++++++++++++++++++ .../blender-cleanup.png | Bin 0 -> 350199 bytes .../blender-import.png | Bin 0 -> 932864 bytes .../colmap-features-check.png | Bin 0 -> 167508 bytes .../colmap-features-matching-overlap.png | Bin 0 -> 363263 bytes .../colmap-reconstruction.png | Bin 0 -> 294741 bytes .../lego-contraption.jpg | Bin 0 -> 102374 bytes .../openmvs-dense-cloud.png | Bin 0 -> 294666 bytes .../openmvs-dense-mesh.png | Bin 0 -> 238808 bytes 9 files changed, 378 insertions(+) create mode 100644 articles/2020-04-15-custom-bow-grip.md create mode 100644 articles/2020-04-15-custom-bow-grip/blender-cleanup.png create mode 100644 articles/2020-04-15-custom-bow-grip/blender-import.png create mode 100644 articles/2020-04-15-custom-bow-grip/colmap-features-check.png create mode 100644 articles/2020-04-15-custom-bow-grip/colmap-features-matching-overlap.png create mode 100644 articles/2020-04-15-custom-bow-grip/colmap-reconstruction.png create mode 100644 articles/2020-04-15-custom-bow-grip/lego-contraption.jpg create mode 100644 articles/2020-04-15-custom-bow-grip/openmvs-dense-cloud.png create mode 100644 articles/2020-04-15-custom-bow-grip/openmvs-dense-mesh.png diff --git a/articles/2020-04-15-custom-bow-grip.md b/articles/2020-04-15-custom-bow-grip.md new file mode 100644 index 0000000..71155ca --- /dev/null +++ b/articles/2020-04-15-custom-bow-grip.md @@ -0,0 +1,378 @@ +--- +title: Photogrammetry and custom bow grip +date: 2020-04-15 00:00:00 +--- + +Since I had some time this week, I decided to try to improve my bow grip +using a 3D printer and the already customized bow grip that we worked on +at the club some months ago. + +The first steps were trial and error, by applying some 2 components paste +on the grip, shoot some arrows, check that the hand was positioned correctly, +add some paste, repeat until the hand was positioned correctly and comfortable. + +I wanted to scan the result, post-process it a little using a 3D software +and print the improved result to compare and also allow additional tests +without risking destroying the bow grip we worked so hard on. + +Scanning an object into a 3D object can be done without any special hardware +using only a camera and some softwares on your computer. Depending on your +computer, some software will be unavailable or really slow. + +Since my computer has an AMD Radeon card, software using CUDA will not be +available and I will have to rely on CPU computations. This slows down the +processing but also means that it should work on any computer without any +special hardware required. + +Photogrammetry is a technology that interprets photographic images of an +object to extract and compute properties of the object. In this project, +I used what is called stereophotogrammetry to reconstruct a 3D model of my +bow grip using photographic images taken from different points of view. +The principle is simple, the software extracts features from the images by +looking at high contrast areas, matches these features across the different +images to see how they move and based on the relative position of the features +in the different images, computes the position of the camera and the distance +of the feature. Once it has build a points cloud, it matches the image +pixel with the point, tries to guess how the surface of the object should +be between the points and rebuild the object. + +Let's see what we need to begin. + +## Prerequisites + +As long as the hardware prerequisites go, only a computer, a camera and +the custom bow grip are required. A white tablecloth or sheet is also useful +to reduce the background that would be captured by the camera and thus speed +up the processing. + +Since we have to take pictures of the object under every possible angle, +to speed up the scan and allow me to focus on pointing the camera on my +object, I also build a small Lego contraption to rotate the object automatically. + +![Lego Contraption](lego-contraption.jpg "Lego Contraption") + +On the software side, I used `ffmpeg` to convert a video into separate images, +`imagemagick` to bulk crop the result, `colmap` to extract the features from +the images and build the sparse point cloud, `openMVS` to build the dense +point cloud and build the surface model and then `blender` to clean up the +model and do the modifications I wanted to try. + +If you are using Debian, you can install 4 of them using apt: + +``` +$ sudo apt install ffmpeg blender colmap imagemagick +``` + +We will need to build `openMVS` from source. Since there are dependencies +to build it, I decided to use a Docker container and retrieve the executables. + +``` +$ docker run -ti debian:testing /bin/bash +(CID) # apt-get update +(CID) # apt-get install -qq -y build-essential git cmake + libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev libxmu-dev libxi-dev + libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev + libopencv-dev libcgal-dev libcgal-qt5-dev libatlas-base-dev + freeglut3-dev libglew-dev libglfw3-dev +(CID) # git clone --single-branch --branch 3.2 https://gitlab.com/libeigen/eigen.git +(CID) # cd eigen/ +(CID) # mkdir t_build +(CID) # cd t_build/ +(CID) # cmake .. +(CID) # make -j8 +(CID) # make install +(CID) # cd / +(CID) # git clone https://github.com/cdcseacave/VCG.git +(CID) # git clone https://github.com/cdcseacave/openMVS.git +(CID) # cd openMVS/ +(CID) # mkdir t_build +(CID) # cd t_build/ +(CID) # cmake -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="/VCG" .. +(CID) # make -j8 +(CID) # exit +$ docker cp ${CID}:/openMVS/t_build/bin . +``` + +These commands will start a Docker container based on the latest Debian +Testing, install the required packages, build the dependencies, build OpenMVS +and copy the result of the build into a `bin` folder in the current directory. + +Once the different programs are installed, we can start taking pictures. + +## Taking pictures +For this step, I used my smartphone to record a video of the rotating object, +focusing on keeping the object in the center of the screen and moving the +smartphone up and down to record the object at 3 or 4 different heights. + +If your object has some mate and uniform parts, cover them with tape or +write on these parts with some washable pen so that the software can detect +and match features on these parts as well, improving the result. + +Once the video looks good, we can transfer the video from the smartphone +onto the computer. For this, we will create a project folder + +```sh +mkdir -p custom_bowgrip/images custom_bowgrip/images_raw custom_bowgrip/video custom_bowgrip/models +``` + +Transfer the video into the `video` directory. + +``` +ffmpeg -i video/*.mp4 -r 4 images_raw/img_%05d.png +``` + +Change the `-r` number of frame per second to get around 400 images. More +than that will slow the processing without improving the result much. The +quality of these images is more important than the quantity. + +We want to remove as much as possible of the images, so to process the object +and remove useless processing on the background, we will crop the image square +(as our object is mostly square). If you were static enough during the filming, +you can mass-crop the images using ImageMagick's `convert`. + +Open the image in Gimp (or any other tool that will allow you to preview +the image and crop it). In Gimp, do a Image -> Resize canvas. Resize the image +to contain the object and allow breathing room for movements. Note the coordinates +of the offset. These will be passed to `convert` to mass-crop the images. + +```sh +$ cd images_raw +$ for i in *; do echo $i; convert $i -crop 1080x1080+440+0 ../images/$i; done; +$ cd .. +``` + +We should now have the following structure: + +``` +├── images +│   ├── img_00001.png +│   ├── ... +├── images_raw +│   ├── img_00001.png +│   ├── ... +├── models +└── video + └── VID_20200415_103955.mp4 +``` + +Check that the cropped images are correct and centered on the object before +continuing. + +## Reconstruction + +The first step of the reconstruction uses COLMAP. Start the gui with +`colmap gui` and create a new project with a new database and using our +clean images directory. Save this new project in our project directory. + +You should have the following structure: + +``` +├── custom_bowgrip.db +├── custom_bowgrip.ini +├── images +│   ├── img_00001.png +│   ├── ... +├── images_raw +│   ├── img_00001.png +│   ├── ... +├── models +└── video + └── VID_20200415_103955.mp4 +``` + +We can now start the first step in COLMAP: The feature extraction. In the +`processing` menu, select `Feature extraction`. We can tick the `Shared +for all images` in the camera model option and untick `use_gpu` in the +Extract options. + +This step should task less than a minute to extract features from the +images and it should find around 2000 features per image. + +Once the extraction is done, we can check the quality of the features in +`processing` -> `Database management`. Select an image and click `Show image`. + + +![Image Features](colmap-features-check.png "Image Features") + +An image should have most of the features on the object you want to reconstruct, +not on the background. If your background is targeted by lots of features, the +matching and reconstruction later will spend a lot of time on reconstructing +the background of your scan and not the object. + +Once we know that the features are centered on our object, we can continue +onto the next stage: Feature matching. In the `Processing` menu, select +`Feature matching`. + +As we captured the images from a video, we can use the `Sequential` matching +algorithm. This is quicker as the program knows that the images were taken +sequentially and thus looks for features in the previous and following images +instead of doing an exhautive search. It also tries to detect loops and +match images taking these loops into account. As before, we want to untick +`use_gpu` in the options before running the operation. + +This step should take around 5 minutes to match the features in our images. + +Once the matching is done, we can check the quality using the +`Processing` -> `Database management` tool again. +Selecting an image and clicking on the Overlapping images button, +we can see the images overlapping the selected image. If you select one +image and click on Show Matches, you should get a number of red feature +dots and of green matching lines. + +![Image Overlap](colmap-features-matching-overlap.png "Image Overlap") + +You should have a number of images with a large number of matches that are +images just before or after the current image as well as a number of images with +a smaller number of matches that are further apart. + +Next, we can start the reconstruction itself. This will create a sparse +point cloud based on the features extracted and matched. In the `Reconstruction` +menu, select `Start Reconstruction`. + +You will get a preview updated in real time of the computed position of +each image and of your 3D object. + +![Object Reconstruction](colmap-reconstruction.png "Object Reconstruction") + +This process will take around 10 minutes. + +Once the reconstruction finished, we can export the model in the `File` menu, +`Export model as ...`. We will export the model in the `nvm` format that +will be used in openMVS for the next stages. + +We should have the following structure at this stage. + +``` +├── custom_bowgrip.db +├── custom_bowgrip.ini +├── images +│   ├── img_00001.png +│   ├── ... +├── images_raw +│   ├── img_00001.png +│   ├── ... +├── models +│   └── custom_bowgrip.nvm +└── video + └── VID_20200415_103955.mp4 +``` + +## Importing into openMVS + +We need the different executables that we compiled in the prerequisite. You +can either copy them in the current project directory or add them in our +`PATH`. + +The first step in openMVS is to generate the necessary files for the following +stages. + +First, to reduce clutter, we will post-process the nvm file to fix the +path as to allow execution in the same place for every tool. We will do +this using `perl`. + +``` +$ perl -pi -e 's{^img}{images/img}' models/custom_bowgrip.nvm +``` + +Once the file is fixed, we can let openMVS generate what it needs based +on the images and the exported model. + +``` +$ ./openMVS/InterfaceVisualSFM -i models/custom_bowgrip.nvm +``` + +This will take around 10 seconds and generate a new model as well as a +directory of undistorted images matching the geometry of the computed model. +We should have the following structure at this point: + +``` +├── custom_bowgrip.db +├── custom_bowgrip.ini +├── InterfaceVisualSFM-2004171142368C5D3E.log +├── images +│   ├── 00000.png +│   ├── ... +├── images_raw +│   ├── 00000.png +│   ├── ... +├── models +│   ├── custom_bowgrip.mvs +│   └── custom_bowgrip.nvm +├── openMVS +│   ├── DensifyPointCloud +│   ├── InterfaceCOLMAP +│   ├── InterfaceVisualSFM +│   ├── ReconstructMesh +│   ├── RefineMesh +│   ├── TextureMesh +│   └── Viewer +├── undistorted_images +│   ├── 00000.png +│   ├── ... +└── video + └── VID_20200415_103955.mp4 +``` + +## Building a Mesh + +The next stage is building the dense point cloud. This step will take some +time, around 40 minutes on my computer. + +``` +$ ./openMVS/DensifyPointCloud -i models/custom_bowgrip.mvs +``` + +Once the operation is finished, a new dense point model will be available +in the `models` directory. +You can preview the result using the openMVS Viewer. + +``` +$ ./openMVS/Viewer models/custom_bowgrip_dense.mvs +``` + +![Dense Points Reconstruction](openmvs-dense-cloud.png "Dense Points Reconstruction") + +The next step is to reconstruct a mesh based on the points. Without this +step, our object is still a cloud of points and not a solid object. This +will take approximately one minute. + +``` +$ ./openMVS/ReconstructMesh models/custom_bowgrip_dense.mvs +``` + +Once the operation is finished, a new mesh model will be available in the `models` +directory. You can preview the result using the openMVS Viewer. + +``` +../openMVS/Viewer models/custom_bowgrip_dense_mesh.mvs +``` + +![Dense Mesh Reconstruction](openmvs-dense-mesh.png "Dense Mesh Reconstruction") + +## Cleanup + +The mesh model can now be imported into your 3D program of choice for cleanup. + +This is by far the step that will take the most time and will largely depend +on your skills with Blender or your 3D tool of choice. + +As the reconstruction has no orientation reference, you need to +rotate the object into the correct position and scale it based on reference +points and measures that you can find on the object. In the case of the +bow grip, I used the total height and the width of the bow groove but this may +vary for other scans. + +![Blender Import](blender-import.png "Blender Import") + +You will want to remove the turntable if it was reconstructed, delete points +or polygons that are not attached to your objects, flatten some parts of +the model and fix some details up before printing it. + +Once you have a clean model, you can start applying other modifications, +such as adding or removing matter at some places you think will improve +the comfort of the grip or your hand's position on the grip. Having a +digital model of your grip allows you to more easily experiment and try +out new things and positions knowing that you can 3D print new grips and +revert back to older forms if needed. + +![Blender After cleanup](blender-cleanup.png "Blender After cleanup") diff --git a/articles/2020-04-15-custom-bow-grip/blender-cleanup.png b/articles/2020-04-15-custom-bow-grip/blender-cleanup.png new file mode 100644 index 0000000000000000000000000000000000000000..064e8ae15f818dce132ed84602a3fe5128808d7c GIT binary patch literal 350199 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