Rostislav Lán
fe20f7a39a
|
2 years ago | |
---|---|---|
conf | 2 years ago | |
doc/manual | 2 years ago | |
res | 2 years ago | |
src | 2 years ago | |
.gitignore | 2 years ago | |
README.md | 2 years ago | |
makefile | 2 years ago | |
requirements.txt | 2 years ago |
README.md
About this Project
This project is being developed as a practical part of bachelor's thesis at Brno University of Technology - Faculty of Information Technology. It is as of now a work in progress.
The topic of this thesis is Generating a 3D Fingerprint Model from input fingerprint image. This application can be used to apply series of image processing filters to a fingerprint image to make it more suitable for conversion to 3D stl model and printing.
The second part of the project includes the functionality to use generated image as a height map for generating 3D model in stl format. This model can either be planar, curved or mapped.
Prerequisites
For now this has only been tested on Ubuntu gnu/linux machines. It should however be possible to run it in on most distributions, WSL and virtual machines of most linux distributions.
This guide is for Ubuntu machines only. Before cloning repository, you need these to succesfully use the application.
-
python version 3.10 is a requirement might work on earlier python 3 versions
sudo apt install python3.10
-
virtualenv package for virtual enviroment creation, other packages are installed automatically later
pip install virtualenv
Installation
-
Go to a suitable installation folder, for example Documents:
cd /home/username/Documents
-
Clone the repository to a suitable directory, for example:
git clone ssh://git@strade.fit.vutbr.cz:3022/xlanro00/BP_DP-xlanro00.git
-
Go inside cloned directory:
cd BP_DP-xlanro00
-
Create and enter the virtual enviroment:
virtualenv .venv && source .venv/bin/activate
-
Install required python modules from requirements.txt:
pip install -r requirements.txt
-
Now, you can run the application, as an example there is a file in res/examples called Palec_P4.tif. This is shown in the section below.
Filtering images
Once all the requirements are installed, the application is ready to use.
-
You will need to enter the virtual enviroment every time you want to use the application.
source .venv/bin/activate
-
The application requires input and output filenames including path from the root project directory, dpi and filter list.
python3 src/main.py input_file output_file dpi filters
There are two ways to enter the filters:
-
manually list all filter names and their parameters on the command line:
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_cline.png 600 total_variation weight=0.15 median ksize=5
-
load them from preset in a JSON configuration file, that can be used to tune and modify existing presets, or create new ones:
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json git_example
Configuration and presets
There is an option to input the filter series as a preset from JSON configuration file. To avoid accidental loss of information caused by modifying presets that have been used to generate stl files, these presets are stored inside a JSON file db.json. This file serves as a simple database for storing presets, stored presets are modified by adding generated hash of all the filters in that preset.
General format | Woking example |
---|---|
|
|
There is also an option to save current command line setting as a preset using -d switch and it's new name:
- Working example
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_cline.png 600 -d preset_gaussian gaussian sigma=1
Available filters with parameters
Overview of all implemented filters and their parameters with descriptions is listed below.
-
median blur
- ksize (int) - Kernel size, determines how large of an area the filter processes.
-
gaussian blur
- sigma (int) - Gaussian kernel standart deviation, determines the weight of further pixels on the currently processed pixel.
-
bilateral blur
- diameter (int) - Diameter of pixel neighborhood used for filtering.
- sigmaColor (int) - Determines the weight of pixels of different color.
- sigmaSpace (int) - Determines the weight of further pixels.
-
bilateral_scikit
- sigmaColor (float) - Determines the weight of pixels of different color.
- sigmaSpace (float) - Determines the weight of further pixels.
-
nlmeans (non-local means)
- patch_size (int) - Size of patches used for denoising.
- patch_distance (int) - Distance in pixels where to search for patches.
- h (float) - Cut-off distance, higher means more smoothed image.
-
total_variation
- weight (float) - Denoising weight, determines how much the image will be denoised.
-
block_match
- sigma (float)- Standart deviation
-
unsharp mask scikit
- radius (int) - Radius of the gaussian filter.
- amount (float) - Strength of the unsharp mask, determines how much of the mask will be used for filtering.
-
farid
-
meijering
-
sato
-
hessian
- sigmas (float) - Standart deviations
-
invert
-
scale_values
-
binarize
- threshold (int) - Value to cut differentiate pixels.
-
binarize_otsu
-
add_margin
- margin (int) - Number of pixels to add to the sides of the image.
- color (int) - Color value of newly added pixels.
-
erode
- kernel (numpy matrix) - Shape of the kernel used to erode image.
-
dilate
- kernel (numpy matrix)- Shape of the kernel used to dilate image.
Comparison
Image before processing the fingerprint and after applying a presets.
Before | After |
---|---|
Generating curved finger model
It is possible to generate stl model using the --stl
switch. This requires more parameters, first of which is the type of generated fingerprint.
If the mode is set to c
, the output model will be a curved finger model, with optional parameters following the filename controlling its shape.
First optional parameter is papilar line height height_line
, second is thickness of the model height_base
,
third the rate of curvature along x axis curv_rate_x
and the third is the rate of curvature along y axis curv_rate_y
.
-
General form for curved stl generation
python3 src/main.py input_file output_file dpi --config config_file preset --stl c height_line height_base curvature_x curvature_y
-
Working example curved stl generation
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config config/config.json git_example --stl c 2 10 2 2
Generating planar finger model
Using p
mode makes the generated fingerprint model flat.
Optional parameters are height of the papilar lines and base thickness.
-
General command form for planar stl generation
python3 src/main.py input_file output_file dpi --config config_file preset --stl p height_line height_base
-
Working example of planar stl generation
python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config config/config.json git_example --stl p 2 10
Mapping to existing finger model
This section will be added later, (if implemented) mapping of fingerprint to a given finger model.
- General command form for mapped stl generation
python3 src/main.py input_file output_file dpi --config config_file preset --stl m height_line height_base finger_file
Usage
usage: main.py [-h] [-m | --mirror | --no-mirror] input_file output_file dpi ([-c | --config config_file preset] | [filters ...]) [-s | --stl_file p height_line height_base | --stl_file c height_line height_base curv_rate_x curv_rate_y | --stl_file m height_line height_base finger_file]
Program for processing a 2D image into 3D fingerprint.
positional arguments: input_file input file path output_file output file path dpi dpi of used scanner filters list of filter names and their parameters in form [filter_name1 param1=value param2=value filter_name2 param1=value...]
options: -h, --help show this help message and exit -m, --mirror, --no-mirror switch to mirror input image -s [STL_FILE ...], --stl_file [STL_FILE ...] create stl model from processed image -c CONFIG CONFIG, --config CONFIG CONFIG pair: name of the config file with presets, name of the preset
Roadmap
- Load and store image
- Apply basic image processing filters
- Scale the image using given dpi
- Create filter library with more filters
- Add more suitable filters to the library
- Use presets from config files
- Add the option to save current filter preset to config file
- Add the option to modify filter parameters
- Convert the processed image to flat stl lithophane
- Add the option to curve the lithophane into the shape of a finger
- Export final model ready for 3D print
- Add the option to map the fingerprint onto a given finger model
Author
Rostislav Lán - xlanro00@stud.fit.vutbr.cz
Supervisor
Ing. Petr Malaník
Links
Project Link: https://strade.fit.vutbr.cz/git/xlanro00/BP_DP-xlanro00