123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /*!
- \file lib/imagery/iclass_statistics.c
- \brief Imagery library - functions for wx.iclass
- Computation based on training areas for supervised classification.
- Based on i.class module (GRASS 6).
- Computation and writing signatures to file.
- Copyright (C) 1999-2007, 2011 by the GRASS Development Team
- This program is free software under the GNU General Public License
- (>=v2). Read the file COPYING that comes with GRASS for details.
- \author David Satnik, Central Washington University (original author)
- \author Markus Neteler <neteler itc.it> (i.class module)
- \author Bernhard Reiter <bernhard intevation.de> (i.class module)
- \author Brad Douglas <rez touchofmadness.com>(i.class module)
- \author Glynn Clements <glynn gclements.plus.com> (i.class module)
- \author Hamish Bowman <hamish_b yahoo.com> (i.class module)
- \author Jan-Oliver Wagner <jan intevation.de> (i.class module)
- \author Anna Kratochvilova <kratochanna gmail.com> (rewriting for wx.iclass)
- \author Vaclav Petras <wenzeslaus gmail.com> (rewriting for wx.iclass)
- */
- #include <string.h>
- #include <stdio.h>
- #include <grass/imagery.h>
- #include <grass/glocale.h>
- #include <grass/colors.h>
- #include "iclass_local_proto.h"
- /*!
- \brief Initialize signatures.
- \param[out] sigs pointer to signatures
- \param refer pointer to band files structure
- \return 1 on success
- \return 0 on failure
- */
- int I_iclass_init_signatures(struct Signature *sigs, struct Ref *refer)
- {
- G_debug(3, "I_iclass_init_signatures()");
- I_init_signatures(sigs, refer->nfiles);
- for (unsigned int i = refer->nfiles; i--;) {
- sigs->semantic_labels[i] = Rast_get_semantic_label_or_name(refer->file[i].name, refer->file[i].mapset);
- }
- return 1;
- }
- /*!
- \brief Add one signature.
- \param[out] sigs pointer to signatures
- \param statistics pointer to statistics structure
- */
- void I_iclass_add_signature(struct Signature *sigs,
- IClass_statistics * statistics)
- {
- int sn;
- int b1, b2;
- int r, g, b;
- G_debug(3, "I_iclass_add_signature()");
- G_str_to_color(statistics->color, &r, &g, &b);
- /* get a new signature */
- I_new_signature(sigs);
- /* save the signature in a Sig structure */
- sn = sigs->nsigs;
- strcpy(sigs->sig[sn - 1].desc, statistics->name);
- sigs->sig[sn - 1].npoints = statistics->ncells;
- sigs->sig[sn - 1].status = 1;
- sigs->sig[sn - 1].have_color = 1;
- sigs->sig[sn - 1].r = r;
- sigs->sig[sn - 1].g = g;
- sigs->sig[sn - 1].b = b;
- for (b1 = 0; b1 < sigs->nbands; b1++) {
- sigs->sig[sn - 1].mean[b1] = statistics->band_mean[b1];
- for (b2 = 0; b2 <= b1; b2++) {
- sigs->sig[sn - 1].var[b1][b2] = var_signature(statistics, b1, b2);
- }
- }
- }
- /*!
- \brief Write signtures to signature file.
- \param sigs pointer to signatures
- \param file_name name of signature file
- \return 1 on success
- \return 0 on failure
- */
- int I_iclass_write_signatures(struct Signature *sigs, const char *file_name)
- {
- FILE *outsig_fd;
- G_debug(3, "I_write_signatures(): file_name=%s", file_name);
- if (!
- (outsig_fd =
- I_fopen_signature_file_new(file_name))) {
- G_warning(_("Unable to open output signature file '%s'"), file_name);
- return 0;
- }
- I_write_signatures(outsig_fd, sigs);
- fclose(outsig_fd);
- return 1;
- }
|