GRASS 8 Programmer's Manual 8.6.0dev(2026)-c83afef6d3
Loading...
Searching...
No Matches
iclass_signatures.c
Go to the documentation of this file.
1/*!
2 \file lib/imagery/iclass_statistics.c
3
4 \brief Imagery library - functions for wx.iclass
5
6 Computation based on training areas for supervised classification.
7 Based on i.class module (GRASS 6).
8
9 Computation and writing signatures to file.
10
11 SPDX-FileCopyrightText: 1999-2007, 2011 GRASS Development Team
12 SPDX-License-Identifier: GPL-2.0-or-later
13
14 \author David Satnik, Central Washington University (original author)
15 \author Markus Neteler <neteler itc.it> (i.class module)
16 \author Bernhard Reiter <bernhard intevation.de> (i.class module)
17 \author Brad Douglas <rez touchofmadness.com>(i.class module)
18 \author Glynn Clements <glynn gclements.plus.com> (i.class module)
19 \author Hamish Bowman <hamish_b yahoo.com> (i.class module)
20 \author Jan-Oliver Wagner <jan intevation.de> (i.class module)
21 \author Anna Kratochvilova <kratochanna gmail.com> (rewriting for wx.iclass)
22 \author Vaclav Petras <wenzeslaus gmail.com> (rewriting for wx.iclass)
23 */
24
25#include <string.h>
26#include <stdio.h>
27
28#include <grass/imagery.h>
29#include <grass/glocale.h>
30#include <grass/colors.h>
31
32#include "iclass_local_proto.h"
33
34/*!
35 \brief Initialize signatures.
36
37 \param[out] sigs pointer to signatures
38 \param refer pointer to band files structure
39
40 \return 1 on success
41 \return 0 on failure
42 */
44{
45 G_debug(3, "I_iclass_init_signatures()");
46
48 for (unsigned int i = refer->nfiles; i--;) {
49 sigs->semantic_labels[i] = Rast_get_semantic_label_or_name(
50 refer->file[i].name, refer->file[i].mapset);
51 }
52
53 return 1;
54}
55
56/*!
57 \brief Add one signature.
58
59 \param[out] sigs pointer to signatures
60 \param statistics pointer to statistics structure
61 */
64{
65 int sn;
66
67 int b1, b2;
68
69 int r, g, b;
70
71 G_debug(3, "I_iclass_add_signature()");
72
73 G_str_to_color(statistics->color, &r, &g, &b);
74
75 /* get a new signature */
77
78 /* save the signature in a Sig structure */
79 sn = sigs->nsigs;
80 strcpy(sigs->sig[sn - 1].desc, statistics->name);
81 sigs->sig[sn - 1].npoints = statistics->ncells;
82 sigs->sig[sn - 1].status = 1;
83
84 sigs->sig[sn - 1].have_color = 1;
85 sigs->sig[sn - 1].r = r;
86 sigs->sig[sn - 1].g = g;
87 sigs->sig[sn - 1].b = b;
88
89 for (b1 = 0; b1 < sigs->nbands; b1++) {
90 sigs->sig[sn - 1].mean[b1] = statistics->band_mean[b1];
91 for (b2 = 0; b2 <= b1; b2++) {
92 sigs->sig[sn - 1].var[b1][b2] = var_signature(statistics, b1, b2);
93 }
94 }
95}
96
97/*!
98 \brief Write signtures to signature file.
99
100 \param sigs pointer to signatures
101 \param file_name name of signature file
102
103 \return 1 on success
104 \return 0 on failure
105 */
106int I_iclass_write_signatures(struct Signature *sigs, const char *file_name)
107{
109
110 G_debug(3, "I_write_signatures(): file_name=%s", file_name);
111
112 if (!(outsig_fd = I_fopen_signature_file_new(file_name))) {
113 G_warning(_("Unable to open output signature file '%s'"), file_name);
114 return 0;
115 }
116
119
120 return 1;
121}
AMI_err name(char **stream_name)
Definition ami_stream.h:426
int G_str_to_color(const char *, int *, int *, int *)
Parse color string and set red,green,blue.
Definition color_str.c:99
void G_warning(const char *,...) __attribute__((format(printf
int G_debug(int, const char *,...) __attribute__((format(printf
FILE * I_fopen_signature_file_new(const char *)
Create signature file.
Definition sigfile.c:26
int I_write_signatures(FILE *, struct Signature *)
Write signatures to file.
Definition sig.c:245
int I_new_signature(struct Signature *)
Definition sig.c:30
int I_init_signatures(struct Signature *, int)
Initialize struct Signature before use.
Definition sig.c:14
char * Rast_get_semantic_label_or_name(const char *, const char *)
Get a raster map semantic label or fall back to its name.
#define _(str)
Definition glocale.h:10
int I_iclass_write_signatures(struct Signature *sigs, const char *file_name)
Write signtures to signature file.
void I_iclass_add_signature(struct Signature *sigs, IClass_statistics *statistics)
Add one signature.
int I_iclass_init_signatures(struct Signature *sigs, struct Ref *refer)
Initialize signatures.
float var_signature(IClass_statistics *statistics, int band1, int band2)
Helper function for computing variance for signature file.
float g
Definition named_colr.c:7
#define strcpy
Definition parson.c:66
double b
Definition r_raster.c:37
double r
Definition r_raster.c:37
Definition imagery.h:24