From d32e0279e4f574182edd4473dc4a8684ffa35b18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rostislav=20L=C3=A1n?= Date: Sat, 6 May 2023 16:07:06 +0200 Subject: [PATCH] Updated documentation to fix issues with old parameters. --- README.md | 15 +++++++++------ docs/build/.doctrees/environment.pickle | Bin 336281 -> 337492 bytes docs/build/.doctrees/filtering.doctree | Bin 8255 -> 8251 bytes docs/build/.doctrees/generation.doctree | Bin 13112 -> 13485 bytes docs/build/.doctrees/usage.doctree | Bin 5880 -> 5906 bytes docs/build/_sources/filtering.rst.txt | 2 +- docs/build/_sources/generation.rst.txt | 12 ++++++------ docs/build/_sources/usage.rst.txt | 2 +- docs/build/filtering.html | 2 +- docs/build/generation.html | 12 ++++++------ docs/build/searchindex.js | 2 +- docs/build/usage.html | 2 +- docs/source/filtering.rst | 2 +- docs/source/generation.rst | 6 +++--- docs/source/usage.rst | 8 +++++--- 15 files changed, 35 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 43c9bba..c9fd020 100644 --- a/README.md +++ b/README.md @@ -294,7 +294,7 @@ third the rate of curvature along x axis `curv_rate_x` and the third is the rate * 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 new_ridge --stl c 2 10 2 2 + python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge --stl c 2 10 2 2 ``` # Generating planar finger model @@ -311,7 +311,7 @@ Optional parameters are height of the papilar lines and base thickness. * 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 new_ridge --stl p 2 10 + python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge --stl p 2 10 ``` # Mapping to existing finger model @@ -331,7 +331,7 @@ The last parameter `finger_model` allows the user to choose custom finger model. * Working example of finger mapping ``` - python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json new_ridge --stl m 0.2 2 0 0 0 res/finger_backup/finger-mod.stl + python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json new_ridge --stl m 0.2 2 0 0 0 res/finger_backup/finger.stl ``` @@ -344,7 +344,7 @@ When in doubt, you can always check the help with: Which will print out the following message. ``` -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 m height_line iter finger_x finger_y finger_z finger_model [-d | --database database_filename] +usage: main.py [-h] [-m | --mirror | --no-mirror] input_file output_file dpi ([-c | --config config_file preset] | [filters ...]) [-s | --stl p height_line height_base | --stl c height_line height_base curv_rate_x curv_rate_y | --stl m height_line iter finger_x finger_y finger_z finger_model] [-d | --database database_filename] Program for processing a 2D image into 3D fingerprint. @@ -359,10 +359,13 @@ 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 ...] + -s [STL ...], --stl [STL ...] create stl model from processed image - -c CONFIG CONFIG, --config CONFIG CONFIG + -c CONFIG CONFIG, --config CONFIG CONFIG pair: name of the config file with presets, name of the preset + -d DATABASE, --database DATABASE + switch to store presets in config database + ``` # Troubleshooting diff --git a/docs/build/.doctrees/environment.pickle b/docs/build/.doctrees/environment.pickle index 8e47fde3322d5b88b6943f4c4dc735e054b02c5e..9dbf342b730050c00602439c0dbe3698e60297fa 100644 GIT binary patch literal 337492 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 eegaieT?l0AHRCesngn+;xRDz0S|w6pG9za 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 J*-C%+{|7Mb1*-r6 literal 336281 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

)%1?n%)p0mEC+{|=V?+l-t`XAPp{tOC=6FQp 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 diff --git a/docs/build/.doctrees/filtering.doctree b/docs/build/.doctrees/filtering.doctree index 2388ebf8fac4600acec28ee0c82255d41b2e553d..2d44b2425e6ed3654d78aecd8385e2ff194681a2 100644 GIT binary patch delta 56 zcmdn*u-k#9fpx0EMwT_Aj7^g_idG8crIyDRWu~O3PRU@8osuEg0~Y3h32#0qR>uhd DU9=UC delta 60 zcmdn(u-}2Dfpx0MMwT_Aj4hKlidKrGXO_gLRwU*Y`og7fk>F diff --git a/docs/build/.doctrees/generation.doctree b/docs/build/.doctrees/generation.doctree index 6e529cf5640afa87f1ea0e689875dde6f1cb78e2..674071000b567f37dd2794d4d913594dd2c33921 100644 GIT binary patch delta 807 zcmdmywlFr}`6;P6dI}*KsR}uX#U%;_iA9OIsU@jJ3JGbMdFiP|@n97R3W+&6`Q^n5 zB|wFx#X#wje1+tU{QTlnh2+xWlKfl+h;oR5o4w_iF@Y@F{6+CNBjdWsdz2?je5kgqC^5!3B-{= z6L)O3S7&5oJP)+blI1kAT_?bHJ=Tz6TmZDob@EwFMHW!ZPJX8;sishrTC5NCc2Z(; zc4+~Wrw5F1m;*5NY2eofch$?u_Ue9{6SOp$8Fe;y={{kuXJcky$YKT&F^oVW5=49l z5nn*WKcK_2eglcp9?m>a3aKneEe6Fx7D!(wSWhQdeJ5CLXK98cNET#Zh7Q=Y410)C b@gVa+MrHj1vPye+)AI96@;1LU^kxJAq@fYE delta 549 zcmZ3Rxg(9Wfpw~`@kZ7JLB>gwA4;W5W~S>W=jWwmrt4)D=jSP;XO_gLRwU*YU}!KUgFSXihF}j^6K>l#M@t`KWE9>k zC#%WGoRe5Q*-P%_<}UeVOi+%==5(dWjEqwzFOZwes5jY8QF`(mHnqvCRBti%OmNbR;J1N;`Wo()nynPfUXsr{6Rg76Xq1S2>+DUDUDNVrvSAr zV`5+^p1hD-dh#?0{mBP3HZ$&p8|wg+-w8H$8^l;KEg8mops}u#E3_0R&()HI8;v50 zWc+oQ@tc=vM=&!=ZT_$Kgt`6;P&Df!h=^eX5|JR{JBauKBHn-`UIK~I9?rbP+|-iF zg4AN5Yc;Y!`Z~dSI>G8Y!D>58GbBN>AOkaWz@}x`LyU?CnFlf|>lct!+QXZcpI?%< JImy_Y5dg>jy+Hr~ diff --git a/docs/build/.doctrees/usage.doctree b/docs/build/.doctrees/usage.doctree index cac8dcdb35566a876f6f5f90a15180ab84b4f341..91e91e7a294f67f1b21f9b3b4386f012a835280b 100644 GIT binary patch delta 70 zcmeyNJ4uhVfpsdo_(oPWHpcADI&5l;yb5WVdFiP|@wxdasX3eXaN96X?&D&|Da#E2 D?ei7U delta 42 pcmbQF_d}PpfpzLzv5l;1Y>aW6b=cGxH^;L(Gb7kG%!`HiIRF(L3qt?^ diff --git a/docs/build/_sources/filtering.rst.txt b/docs/build/_sources/filtering.rst.txt index 69bb869..c516432 100644 --- a/docs/build/_sources/filtering.rst.txt +++ b/docs/build/_sources/filtering.rst.txt @@ -34,4 +34,4 @@ There are two ways to enter the filters: .. code-block:: - (.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json git_example + (.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge diff --git a/docs/build/_sources/generation.rst.txt b/docs/build/_sources/generation.rst.txt index 9e49155..9fef63b 100644 --- a/docs/build/_sources/generation.rst.txt +++ b/docs/build/_sources/generation.rst.txt @@ -26,7 +26,7 @@ third the rate of curvature along x axis `curv_rate_x` and the third is the rate .. code-block:: console - $ 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 + $ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge --stl c 2 10 2 2 Generating planar finger model ----------------------------------- @@ -44,7 +44,7 @@ Optional parameters are height of the papilar lines and base thickness. .. code-block:: - $ 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 + $ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge --stl p 2 10 Mapping fingerprint to existing finger model -------------------------------------------- @@ -52,19 +52,19 @@ Mapping fingerprint to existing finger model Using `m` mode modifies the preexisting finger model to contain fingerprint. First optional parameter is papilar line height `height_line`, second is the number of iterations `iter` to make the finger mesh denser. Higher number of itertions results in denser finger mesh and better result. -The last three parameters are axis offsets for the finger, `finger_x`, `finger_y`, `finger_z`. -These control the location of the finger. They need to be set only if the user wants to move core of the print closer to the center of the finger. +The next three parameters are axis offsets for the finger, `finger_x`, `finger_y`, `finger_z`. +These control the location of the finger. They need to be set only if the user wants to move core of the print closer to the center of the finger model. The last parameter `finger_model` allows the user to choose custom finger model. * General command form for mapped stl generation .. code-block:: console - $ python3 src/main.py input_file output_file dpi --config config_file preset --stl m height_line iter finger_x finger_y finger_z + $ python3 src/main.py input_file output_file dpi --config config_file preset --stl m height_line iter finger_x finger_y finger_z finger_model * Working example of finger mapping .. code-block:: console - $ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json ridge --stl m 0.2 2 0 0 0 + $ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json new_ridge --stl m 0.2 2 0 0 0 res/finger_backup/finger.stl diff --git a/docs/build/_sources/usage.rst.txt b/docs/build/_sources/usage.rst.txt index d6043a8..b21f1c5 100644 --- a/docs/build/_sources/usage.rst.txt +++ b/docs/build/_sources/usage.rst.txt @@ -20,7 +20,7 @@ Which will print out the following message. 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 m height_line iter finger_x finger_y finger_z] + --stl m height_line iter finger_x finger_y finger_z finger_model] [-d | --database database_filename] Program for processing a 2D image into 3D fingerprint. diff --git a/docs/build/filtering.html b/docs/build/filtering.html index a076b96..841c562 100644 --- a/docs/build/filtering.html +++ b/docs/build/filtering.html @@ -230,7 +230,7 @@ Fingerprint sample is located in res/examples, its name is Palec_P4.tif.

  1. load them from preset in a JSON configuration file, that can be used to tune and modify existing presets, or create new ones:

