X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fif-2.cpp;fp=src%2Fif-2.cpp;h=0000000000000000000000000000000000000000;hp=7757f72da9071fddb45c1b2afd4e0d6f46e6277b;hb=1fd4f7cc977b9f1499716de10d15656bd50f4816;hpb=52107baf438f31ce8930b062e7fdebf95d3fd9ee diff --git a/src/if-2.cpp b/src/if-2.cpp deleted file mode 100644 index 7757f72..0000000 --- a/src/if-2.cpp +++ /dev/null @@ -1,310 +0,0 @@ -/***************************************************************************** -** FILE IDENTIFICATION -** -** Name: if-2.cpp -** Purpose: Manipulate two image files -** Programmer: Kevin Rosenberg -** Date Started: May 2000 -** -** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg -** -** $Id: if-2.cpp,v 1.10 2000/07/09 08:16:18 kevin Exp $ -** -** This program is free software; you can redistribute it and/or modify -** it under the terms of the GNU General Public License (version 2) as -** published by the Free Software Foundation. -** -** This program is distributed in the hope that it will be useful, -** but WITHOUT ANY WARRANTY; without even the implied warranty of -** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -** GNU General Public License for more details. -** -** You should have received a copy of the GNU General Public License -** along with this program; if not, write to the Free Software -** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -******************************************************************************/ - -/* FILE - * if-2.c Generate a IF file from two input IF files - */ - -#include "ct.h" -#include "timer.h" - -enum {O_ADD, O_SUB, O_MUL, O_COMP, O_ROW_PLOT, O_COLUMN_PLOT, O_VERBOSE, O_HELP, O_VERSION}; - -static struct option my_options[] = -{ - {"add", 0, 0, O_ADD}, - {"sub", 0, 0, O_SUB}, - {"mul", 0, 0, O_MUL}, - {"comp", 0, 0, O_COMP}, - {"column-plot", 1, 0, O_COLUMN_PLOT}, - {"row-plot", 1, 0, O_ROW_PLOT}, - {"verbose", 0, 0, O_VERBOSE}, - {"help", 0, 0, O_HELP}, - {"version", 0, 0, O_VERSION}, - {0, 0, 0, 0} -}; - -void -if2_usage (const char *program) -{ - cout << "usage: " << fileBasename(program) << " infile1 infile2 outfile [OPTIONS]" << endl; - cout << "Perform functions on two input image files" << endl; - cout << endl; - cout << " infile1 Name of first input IF file" << endl; - cout << " infile2 Name of second input IF file" << endl; - cout << " outfile Name of output IF file" << endl; - cout << " --add Add images" << endl; - cout << " --sub Subtract image 2 from image 1" << endl; - cout << " --mul Multiply images" << endl; - cout << " --comp Compare images" << endl; - cout << " --column-plot n Plot column\n"; - cout << " --row-plot n Plot row\n"; - cout << " --verbose Verbose modem" << endl; - cout << " --version Print version" << endl; - cout << " --help Print this help message" << endl; -} - -int -if2_main (int argc, char *const argv[]) -{ - ImageFile* pim_in1; - ImageFile* pim_in2; - ImageFile* pim_out; - string in_file1; - string in_file2; - string out_file; - int opt_verbose = 0; - int opt_add = 0; - int opt_sub = 0; - int opt_mul = 0; - int opt_comp = 0; - int opt_outputFile = 0; - int opt_rowPlot = -1; - int opt_columnPlot = -1; - Timer timerProgram; - - while (1) { - char* endptr; - int c = getopt_long (argc, argv, "", my_options, NULL); - - if (c == -1) - break; - - switch (c) { - case O_ADD: - opt_add = 1; - opt_outputFile = 1; - break; - case O_SUB : - opt_sub = 1; - opt_outputFile = 1; - break; - case O_MUL: - opt_mul = 1; - opt_outputFile = 1; - break; - case O_ROW_PLOT: - opt_rowPlot = strtol(optarg, &endptr, 10); - if (endptr != optarg + strlen(optarg)) { - if2_usage(argv[0]); - } - case O_COLUMN_PLOT: - opt_columnPlot = strtol(optarg, &endptr, 10); - if (endptr != optarg + strlen(optarg)) { - if2_usage(argv[0]); - } - case O_COMP: - opt_comp = 1; - break; - case O_VERBOSE: - opt_verbose = 1; - break; - case O_VERSION: -#ifdef VERSION - cout << "Version " << VERSION << endl; -#else - cout << "Unknown version number" << endl; -#endif - return (0); - case O_HELP: - case '?': - if2_usage(argv[0]); - return (0); - default: - if2_usage(argv[0]); - return (1); - } - } - - if (opt_outputFile && (optind + 3 != argc)) { - if2_usage(argv[0]); - return (1); - } - else if (! opt_outputFile && optind + 2 != argc) { - if2_usage(argv[0]); - return (1); - } - - in_file1 = argv[optind]; - in_file2 = argv[optind + 1]; - if (opt_outputFile) - out_file = argv[optind + 2]; - - pim_in1 = new ImageFile (); - pim_in2 = new ImageFile (); - ImageFile& im_in1 = *pim_in1; - ImageFile& im_in2 = *pim_in2; - - if (! im_in1.fileRead(in_file1) || ! im_in2.fileRead(in_file2)) { - sys_error (ERR_WARNING, "Error reading an image"); - return (1); - } - - if (im_in1.nx() != im_in2.nx() || im_in1.ny() != im_in2.ny()) { - sys_error (ERR_SEVERE, "Error: Size of image 1 (%d,%d) and image 2 (%d,%d) do not match", - im_in1.nx(), im_in1.ny(), im_in2.nx(), im_in2.ny()); - return(1); - } - if (im_in1.nx() < 0 || im_in1.ny() < 0) { - sys_error (ERR_SEVERE, "Error: Size of image < 0"); - return(1); - } - - ImageFileArray v1 = im_in1.getArray(); - ImageFileArray v2 = im_in2.getArray(); - ImageFileArray vout = NULL; - - if (opt_outputFile) { - pim_out = new ImageFile (im_in1.nx(), im_in1.ny()); - vout = pim_out->getArray(); - } - - string strOperation; - if (opt_add) { - strOperation = "Add Images"; - for (int ix = 0; ix < im_in1.nx(); ix++) { - ImageFileColumn in1 = v1[ix]; - ImageFileColumn in2 = v2[ix]; - ImageFileColumn out = vout[ix]; - for (int iy = 0; iy < im_in1.ny(); iy++) - *out++ = *in1++ + *in2++; - } - } else if (opt_sub) { - strOperation = "Subtract Images"; - for (int ix = 0; ix < im_in1.nx(); ix++) { - ImageFileColumn in1 = v1[ix]; - ImageFileColumn in2 = v2[ix]; - ImageFileColumn out = vout[ix]; - for (int iy = 0; iy < im_in1.ny(); iy++) - *out++ = *in1++ - *in2++; - } - } else if (opt_mul) { - strOperation = "Multiply Images"; - for (int ix = 0; ix < im_in1.nx(); ix++) { - ImageFileColumn in1 = v1[ix]; - ImageFileColumn in2 = v2[ix]; - ImageFileColumn out = vout[ix]; - for (int iy = 0; iy < im_in1.ny(); iy++) - *out++ = *in1++ * *in2++; - } - } - if (opt_comp) { - double d, r, e; - im_in1.comparativeStatistics (im_in2, d, r, e); - cout << "d=" << d << ", r=" << r << ", e=" << e << endl; - } - if (opt_columnPlot > 0) { - if (opt_columnPlot >= im_in1.nx() || opt_columnPlot >= im_in2.nx()) { - sys_error (ERR_SEVERE, "column-plot > nx"); - return (1); - } - double plot_xaxis [im_in1.nx()]; - for (int i = 0; i < im_in1.nx(); i++) - plot_xaxis[i] = i; -#if HAVE_SGP -#if 0 -#else - ezset ("clear."); - ezset ("xticks major 5."); - ezset ("xlabel Column"); - ezset ("ylabel Pixel"); - ezset ("curves 2"); - ezset ("box."); - ezset ("grid."); - ezplot (v1[opt_columnPlot], plot_xaxis, im_in1.ny()); - ezplot (v2[opt_columnPlot], plot_xaxis, im_in2.ny()); -#endif - char str[256]; - cout << "Press enter to continue" << flush; - fgets(str, sizeof(str), stdin); - sgp2_close (sgp2_get_active_win()); -#endif - } - - if (opt_rowPlot > 0) { - if (opt_rowPlot >= im_in1.ny() || opt_rowPlot >= im_in2.ny()) { - sys_error (ERR_SEVERE, "row_plot > ny"); - return (1); - } - double plot_xaxis [im_in1.ny()]; - double v1Row[im_in1.nx()], v2Row[im_in2.nx()]; - - for (int i = 0; i < im_in1.ny(); i++) - plot_xaxis[i] = i; - for (int i = 0; i < im_in1.nx(); i++) - v1Row[i] = v1[opt_rowPlot][i]; - for (int i = 0; i < im_in2.nx(); i++) - v2Row[i] = v2[opt_rowPlot][i]; - -#if HAVE_SGP -#if 0 -#else - ezset ("clear."); - ezset ("xticks major 5."); - ezset ("xlabel Column"); - ezset ("ylabel Pixel"); - ezset ("curves 2"); - ezset ("box."); - ezset ("grid."); - ezplot (v1Row, plot_xaxis, im_in1.nx()); - ezplot (v2Row, plot_xaxis, im_in2.nx()); -#endif - char str[256]; - cout << "Press enter to continue" << flush; - fgets(str, sizeof(str), stdin); - sgp2_close (sgp2_get_active_win()); -#endif - } - - if (opt_outputFile) { - pim_out->labelsCopy (im_in1, "if-2 file 1: "); - pim_out->labelsCopy (im_in2, "if-2 file 2: "); - pim_out->labelAdd (Array2dFileLabel::L_HISTORY, strOperation.c_str(), timerProgram.timerEnd()); - pim_out->fileWrite(out_file); - } - - return (0); -} - -#ifndef NO_MAIN -int -main (int argc, char *const argv[]) -{ - int retval = 1; - - try { - retval = if2_main(argc, argv); - } catch (exception e) { - cerr << "Exception: " << e.what() << endl; - } catch (...) { - cerr << "Unknown exception" << endl; - } - - return (retval); -} -#endif -