From e78cdfd6829d4ffab76aab7baabb99cd41500f42 Mon Sep 17 00:00:00 2001 From: sbosse Date: Tue, 31 Mar 2026 10:11:18 +0200 Subject: [PATCH] Tue 31 Mar 10:10:24 CEST 2026 --- fbp/fbp.cpp | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 fbp/fbp.cpp diff --git a/fbp/fbp.cpp b/fbp/fbp.cpp new file mode 100644 index 0000000..8814d0d --- /dev/null +++ b/fbp/fbp.cpp @@ -0,0 +1,168 @@ +#include "fbp.hpp" + +void usage () { + printf("usage: fbp [-e(xtra_frames) #] [-f(ull_turn)] [-g(amma) #] [-G(ain) #]\n"); + printf(" [-a(uto_size_and_range)] [-n(ormalizeByframe)] [-ba(ackground_auto)]\n"); + printf(" [-bv(ackground:value) #] [-bb(ackground) x y w h] \n"); + printf(" [-c(rop) x y w h] [-r firstframe last]\n"); + printf(" [-p(reprocess)] [-t(hreads) #]\n"); + printf(" [-m(ask_margin_pixel) #]\n"); + printf(" [-R(otate_additional) x y z] [-C(rop_before_rotate) x y w h]\n"); + printf(" [-o(utput) dir|file.tif(f)]\n"); + printf(" scan.[avi mp4 tif tiff]\n"); + printf("Version (Build date): %s\n",__DATE__); +} + +int main(int argc, char* argv[]) { + bool full_turn=false, + auto_size=false, + auto_background=false, + preprocessOnly=false, + normalizeByframe=false; + double gammaVal=2.2,gainVal=1.0; + float background=0.0; + + string input,output; + int pointcloud_threshold=0, + extra_frames=0, + first=0, + last=0, + mask_margin=0, + threads=0, + rotX=0, + rotY=0, + rotZ=0; + + Rect2d crop,bbackground; + + if (argc<2) { usage(); return EXIT_FAILURE; } + for (int i = 1; i < argc; ++i) { + if (std::string(argv[i]) == "-n") { + normalizeByframe=true; + } + if (std::string(argv[i]) == "-f") { + full_turn=true; + } + if (std::string(argv[i]) == "-a") { + auto_size=true; + } + if (std::string(argv[i]) == "-ba") { + auto_background=true; + } + if (std::string(argv[i]) == "-p") { + preprocessOnly=true; + } + if (std::string(argv[i]) == "-e") { + if (i + 1 < argc) { + i++; + extra_frames = std::stoi(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-m") { + if (i + 1 < argc) { + i++; + mask_margin = std::stoi(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-t") { + if (i + 1 < argc) { + i++; + threads = std::stoi(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-r") { + if (i + 2 < argc) { + i++; + first = std::stoi(argv[i++]); + last = std::stoi(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-c") { + if (i + 4 < argc) { + i++; + crop.x = std::stof(argv[i++]); + crop.y = std::stof(argv[i++]); + crop.width = std::stof(argv[i++]); + crop.height = std::stof(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-R") { + if (i + 3 < argc) { + i++; + rotX = std::stoi(argv[i++]); + rotY = std::stoi(argv[i++]); + rotZ = std::stoi(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-bb") { + if (i + 2 < argc) { + i++; + bbackground.x = std::stof(argv[i++]); + bbackground.y = std::stof(argv[i++]); + bbackground.width = std::stof(argv[i++]); + bbackground.height = std::stof(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-bv") { + if (i + 1 < argc) { + i++; + background = (double)std::stof(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-g") { + if (i + 1 < argc) { + i++; + gammaVal = (double)std::stof(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-G") { + if (i + 1 < argc) { + i++; + gainVal = (double)std::stof(argv[i]); + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (std::string(argv[i]) == "-o") { + if (i + 1 < argc) { + i++; + output = argv[i]; + continue; + } else { usage(); return EXIT_FAILURE; } + } + if (argv[i][0]!='-') { + input=argv[i]; + } + } + + fbp(input, + output, + extra_frames, + pointcloud_threshold, + normalizeByframe, + full_turn, + auto_size, + auto_background, + preprocessOnly, + gammaVal, + background, + gainVal, + first, + last, + crop, + bbackground, + mask_margin, + threads, + rotX, + rotY, + rotZ); + return 0; +}