-
(.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json git_example
+
(.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge
 
diff --git a/docs/build/generation.html b/docs/build/generation.html index 2865587..8edc7dd 100644 --- a/docs/build/generation.html +++ b/docs/build/generation.html @@ -221,7 +221,7 @@ third the rate of curvature along x axis curv_rate_x and the third
  • 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
+
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge --stl c 2 10 2 2
 
@@ -238,7 +238,7 @@ Optional parameters are height of the papilar lines and base thickness.

  • 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
+
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge --stl p 2 10
 
@@ -246,18 +246,18 @@ Optional parameters are height of the papilar lines and base thickness.

Mapping fingerprint to existing finger model#

Using m mode modifies the preexisting finger model to contain fingerprint. First optional parameter is papilar line height height_line, second is the number of iterations iter to make the finger mesh denser. Higher number of itertions results in denser finger mesh and better result. -The last three parameters are axis offsets for the finger, finger_x, finger_y, finger_z. -These control the location of the finger. They need to be set only if the user wants to move core of the print closer to the center of the finger.

+The next three parameters are axis offsets for the finger, finger_x, finger_y, finger_z. +These control the location of the finger. They need to be set only if the user wants to move core of the print closer to the center of the finger model. The last parameter finger_model allows the user to choose custom 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 iter finger_x finger_y finger_z
+
$ python3 src/main.py input_file output_file dpi --config config_file preset --stl m height_line iter finger_x finger_y finger_z finger_model
 
  • Working example of finger mapping

-
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json ridge --stl m 0.2 2 0 0 0
+
$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json new_ridge --stl m 0.2 2 0 0 0 res/finger_backup/finger.stl
 
diff --git a/docs/build/searchindex.js b/docs/build/searchindex.js index 684481e..db70b83 100644 --- a/docs/build/searchindex.js +++ b/docs/build/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["config", "config_parser", "filter_list", "filtering", "filters", "generation", "index", "installation", "log", "main", "modules", "stl_parser", "troubleshooting", "usage"], "filenames": ["config.rst", "config_parser.rst", "filter_list.rst", "filtering.rst", "filters.rst", "generation.rst", "index.rst", "installation.rst", "log.rst", "main.rst", "modules.rst", "stl_parser.rst", "troubleshooting.rst", "usage.rst"], "titles": ["Configuration and presets", "config_parser module", "Available filters with parameters", "Filtering images", "filters module", "Generating fingerprint models", "Generov\u00e1n\u00ed 3D modelu otisku prstu", "Installation", "log module", "main module", "src", "stl_parser module", "Troubleshooting", "Usage"], "terms": {"There": [0, 3], "i": [0, 1, 2, 3, 4, 5, 7, 9, 12], "an": [0, 2, 6, 9, 12], "option": [0, 5, 13], "input": [0, 3, 6, 9, 12, 13], "filter": [0, 1, 6, 9, 10, 12, 13], "seri": 0, "from": [0, 1, 3, 4, 6, 7, 9, 12, 13], "json": [0, 3, 5], "file": [0, 1, 3, 9, 11, 12, 13], "here": 0, "ar": [0, 1, 3, 5, 7, 12], "store": [0, 1, 9], "readi": [0, 3], "us": [0, 2, 3, 4, 5, 6, 7, 9, 13], "whenev": 0, "need": [0, 3, 5, 7, 9], "you": [0, 3, 7, 12, 13], "can": [0, 3, 6, 13], "usehow": 0, "mani": 0, "long": [0, 9], "like": 0, "output": [0, 3, 5, 9, 13], "It": [0, 5, 7], "therefor": 0, "highli": 0, "recommend": 0, "check": [0, 9, 12, 13], "after": 0, "everi": [0, 3], "chang": [0, 12], "exampl": [0, 3, 5, 7], "abov": 0, "list": [0, 1, 2, 3, 9, 13], "bellow": [0, 3, 7], "along": [0, 5], "gener": [0, 1, 6, 9, 12], "form": [0, 5, 13], "format": 0, "work": [0, 5, 7], "name": [0, 1, 3, 12, 13], "filter_nam": 0, "paramet": [0, 1, 3, 4, 5, 6, 9, 12, 13], "valu": [0, 1, 2, 4, 9, 13], "git_exampl": [0, 3, 5], "denoise_tv_chambol": [0, 4], "weight": [0, 2, 3], "0": [0, 3, 5, 9], "01": 0, "iter": [0, 5, 9, 13], "1": 0, "median": [0, 2, 3, 4, 6, 10], "ksize": [0, 2, 3], "3": [0, 7], "To": [0, 7], "avoid": 0, "accident": 0, "loss": 0, "inform": [0, 6], "caus": 0, "modifi": [0, 3, 5], "have": [0, 12], "been": [0, 6, 7], "stl": [0, 5, 9, 11, 12, 13], "insid": [0, 7], "db": 0, "thi": [0, 4, 5, 6, 7, 9, 13], "serv": [0, 9], "simpl": 0, "databas": [0, 1, 13], "ad": [0, 2, 9], "hash": [0, 9], "all": [0, 2, 3, 4, 7, 9], "also": [0, 7, 9], "save": [0, 1, 9], "current": [0, 2, 9], "command": [0, 1, 3, 5, 9, 11, 12], "line": [0, 1, 3, 4, 5, 9, 12], "set": [0, 1, 5, 7], "d": [0, 13], "switch": [0, 5, 13], "": [0, 6, 13], "new": [0, 3], "parse_conf": [1, 6, 10], "preset_nam": 1, "param": [1, 4, 8], "config_fil": [1, 5, 13], "pars": [1, 9, 11], "configur": [1, 3, 6], "one": [1, 4, 9], "wa": [1, 6], "specifi": 1, "preset": [1, 3, 5, 6, 12, 13], "load": [1, 3, 12], "dictionari": 1, "path": [1, 3, 13], "config": [1, 3, 5, 12, 13], "parse_param": [1, 6, 10], "none": [1, 9], "These": [1, 5], "later": [1, 7, 9], "default": 1, "method": 1, "appli": [1, 4, 6, 9, 10], "save_preset": [1, 6, 10], "store_to_db": [1, 6, 10], "overview": 2, "implement": [2, 4], "descript": 2, "below": 2, "blur": [2, 4], "int": 2, "kernel": [2, 4], "size": 2, "determin": 2, "how": [2, 7], "larg": 2, "area": 2, "process": [2, 6, 9, 12, 13], "gaussian": [2, 4, 6, 10], "sigma": [2, 4], "standart": 2, "deviat": 2, "further": 2, "pixel": [2, 4], "bilater": [2, 4, 6, 10], "diamet": 2, "neighborhood": 2, "sigmacolor": 2, "differ": 2, "color": [2, 4, 9], "sigmaspac": 2, "bilateral_scikit": [2, 4, 6, 10], "float": 2, "nlmean": [2, 4, 6, 10], "non": [2, 4], "local": [2, 4], "mean": [2, 4], "patch_siz": 2, "patch": 2, "denois": [2, 4], "patch_dist": 2, "distanc": [2, 4], "where": 2, "search": 2, "h": [2, 13], "cut": 2, "off": [2, 7], "higher": [2, 5], "more": [2, 5], "smooth": 2, "imag": [2, 4, 6, 9, 12, 13], "total_vari": [2, 3, 4, 6, 10], "much": [2, 4], "block_match": [2, 4, 6, 10], "unsharp_mask_scikit": [2, 4, 6, 10], "radiu": [2, 4], "amount": [2, 4], "strength": [2, 4], "unsharp": [2, 4], "mask": [2, 4], "farid": [2, 4, 6, 10], "meijer": [2, 4, 6, 10], "sato": [2, 4, 6, 10], "hessian": [2, 4, 6, 10], "invert": [2, 4, 6, 10], "scale_valu": [2, 4, 6, 10], "binar": [2, 4, 6, 10], "threshold": 2, "differenti": 2, "binarize_otsu": [2, 4, 6, 10], "add_margin": [2, 4, 6, 10], "margin": [2, 4], "number": [2, 5], "add": [2, 4, 9], "side": [2, 12], "newli": 2, "erod": [2, 4, 6, 10], "numpi": [2, 9], "matrix": 2, "shape": [2, 5], "dilat": [2, 4, 6, 10], "onc": 3, "requir": [3, 5, 6, 12], "instal": [3, 6], "applic": [1, 3, 4, 6, 7, 8, 9], "fingerprint": [1, 3, 6, 9, 12, 13], "sampl": 3, "locat": [3, 5], "re": [3, 5, 12], "its": [3, 5, 7, 12], "palec_p4": [3, 5], "tif": [3, 5, 12], "enter": [3, 7], "virtual": [3, 7], "enviro": [3, 7], "time": 3, "want": [3, 5, 12], "sourc": [3, 7], "venv": [3, 7], "bin": [3, 7], "activ": [3, 6, 7], "The": [3, 5, 6, 7, 12], "filenam": [3, 5, 9, 12], "includ": [3, 7, 12], "root": 3, "project": [3, 6, 9], "directori": [3, 7], "dpi": [3, 5, 12, 13], "shown": 3, "python3": [3, 5, 7, 13], "src": [3, 5, 6, 13], "main": [3, 5, 6, 10, 11, 12, 13], "py": [3, 5, 11, 12, 13], "input_fil": [3, 5, 12, 13], "output_fil": [3, 5, 12, 13], "two": [3, 6], "wai": 3, "manual": 3, "palec_p4_from_clin": 3, "png": [3, 5], "600": [3, 5], "15": 3, "5": 3, "them": 3, "tune": 3, "exist": [3, 6, 12], "creat": [3, 7, 9, 13], "ones": 3, "palec_p4_from_preset": [3, 5], "conf": [3, 5], "brief": [], "librari": [4, 6, 9, 12], "author": [], "xlanro00": 7, "class": [4, 9], "img": 4, "base": [4, 5, 9, 12], "img_filt": [4, 6, 10], "init": [4, 6, 10], "opencv": [4, 9], "skimag": 4, "denoise_bilater": 4, "averag": 4, "similar": 4, "preserv": 4, "edg": 4, "while": 4, "remov": 4, "unwant": 4, "nois": 4, "slower": 4, "than": [4, 12], "otsu": 4, "_": 4, "block": 4, "match": 4, "bm3d": 4, "veri": 4, "slow": 4, "should": [4, 7, 9, 12], "onli": [4, 5, 7, 12], "small": 4, "morpholog": 4, "oper": 4, "eros": 4, "find": 4, "scikit": 4, "easier": 4, "version": [4, 7], "object": 4, "parent": 4, "bitwise_not": 4, "over": [4, 9], "limit": 4, "5x5": 4, "continu": 4, "ridg": [4, 5], "exctract": 4, "scale": [4, 9], "entir": 4, "rang": [4, 12], "data": [4, 9], "type": [4, 5], "height": [4, 5, 9, 12], "issu": 4, "perform": 4, "total": 4, "variat": 4, "techniqu": 4, "origin": [4, 9], "chambol": 4, "paper": 4, "fine": 4, "detail": 4, "unsharp_mask_pil": [4, 6, 10], "pil": 4, "subtract": 4, "regul": 4, "better": [4, 5], "result": [4, 5], "possibl": [5, 7], "first": [5, 6, 12], "which": [5, 7, 9, 13], "If": [5, 9], "mode": [5, 9, 12], "c": [5, 9, 12, 13], "follow": [5, 12, 13], "control": 5, "papilar": [5, 9], "height_lin": [5, 13], "second": [5, 6], "thick": [5, 12], "height_bas": [5, 13], "third": 5, "rate": 5, "curvatur": 5, "x": 5, "axi": 5, "curv_rate_x": [5, 13], "y": 5, "curv_rate_i": [5, 13], "curvature_x": 5, "curvature_i": 5, "2": 5, "10": [5, 7], "p": [5, 12, 13], "make": [5, 6], "flat": 5, "m": [5, 12, 13], "preexist": 5, "contain": [5, 9], "mesh": [5, 9], "denser": 5, "itert": 5, "last": 5, "three": 5, "offset": [5, 9], "finger_x": [5, 12, 13], "finger_i": [5, 12, 13], "finger_z": [5, 12, 13], "thei": 5, "user": 5, "move": 5, "core": 5, "print": [5, 6, 8, 9, 11, 13], "closer": 5, "center": 5, "ha": [6, 7, 9], "develop": 6, "part": 6, "bachelor": 6, "thesi": 6, "brno": 6, "univers": 6, "technologi": 6, "faculti": 6, "topic": 6, "model": [1, 6, 9, 12, 13], "consist": 6, "custom": 6, "enhanc": 6, "sever": [6, 7], "import": 6, "modul": [6, 7, 10], "accur": 6, "represent": 6, "human": 6, "printer": 6, "either": 6, "planar": [6, 12], "curv": [6, 9, 12], "map": [6, 9, 12], "finger": [6, 9, 12], "still": 6, "under": 6, "get": [6, 9], "start": 6, "avail": 6, "usag": 6, "troubleshoot": 6, "config_pars": [6, 10], "log": [6, 10], "error_exit": [6, 8, 10], "print_messag": [6, 8, 10], "fingerprint_app": [6, 9, 10], "__init__": [6, 9, 10], "parse_argu": [6, 9, 10], "parse_stl": [6, 9, 10], "run_filt": [6, 9, 10], "get_empty_figur": [6, 9, 10], "mirror_imag": [6, 9, 10], "apply_filt": [6, 9, 10], "save_imag": [6, 9, 10], "run_stl": [6, 9, 10], "prepare_heightmap": [6, 9, 10], "write_stl_head": [6, 9, 10], "get_id": [6, 9, 10], "append_fac": [6, 9, 10], "engrave_text": [6, 9, 10], "create_stl_mesh": [6, 9, 10], "create_fac": [6, 9, 10], "make_stl_planar": [6, 9, 10], "make_stl_curv": [6, 9, 10], "make_stl_map": [6, 9, 10], "save_stl": [6, 9, 10], "stl_parser": [6, 10], "test": 7, "ubuntu": 7, "gnu": 7, "linux": 7, "machin": 7, "howev": 7, "most": 7, "distribut": 7, "wsl": 7, "succesfulli": 7, "python": 7, "might": 7, "earlier": 7, "sudo": 7, "apt": 7, "virtualenv": 7, "packag": 7, "creation": 7, "other": [7, 12], "automat": 7, "pip": 7, "compon": 7, "document": 7, "go": 7, "suitabl": 7, "folder": 7, "cd": 7, "home": 7, "usernam": 7, "clone": 7, "repositori": 7, "git": 7, "ssh": 7, "strade": 7, "fit": [7, 9], "vutbr": 7, "cz": 7, "3022": 7, "bp_dp": 7, "txt": 7, "r": 7, "now": 7, "run": [7, 11], "do": 7, "listedin": 7, "section": 7, "function": [8, 9], "error_messag": 8, "given": [8, 9], "error": [8, 12], "messag": [8, 12, 13], "exit": [8, 13], "arg": 8, "kwarg": 8, "stderr": 8, "argument": [9, 11, 12, 13], "argpars": 9, "read": 9, "arrai": 9, "uint8": 9, "grayscal": 9, "call": 9, "return": 9, "empti": 9, "figur": 9, "ax": 9, "dimens": 9, "mirror": [9, 13], "we": [], "posit": [12, 13], "In": [9, 12], "case": 9, "were": 9, "pass": 9, "fig": 9, "render": 9, "heightmap": 9, "255": 9, "Then": 9, "comput": 9, "valid": 9, "prepar": 9, "meshgrid": 9, "point": 9, "coordin": 9, "write": 9, "string": 9, "header": [9, 11], "80": 9, "byte": 9, "so": 9, "shorten": 9, "too": 9, "warn": 9, "truncat": 9, "uniqu": 9, "id": 9, "backsid": 9, "md5": 9, "face": 9, "indic": 9, "engrav": 9, "text": 9, "back": 9, "fill": 9, "draw": 9, "bottom_vert_arr": 9, "bottom": 9, "vertex": 9, "top_vert_arr": 9, "top": 9, "vertic": 9, "vector": 9, "append": 9, "depth": 12, "surfac": 9, "final": 9, "util": 11, "preformat": 11, "solut": 12, "probabl": 12, "forgot": 12, "some": 12, "palec_p14": 12, "doe": 12, "again": 12, "found": 12, "present": 12, "select": 12, "correct": [9, 12], "undefined_filt": 12, "One": 12, "defin": 12, "unrecogn": 12, "must": 12, "less": 12, "plate": 12, "when": [12, 13], "cast": 12, "thckness": 12, "otherwis": 12, "would": 12, "hole": 12, "cannot": 12, "neg": 12, "order": 12, "both": 12, "ani": 12, "outsid": 12, "noth": 12, "try": 12, "doubt": 13, "alwai": 13, "help": 13, "out": 13, "stl_file": 13, "database_filenam": 13, "program": 13, "2d": 13, "3d": [1, 13], "scanner": 13, "filter_name1": 13, "param1": 13, "param2": 13, "filter_name2": 13, "show": 13, "pair": 13, "parser": 1, "cancel": 9, "implicit": 9, "choos": 9, "code": 9, "z": 9}, "objects": {"": [[1, 0, 0, "-", "config_parser"], [4, 0, 0, "-", "filters"], [8, 0, 0, "-", "log"]], "config_parser": [[1, 1, 1, "", "parse_conf"], [1, 1, 1, "", "parse_params"], [1, 1, 1, "", "save_preset"], [1, 1, 1, "", "store_to_db"]], "filters": [[4, 2, 1, "", "add_margin"], [4, 2, 1, "", "bilateral"], [4, 2, 1, "", "bilateral_scikit"], [4, 2, 1, "", "binarize"], [4, 2, 1, "", "binarize_otsu"], [4, 2, 1, "", "block_match"], [4, 2, 1, "", "dilate"], [4, 2, 1, "", "erode"], [4, 2, 1, "", "farid"], [4, 2, 1, "", "gaussian"], [4, 2, 1, "", "hessian"], [4, 2, 1, "", "img_filter"], [4, 2, 1, "", "invert"], [4, 2, 1, "", "median"], [4, 2, 1, "", "meijering"], [4, 2, 1, "", "nlmeans"], [4, 2, 1, "", "sato"], [4, 2, 1, "", "scale_values"], [4, 2, 1, "", "total_variation"], [4, 2, 1, "", "unsharp_mask_pil"], [4, 2, 1, "", "unsharp_mask_scikit"]], "filters.add_margin": [[4, 3, 1, "", "apply"], [4, 3, 1, "", "init"]], "filters.bilateral": [[4, 3, 1, "", "apply"]], "filters.bilateral_scikit": [[4, 3, 1, "", "apply"]], "filters.binarize": [[4, 3, 1, "", "apply"], [4, 3, 1, "", "init"]], "filters.binarize_otsu": [[4, 3, 1, "", "apply"], [4, 3, 1, "", "init"]], "filters.block_match": [[4, 3, 1, "", "apply"]], "filters.dilate": [[4, 3, 1, "", "apply"]], "filters.erode": [[4, 3, 1, "", "apply"]], "filters.farid": [[4, 3, 1, "", "apply"]], "filters.gaussian": [[4, 3, 1, "", "apply"]], "filters.hessian": [[4, 3, 1, "", "apply"]], "filters.invert": [[4, 3, 1, "", "apply"]], "filters.median": [[4, 3, 1, "", "apply"]], "filters.meijering": [[4, 3, 1, "", "apply"]], "filters.nlmeans": [[4, 3, 1, "", "apply"]], "filters.sato": [[4, 3, 1, "", "apply"]], "filters.scale_values": [[4, 3, 1, "", "apply"]], "filters.total_variation": [[4, 3, 1, "", "apply"]], "filters.unsharp_mask_pil": [[4, 3, 1, "", "apply"]], "filters.unsharp_mask_scikit": [[4, 3, 1, "", "apply"]], "log": [[8, 1, 1, "", "error_exit"], [8, 1, 1, "", "print_message"]], "main": [[9, 1, 1, "", "__init__"], [9, 1, 1, "", "append_faces"], [9, 1, 1, "", "apply_filters"], [9, 1, 1, "", "create_faces"], [9, 1, 1, "", "create_stl_mesh"], [9, 1, 1, "", "engrave_text"], [9, 2, 1, "", "fingerprint_app"], [9, 1, 1, "", "get_ID"], [9, 1, 1, "", "get_empty_figure"], [9, 1, 1, "", "make_stl_curved"], [9, 1, 1, "", "make_stl_map"], [9, 1, 1, "", "make_stl_planar"], [9, 1, 1, "", "mirror_image"], [9, 1, 1, "", "parse_arguments"], [9, 1, 1, "", "parse_stl"], [9, 1, 1, "", "prepare_heightmap"], [9, 1, 1, "", "run_filtering"], [9, 1, 1, "", "run_stl"], [9, 1, 1, "", "save_image"], [9, 1, 1, "", "save_stl"], [9, 1, 1, "", "write_stl_header"]], "stl_parser": [[11, 1, 1, "", "stl_parser"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"]}, "titleterms": {"configur": 0, "preset": 0, "config_pars": 1, "modul": [1, 4, 8, 9, 11], "avail": 2, "filter": [2, 3, 4], "paramet": 2, "imag": 3, "gener": 5, "fingerprint": 5, "model": 5, "curv": 5, "planar": 5, "finger": 5, "map": 5, "exist": 5, "generov\u00e1n\u00ed": 6, "3d": 6, "modelu": 6, "otisku": 6, "prstu": 6, "content": 6, "instal": 7, "requir": 7, "get": 7, "start": 7, "log": 8, "main": 9, "src": 10, "stl_parser": 11, "troubleshoot": 12, "usag": 13}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Configuration and presets": [[0, "configuration-and-presets"]], "Available filters with parameters": [[2, "available-filters-with-parameters"]], "Filtering images": [[3, "filtering-images"]], "Generating fingerprint models": [[5, "generating-fingerprint-models"]], "Generating curved fingerprint model": [[5, "generating-curved-fingerprint-model"]], "Generating planar finger model": [[5, "generating-planar-finger-model"]], "Mapping fingerprint to existing finger model": [[5, "mapping-fingerprint-to-existing-finger-model"]], "Generov\u00e1n\u00ed 3D modelu otisku prstu": [[6, "generovani-3d-modelu-otisku-prstu"]], "Contents": [[6, "contents"]], "Installation": [[7, "installation"]], "Requirements": [[7, "requirements"]], "Getting started": [[7, "getting-started"]], "src": [[10, "src"]], "Troubleshooting": [[12, "troubleshooting"]], "Usage": [[13, "usage"]], "config_parser module": [[1, "module-config_parser"]], "filters module": [[4, "module-filters"]], "log module": [[8, "module-log"]], "main module": [[9, "main-module"]], "stl_parser module": [[11, "stl-parser-module"]]}, "indexentries": {"config_parser": [[1, "module-config_parser"]], "module": [[1, "module-config_parser"], [4, "module-filters"], [8, "module-log"]], "parse_conf() (in module config_parser)": [[1, "config_parser.parse_conf"]], "parse_params() (in module config_parser)": [[1, "config_parser.parse_params"]], "save_preset() (in module config_parser)": [[1, "config_parser.save_preset"]], "store_to_db() (in module config_parser)": [[1, "config_parser.store_to_db"]], "add_margin (class in filters)": [[4, "filters.add_margin"]], "apply() (filters.add_margin method)": [[4, "filters.add_margin.apply"]], "apply() (filters.bilateral method)": [[4, "filters.bilateral.apply"]], "apply() (filters.bilateral_scikit method)": [[4, "filters.bilateral_scikit.apply"]], "apply() (filters.binarize method)": [[4, "filters.binarize.apply"]], "apply() (filters.binarize_otsu method)": [[4, "filters.binarize_otsu.apply"]], "apply() (filters.block_match method)": [[4, "filters.block_match.apply"]], "apply() (filters.dilate method)": [[4, "filters.dilate.apply"]], "apply() (filters.erode method)": [[4, "filters.erode.apply"]], "apply() (filters.farid method)": [[4, "filters.farid.apply"]], "apply() (filters.gaussian method)": [[4, "filters.gaussian.apply"]], "apply() (filters.hessian method)": [[4, "filters.hessian.apply"]], "apply() (filters.invert method)": [[4, "filters.invert.apply"]], "apply() (filters.median method)": [[4, "filters.median.apply"]], "apply() (filters.meijering method)": [[4, "filters.meijering.apply"]], "apply() (filters.nlmeans method)": [[4, "filters.nlmeans.apply"]], "apply() (filters.sato method)": [[4, "filters.sato.apply"]], "apply() (filters.scale_values method)": [[4, "filters.scale_values.apply"]], "apply() (filters.total_variation method)": [[4, "filters.total_variation.apply"]], "apply() (filters.unsharp_mask_pil method)": [[4, "filters.unsharp_mask_pil.apply"]], "apply() (filters.unsharp_mask_scikit method)": [[4, "filters.unsharp_mask_scikit.apply"]], "bilateral (class in filters)": [[4, "filters.bilateral"]], "bilateral_scikit (class in filters)": [[4, "filters.bilateral_scikit"]], "binarize (class in filters)": [[4, "filters.binarize"]], "binarize_otsu (class in filters)": [[4, "filters.binarize_otsu"]], "block_match (class in filters)": [[4, "filters.block_match"]], "dilate (class in filters)": [[4, "filters.dilate"]], "erode (class in filters)": [[4, "filters.erode"]], "farid (class in filters)": [[4, "filters.farid"]], "filters": [[4, "module-filters"]], "gaussian (class in filters)": [[4, "filters.gaussian"]], "hessian (class in filters)": [[4, "filters.hessian"]], "img_filter (class in filters)": [[4, "filters.img_filter"]], "init() (filters.add_margin method)": [[4, "filters.add_margin.init"]], "init() (filters.binarize method)": [[4, "filters.binarize.init"]], "init() (filters.binarize_otsu method)": [[4, "filters.binarize_otsu.init"]], "invert (class in filters)": [[4, "filters.invert"]], "median (class in filters)": [[4, "filters.median"]], "meijering (class in filters)": [[4, "filters.meijering"]], "nlmeans (class in filters)": [[4, "filters.nlmeans"]], "sato (class in filters)": [[4, "filters.sato"]], "scale_values (class in filters)": [[4, "filters.scale_values"]], "total_variation (class in filters)": [[4, "filters.total_variation"]], "unsharp_mask_pil (class in filters)": [[4, "filters.unsharp_mask_pil"]], "unsharp_mask_scikit (class in filters)": [[4, "filters.unsharp_mask_scikit"]], "error_exit() (in module log)": [[8, "log.error_exit"]], "log": [[8, "module-log"]], "print_message() (in module log)": [[8, "log.print_message"]], "built-in function": [[9, "main.__init__"], [9, "main.append_faces"], [9, "main.apply_filters"], [9, "main.create_faces"], [9, "main.create_stl_mesh"], [9, "main.engrave_text"], [9, "main.get_ID"], [9, "main.get_empty_figure"], [9, "main.make_stl_curved"], [9, "main.make_stl_map"], [9, "main.make_stl_planar"], [9, "main.mirror_image"], [9, "main.parse_arguments"], [9, "main.parse_stl"], [9, "main.prepare_heightmap"], [9, "main.run_filtering"], [9, "main.run_stl"], [9, "main.save_image"], [9, "main.save_stl"], [9, "main.write_stl_header"], [11, "stl_parser.stl_parser"]], "main.__init__()": [[9, "main.__init__"]], "main.append_faces()": [[9, "main.append_faces"]], "main.apply_filters()": [[9, "main.apply_filters"]], "main.create_faces()": [[9, "main.create_faces"]], "main.create_stl_mesh()": [[9, "main.create_stl_mesh"]], "main.engrave_text()": [[9, "main.engrave_text"]], "main.fingerprint_app (built-in class)": [[9, "main.fingerprint_app"]], "main.get_id()": [[9, "main.get_ID"]], "main.get_empty_figure()": [[9, "main.get_empty_figure"]], "main.make_stl_curved()": [[9, "main.make_stl_curved"]], "main.make_stl_map()": [[9, "main.make_stl_map"]], "main.make_stl_planar()": [[9, "main.make_stl_planar"]], "main.mirror_image()": [[9, "main.mirror_image"]], "main.parse_arguments()": [[9, "main.parse_arguments"]], "main.parse_stl()": [[9, "main.parse_stl"]], "main.prepare_heightmap()": [[9, "main.prepare_heightmap"]], "main.run_filtering()": [[9, "main.run_filtering"]], "main.run_stl()": [[9, "main.run_stl"]], "main.save_image()": [[9, "main.save_image"]], "main.save_stl()": [[9, "main.save_stl"]], "main.write_stl_header()": [[9, "main.write_stl_header"]], "stl_parser.stl_parser()": [[11, "stl_parser.stl_parser"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["config", "config_parser", "filter_list", "filtering", "filters", "generation", "index", "installation", "log", "main", "modules", "stl_parser", "troubleshooting", "usage"], "filenames": ["config.rst", "config_parser.rst", "filter_list.rst", "filtering.rst", "filters.rst", "generation.rst", "index.rst", "installation.rst", "log.rst", "main.rst", "modules.rst", "stl_parser.rst", "troubleshooting.rst", "usage.rst"], "titles": ["Configuration and presets", "config_parser module", "Available filters with parameters", "Filtering images", "filters module", "Generating fingerprint models", "Generov\u00e1n\u00ed 3D modelu otisku prstu", "Installation", "log module", "main module", "src", "stl_parser module", "Troubleshooting", "Usage"], "terms": {"There": [0, 3], "i": [0, 1, 2, 3, 4, 5, 7, 9, 12], "an": [0, 2, 6, 9, 12], "option": [0, 5, 13], "input": [0, 3, 6, 9, 12, 13], "filter": [0, 1, 6, 9, 10, 12, 13], "seri": 0, "from": [0, 1, 3, 4, 6, 7, 9, 12, 13], "json": [0, 3, 5], "file": [0, 1, 3, 9, 11, 12, 13], "here": 0, "ar": [0, 1, 3, 5, 7, 12], "store": [0, 1, 9], "readi": [0, 3], "us": [0, 2, 3, 4, 5, 6, 7, 9, 13], "whenev": 0, "need": [0, 3, 5, 7, 9], "you": [0, 3, 7, 12, 13], "can": [0, 3, 6, 13], "usehow": 0, "mani": 0, "long": [0, 9], "like": 0, "output": [0, 3, 5, 9, 13], "It": [0, 5, 7], "therefor": 0, "highli": 0, "recommend": 0, "check": [0, 9, 12, 13], "after": 0, "everi": [0, 3], "chang": [0, 12], "exampl": [0, 3, 5, 7], "abov": 0, "list": [0, 1, 2, 3, 9, 13], "bellow": [0, 3, 7], "along": [0, 5], "gener": [0, 1, 6, 9, 12], "form": [0, 5, 13], "format": 0, "work": [0, 5, 7], "name": [0, 1, 3, 12, 13], "filter_nam": 0, "paramet": [0, 1, 3, 4, 5, 6, 9, 12, 13], "valu": [0, 1, 2, 4, 9, 13], "git_exampl": 0, "denoise_tv_chambol": [0, 4], "weight": [0, 2, 3], "0": [0, 3, 5, 9], "01": 0, "iter": [0, 5, 9, 13], "1": 0, "median": [0, 2, 3, 4, 6, 10], "ksize": [0, 2, 3], "3": [0, 7], "To": [0, 7], "avoid": 0, "accident": 0, "loss": 0, "inform": [0, 6], "caus": 0, "modifi": [0, 3, 5], "have": [0, 12], "been": [0, 6, 7], "stl": [0, 5, 9, 11, 12, 13], "insid": [0, 7], "db": 0, "thi": [0, 4, 5, 6, 7, 9, 13], "serv": [0, 9], "simpl": 0, "databas": [0, 1, 13], "ad": [0, 2, 9], "hash": [0, 9], "all": [0, 2, 3, 4, 7, 9], "also": [0, 7, 9], "save": [0, 1, 9], "current": [0, 2, 9], "command": [0, 1, 3, 5, 9, 11, 12], "line": [0, 1, 3, 4, 5, 9, 12], "set": [0, 1, 5, 7], "d": [0, 13], "switch": [0, 5, 13], "": [0, 6, 13], "new": [0, 3], "parse_conf": [1, 6, 10], "preset_nam": 1, "param": [1, 4, 8], "config_fil": [1, 5, 13], "pars": [1, 9, 11], "configur": [1, 3, 6], "one": [1, 4, 9], "wa": [1, 6], "specifi": 1, "preset": [1, 3, 5, 6, 12, 13], "load": [1, 3, 12], "dictionari": 1, "path": [1, 3, 13], "config": [1, 3, 5, 12, 13], "parse_param": [1, 6, 10], "none": [1, 9], "These": [1, 5], "later": [1, 7, 9], "default": 1, "method": 1, "appli": [1, 4, 6, 9, 10], "save_preset": [1, 6, 10], "store_to_db": [1, 6, 10], "overview": 2, "implement": [2, 4], "descript": 2, "below": 2, "blur": [2, 4], "int": 2, "kernel": [2, 4], "size": 2, "determin": 2, "how": [2, 7], "larg": 2, "area": 2, "process": [2, 6, 9, 12, 13], "gaussian": [2, 4, 6, 10], "sigma": [2, 4], "standart": 2, "deviat": 2, "further": 2, "pixel": [2, 4], "bilater": [2, 4, 6, 10], "diamet": 2, "neighborhood": 2, "sigmacolor": 2, "differ": 2, "color": [2, 4, 9], "sigmaspac": 2, "bilateral_scikit": [2, 4, 6, 10], "float": 2, "nlmean": [2, 4, 6, 10], "non": [2, 4], "local": [2, 4], "mean": [2, 4], "patch_siz": 2, "patch": 2, "denois": [2, 4], "patch_dist": 2, "distanc": [2, 4], "where": 2, "search": 2, "h": [2, 13], "cut": 2, "off": [2, 7], "higher": [2, 5], "more": [2, 5], "smooth": 2, "imag": [2, 4, 6, 9, 12, 13], "total_vari": [2, 3, 4, 6, 10], "much": [2, 4], "block_match": [2, 4, 6, 10], "unsharp_mask_scikit": [2, 4, 6, 10], "radiu": [2, 4], "amount": [2, 4], "strength": [2, 4], "unsharp": [2, 4], "mask": [2, 4], "farid": [2, 4, 6, 10], "meijer": [2, 4, 6, 10], "sato": [2, 4, 6, 10], "hessian": [2, 4, 6, 10], "invert": [2, 4, 6, 10], "scale_valu": [2, 4, 6, 10], "binar": [2, 4, 6, 10], "threshold": 2, "differenti": 2, "binarize_otsu": [2, 4, 6, 10], "add_margin": [2, 4, 6, 10], "margin": [2, 4], "number": [2, 5], "add": [2, 4, 9], "side": [2, 12], "newli": 2, "erod": [2, 4, 6, 10], "numpi": [2, 9], "matrix": 2, "shape": [2, 5], "dilat": [2, 4, 6, 10], "onc": 3, "requir": [3, 5, 6, 12], "instal": [3, 6], "applic": [1, 3, 4, 6, 7, 8, 9], "fingerprint": [1, 3, 6, 9, 12, 13], "sampl": 3, "locat": [3, 5], "re": [3, 5, 12], "its": [3, 5, 7, 12], "palec_p4": [3, 5], "tif": [3, 5, 12], "enter": [3, 7], "virtual": [3, 7], "enviro": [3, 7], "time": 3, "want": [3, 5, 12], "sourc": [3, 7], "venv": [3, 7], "bin": [3, 7], "activ": [3, 6, 7], "The": [3, 5, 6, 7, 12], "filenam": [3, 5, 9, 12], "includ": [3, 7, 12], "root": 3, "project": [3, 6, 9], "directori": [3, 7], "dpi": [3, 5, 12, 13], "shown": 3, "python3": [3, 5, 7, 13], "src": [3, 5, 6, 13], "main": [3, 5, 6, 10, 11, 12, 13], "py": [3, 5, 11, 12, 13], "input_fil": [3, 5, 12, 13], "output_fil": [3, 5, 12, 13], "two": [3, 6], "wai": 3, "manual": 3, "palec_p4_from_clin": 3, "png": [3, 5], "600": [3, 5], "15": 3, "5": 3, "them": 3, "tune": 3, "exist": [3, 6, 12], "creat": [3, 7, 9, 13], "ones": 3, "palec_p4_from_preset": [3, 5], "conf": [3, 5], "brief": [], "librari": [4, 6, 9, 12], "author": [], "xlanro00": 7, "class": [4, 9], "img": 4, "base": [4, 5, 9, 12], "img_filt": [4, 6, 10], "init": [4, 6, 10], "opencv": [4, 9], "skimag": 4, "denoise_bilater": 4, "averag": 4, "similar": 4, "preserv": 4, "edg": 4, "while": 4, "remov": 4, "unwant": 4, "nois": 4, "slower": 4, "than": [4, 12], "otsu": 4, "_": 4, "block": 4, "match": 4, "bm3d": 4, "veri": 4, "slow": 4, "should": [4, 7, 9, 12], "onli": [4, 5, 7, 12], "small": 4, "morpholog": 4, "oper": 4, "eros": 4, "find": 4, "scikit": 4, "easier": 4, "version": [4, 7], "object": 4, "parent": 4, "bitwise_not": 4, "over": [4, 9], "limit": 4, "5x5": 4, "continu": 4, "ridg": 4, "exctract": 4, "scale": [4, 9], "entir": 4, "rang": [4, 12], "data": [4, 9], "type": [4, 5], "height": [4, 5, 9, 12], "issu": 4, "perform": 4, "total": 4, "variat": 4, "techniqu": 4, "origin": [4, 9], "chambol": 4, "paper": 4, "fine": 4, "detail": 4, "unsharp_mask_pil": [4, 6, 10], "pil": 4, "subtract": 4, "regul": 4, "better": [4, 5], "result": [4, 5], "possibl": [5, 7], "first": [5, 6, 12], "which": [5, 7, 9, 13], "If": [5, 9], "mode": [5, 9, 12], "c": [5, 9, 12, 13], "follow": [5, 12, 13], "control": 5, "papilar": [5, 9], "height_lin": [5, 13], "second": [5, 6], "thick": [5, 12], "height_bas": [5, 13], "third": 5, "rate": 5, "curvatur": 5, "x": 5, "axi": 5, "curv_rate_x": [5, 13], "y": 5, "curv_rate_i": [5, 13], "curvature_x": 5, "curvature_i": 5, "2": 5, "10": [5, 7], "p": [5, 12, 13], "make": [5, 6], "flat": 5, "m": [5, 12, 13], "preexist": 5, "contain": [5, 9], "mesh": [5, 9], "denser": 5, "itert": 5, "last": 5, "three": 5, "offset": [5, 9], "finger_x": [5, 12, 13], "finger_i": [5, 12, 13], "finger_z": [5, 12, 13], "thei": 5, "user": 5, "move": 5, "core": 5, "print": [5, 6, 8, 9, 11, 13], "closer": 5, "center": 5, "ha": [6, 7, 9], "develop": 6, "part": 6, "bachelor": 6, "thesi": 6, "brno": 6, "univers": 6, "technologi": 6, "faculti": 6, "topic": 6, "model": [1, 6, 9, 12, 13], "consist": 6, "custom": [5, 6], "enhanc": 6, "sever": [6, 7], "import": 6, "modul": [6, 7, 10], "accur": 6, "represent": 6, "human": 6, "printer": 6, "either": 6, "planar": [6, 12], "curv": [6, 9, 12], "map": [6, 9, 12], "finger": [6, 9, 12], "still": 6, "under": 6, "get": [6, 9], "start": 6, "avail": 6, "usag": 6, "troubleshoot": 6, "config_pars": [6, 10], "log": [6, 10], "error_exit": [6, 8, 10], "print_messag": [6, 8, 10], "fingerprint_app": [6, 9, 10], "__init__": [6, 9, 10], "parse_argu": [6, 9, 10], "parse_stl": [6, 9, 10], "run_filt": [6, 9, 10], "get_empty_figur": [6, 9, 10], "mirror_imag": [6, 9, 10], "apply_filt": [6, 9, 10], "save_imag": [6, 9, 10], "run_stl": [6, 9, 10], "prepare_heightmap": [6, 9, 10], "write_stl_head": [6, 9, 10], "get_id": [6, 9, 10], "append_fac": [6, 9, 10], "engrave_text": [6, 9, 10], "create_stl_mesh": [6, 9, 10], "create_fac": [6, 9, 10], "make_stl_planar": [6, 9, 10], "make_stl_curv": [6, 9, 10], "make_stl_map": [6, 9, 10], "save_stl": [6, 9, 10], "stl_parser": [6, 10], "test": 7, "ubuntu": 7, "gnu": 7, "linux": 7, "machin": 7, "howev": 7, "most": 7, "distribut": 7, "wsl": 7, "succesfulli": 7, "python": 7, "might": 7, "earlier": 7, "sudo": 7, "apt": 7, "virtualenv": 7, "packag": 7, "creation": 7, "other": [7, 12], "automat": 7, "pip": 7, "compon": 7, "document": 7, "go": 7, "suitabl": 7, "folder": 7, "cd": 7, "home": 7, "usernam": 7, "clone": 7, "repositori": 7, "git": 7, "ssh": 7, "strade": 7, "fit": [7, 9], "vutbr": 7, "cz": 7, "3022": 7, "bp_dp": 7, "txt": 7, "r": 7, "now": 7, "run": [7, 11], "do": 7, "listedin": 7, "section": 7, "function": [8, 9], "error_messag": 8, "given": [8, 9], "error": [8, 12], "messag": [8, 12, 13], "exit": [8, 13], "arg": 8, "kwarg": 8, "stderr": 8, "argument": [9, 11, 12, 13], "argpars": 9, "read": 9, "arrai": 9, "uint8": 9, "grayscal": 9, "call": 9, "return": 9, "empti": 9, "figur": 9, "ax": 9, "dimens": 9, "mirror": [9, 13], "we": [], "posit": [12, 13], "In": [9, 12], "case": 9, "were": 9, "pass": 9, "fig": 9, "render": 9, "heightmap": 9, "255": 9, "Then": 9, "comput": 9, "valid": 9, "prepar": 9, "meshgrid": 9, "point": 9, "coordin": 9, "write": 9, "string": 9, "header": [9, 11], "80": 9, "byte": 9, "so": 9, "shorten": 9, "too": 9, "warn": 9, "truncat": 9, "uniqu": 9, "id": 9, "backsid": 9, "md5": 9, "face": 9, "indic": 9, "engrav": 9, "text": 9, "back": 9, "fill": 9, "draw": 9, "bottom_vert_arr": 9, "bottom": 9, "vertex": 9, "top_vert_arr": 9, "top": 9, "vertic": 9, "vector": 9, "append": 9, "depth": 12, "surfac": 9, "final": 9, "util": 11, "preformat": 11, "solut": 12, "probabl": 12, "forgot": 12, "some": 12, "palec_p14": 12, "doe": 12, "again": 12, "found": 12, "present": 12, "select": 12, "correct": [9, 12], "undefined_filt": 12, "One": 12, "defin": 12, "unrecogn": 12, "must": 12, "less": 12, "plate": 12, "when": [12, 13], "cast": 12, "thckness": 12, "otherwis": 12, "would": 12, "hole": 12, "cannot": 12, "neg": 12, "order": 12, "both": 12, "ani": 12, "outsid": 12, "noth": 12, "try": 12, "doubt": 13, "alwai": 13, "help": 13, "out": 13, "stl_file": 13, "database_filenam": 13, "program": 13, "2d": 13, "3d": [1, 13], "scanner": 13, "filter_name1": 13, "param1": 13, "param2": 13, "filter_name2": 13, "show": 13, "pair": 13, "parser": 1, "cancel": 9, "implicit": 9, "choos": [5, 9], "code": 9, "z": 9, "new_ridg": [3, 5], "next": 5, "finger_model": [5, 13], "allow": 5, "finger_backup": 5}, "objects": {"": [[1, 0, 0, "-", "config_parser"], [4, 0, 0, "-", "filters"], [8, 0, 0, "-", "log"]], "config_parser": [[1, 1, 1, "", "parse_conf"], [1, 1, 1, "", "parse_params"], [1, 1, 1, "", "save_preset"], [1, 1, 1, "", "store_to_db"]], "filters": [[4, 2, 1, "", "add_margin"], [4, 2, 1, "", "bilateral"], [4, 2, 1, "", "bilateral_scikit"], [4, 2, 1, "", "binarize"], [4, 2, 1, "", "binarize_otsu"], [4, 2, 1, "", "block_match"], [4, 2, 1, "", "dilate"], [4, 2, 1, "", "erode"], [4, 2, 1, "", "farid"], [4, 2, 1, "", "gaussian"], [4, 2, 1, "", "hessian"], [4, 2, 1, "", "img_filter"], [4, 2, 1, "", "invert"], [4, 2, 1, "", "median"], [4, 2, 1, "", "meijering"], [4, 2, 1, "", "nlmeans"], [4, 2, 1, "", "sato"], [4, 2, 1, "", "scale_values"], [4, 2, 1, "", "total_variation"], [4, 2, 1, "", "unsharp_mask_pil"], [4, 2, 1, "", "unsharp_mask_scikit"]], "filters.add_margin": [[4, 3, 1, "", "apply"], [4, 3, 1, "", "init"]], "filters.bilateral": [[4, 3, 1, "", "apply"]], "filters.bilateral_scikit": [[4, 3, 1, "", "apply"]], "filters.binarize": [[4, 3, 1, "", "apply"], [4, 3, 1, "", "init"]], "filters.binarize_otsu": [[4, 3, 1, "", "apply"], [4, 3, 1, "", "init"]], "filters.block_match": [[4, 3, 1, "", "apply"]], "filters.dilate": [[4, 3, 1, "", "apply"]], "filters.erode": [[4, 3, 1, "", "apply"]], "filters.farid": [[4, 3, 1, "", "apply"]], "filters.gaussian": [[4, 3, 1, "", "apply"]], "filters.hessian": [[4, 3, 1, "", "apply"]], "filters.invert": [[4, 3, 1, "", "apply"]], "filters.median": [[4, 3, 1, "", "apply"]], "filters.meijering": [[4, 3, 1, "", "apply"]], "filters.nlmeans": [[4, 3, 1, "", "apply"]], "filters.sato": [[4, 3, 1, "", "apply"]], "filters.scale_values": [[4, 3, 1, "", "apply"]], "filters.total_variation": [[4, 3, 1, "", "apply"]], "filters.unsharp_mask_pil": [[4, 3, 1, "", "apply"]], "filters.unsharp_mask_scikit": [[4, 3, 1, "", "apply"]], "log": [[8, 1, 1, "", "error_exit"], [8, 1, 1, "", "print_message"]], "main": [[9, 1, 1, "", "__init__"], [9, 1, 1, "", "append_faces"], [9, 1, 1, "", "apply_filters"], [9, 1, 1, "", "create_faces"], [9, 1, 1, "", "create_stl_mesh"], [9, 1, 1, "", "engrave_text"], [9, 2, 1, "", "fingerprint_app"], [9, 1, 1, "", "get_ID"], [9, 1, 1, "", "get_empty_figure"], [9, 1, 1, "", "make_stl_curved"], [9, 1, 1, "", "make_stl_map"], [9, 1, 1, "", "make_stl_planar"], [9, 1, 1, "", "mirror_image"], [9, 1, 1, "", "parse_arguments"], [9, 1, 1, "", "parse_stl"], [9, 1, 1, "", "prepare_heightmap"], [9, 1, 1, "", "run_filtering"], [9, 1, 1, "", "run_stl"], [9, 1, 1, "", "save_image"], [9, 1, 1, "", "save_stl"], [9, 1, 1, "", "write_stl_header"]], "stl_parser": [[11, 1, 1, "", "stl_parser"]]}, "objtypes": {"0": "py:module", "1": "py:function", "2": "py:class", "3": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "function", "Python function"], "2": ["py", "class", "Python class"], "3": ["py", "method", "Python method"]}, "titleterms": {"configur": 0, "preset": 0, "config_pars": 1, "modul": [1, 4, 8, 9, 11], "avail": 2, "filter": [2, 3, 4], "paramet": 2, "imag": 3, "gener": 5, "fingerprint": 5, "model": 5, "curv": 5, "planar": 5, "finger": 5, "map": 5, "exist": 5, "generov\u00e1n\u00ed": 6, "3d": 6, "modelu": 6, "otisku": 6, "prstu": 6, "content": 6, "instal": 7, "requir": 7, "get": 7, "start": 7, "log": 8, "main": 9, "src": 10, "stl_parser": 11, "troubleshoot": 12, "usag": 13}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 57}, "alltitles": {"Configuration and presets": [[0, "configuration-and-presets"]], "Available filters with parameters": [[2, "available-filters-with-parameters"]], "Generov\u00e1n\u00ed 3D modelu otisku prstu": [[6, "generovani-3d-modelu-otisku-prstu"]], "Contents": [[6, "contents"]], "Installation": [[7, "installation"]], "Requirements": [[7, "requirements"]], "Getting started": [[7, "getting-started"]], "src": [[10, "src"]], "Troubleshooting": [[12, "troubleshooting"]], "config_parser module": [[1, "module-config_parser"]], "filters module": [[4, "module-filters"]], "log module": [[8, "module-log"]], "main module": [[9, "main-module"]], "stl_parser module": [[11, "stl-parser-module"]], "Filtering images": [[3, "filtering-images"]], "Generating fingerprint models": [[5, "generating-fingerprint-models"]], "Generating curved fingerprint model": [[5, "generating-curved-fingerprint-model"]], "Generating planar finger model": [[5, "generating-planar-finger-model"]], "Mapping fingerprint to existing finger model": [[5, "mapping-fingerprint-to-existing-finger-model"]], "Usage": [[13, "usage"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/docs/build/usage.html b/docs/build/usage.html index b8b6861..bcc044d 100644 --- a/docs/build/usage.html +++ b/docs/build/usage.html @@ -215,7 +215,7 @@ 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 m height_line iter finger_x finger_y finger_z] +--stl m height_line iter finger_x finger_y finger_z finger_model] [-d | --database database_filename] Program for processing a 2D image into 3D fingerprint. diff --git a/docs/source/filtering.rst b/docs/source/filtering.rst index 69bb869..c516432 100644 --- a/docs/source/filtering.rst +++ b/docs/source/filtering.rst @@ -34,4 +34,4 @@ There are two ways to enter the filters: .. code-block:: - (.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json git_example + (.venv)$ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge diff --git a/docs/source/generation.rst b/docs/source/generation.rst index 0b0fe2d..9fef63b 100644 --- a/docs/source/generation.rst +++ b/docs/source/generation.rst @@ -26,7 +26,7 @@ third the rate of curvature along x axis `curv_rate_x` and the third is the rate .. code-block:: console - $ 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 + $ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge --stl c 2 10 2 2 Generating planar finger model ----------------------------------- @@ -44,7 +44,7 @@ Optional parameters are height of the papilar lines and base thickness. .. code-block:: - $ 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 + $ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4_from_preset.png 600 --config conf/conf.json new_ridge --stl p 2 10 Mapping fingerprint to existing finger model -------------------------------------------- @@ -65,6 +65,6 @@ These control the location of the finger. They need to be set only if the user w .. code-block:: console - $ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json ridge --stl m 0.2 2 0 0 0 res/finger_backup/finger-mod.stl + $ python3 src/main.py res/examples/Palec_P4.tif res/examples/Palec_P4.png 600 --config conf/conf.json new_ridge --stl m 0.2 2 0 0 0 res/finger_backup/finger.stl diff --git a/docs/source/usage.rst b/docs/source/usage.rst index b21f1c5..9d0ab41 100644 --- a/docs/source/usage.rst +++ b/docs/source/usage.rst @@ -18,8 +18,8 @@ Which will print out the following message. $ 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 | + [filters ...]) [-s | --stl p height_line height_base | + --stl c height_line height_base curv_rate_x curv_rate_y | --stl m height_line iter finger_x finger_y finger_z finger_model] [-d | --database database_filename] @@ -37,8 +37,10 @@ Which will print out the following message. -h, --help show this help message and exit -m, --mirror, --no-mirror switch to mirror input image - -s [STL_FILE ...], --stl_file [STL_FILE ...] + -s [STL ...], --stl [STL ...] create stl model from processed image -c CONFIG CONFIG, --config CONFIG CONFIG pair: name of the config file with presets, name of the preset + -d DATABASE, --database DATABASE + switch to store presets in config database