source: soft/giet_vm/applications/rosenfeld/include/ecc_features.h @ 822

Last change on this file since 822 was 822, checked in by meunier, 8 years ago

In rosenfeld:

  • Updated nrio0, nrio1, nrio2, nrio1f, nrio2f, nrio1x, nrbool1, nrbool2 and nralloc1 in the nrc2 lib in order to use macro-typed functions
  • Updated the simulation script to include performance evaluation with random images, and a script to generate graphs
  • Updated the clock.h to use 64-bit integers, which potentially breaks the printing on the giet
File size: 8.9 KB
Line 
1// -------------------- //
2// --- ecc_features --- //
3// -------------------- //
4
5
6/*
7 * Copyright (c) 2012 - 2014, Lionel Lacassagne, All rights reserved
8 * University of Paris Sud, Laboratoire de Recherche en Informatique
9 */
10
11//
12// Caracteristiques d'une region / label
13//
14
15#ifndef __ECC_FEATURES_H__
16#define __ECC_FEATURES_H__
17
18#if PARMERGE
19#include <pthread.h>
20#endif
21
22
23// ------------------------------------------------------------------------
24// --- RegionStats --------------------------------------------------------
25// ------------------------------------------------------------------------
26
27// @QM
28// Je m'autorise à mettre des champs de la structure
29// conditionnellement vis-à-vis de flags, car :
30// 1. Il ne s'agit pas d'une bibliothÚque
31// 2. Tous les fichiers .c dépendent de tous les .h, et donc
32//    en particulier du fichier config.h qui définit les flags
33// Il est donc impossible de mélanger deux fichiers binaires
34// qui ont des définitions différentes de cette structure
35typedef struct {
36#if FEATURES
37  uint16 xmin;
38  uint16 xmax;
39  uint16 ymin;
40  uint16 ymax;
41
42  uint32 S;
43
44  uint32 Sx;
45  uint32 Sy;
46#endif
47#if PARMERGE
48  pthread_spinlock_t lock;
49#endif
50} RegionStats;
51
52
53/*
54 * ATTENTION x != (xmin+xmax)/2
55 *           y != (ymin+ymax)/2
56             S != (xmax-xmin)(ymax-ymin)
57 */
58
59/*
60 * n = S = phi0(x1) - phi0(x0-1) = x1 - x0 + 1
61 * Sx    = phi1(x1) - phi1(x0-1)
62 * Sx2   = phi2(x1) - phi2(x0-1)
63 * Sx3   = phi3(x1) - phi3(x0-1)
64 * Sy    = nY
65 * Sy2   = nY2
66 * Sxy   = Y.Sx
67 * Sx2y  = Y.Sx2
68 * Sxy2  = Y2.Sx
69 * Sy3   = nY3
70 *
71 * phi1(x  ) = x(x+1)/2
72 * phi1(x-1) = x(x-1)/2
73 * phi2(x  ) = x(x+1)(2x+1)/6
74 * phi2(x-1) = x(x-1)(2x-1)/6
75 * phi3(x  ) = Phi1(x).Phi1(x)
76 *
77 * Mx2 = Sx2 - Sx.Sx / n
78 * My2 = Sy2 - Sy.Sy / n
79 * Mxy = Sxy - Sx.Sy / n
80 *
81 * Mx3  = Sx3  - 3.Sx.Sx2 / n + 2.Sx.Sx.Sx / n2
82 * Mx2y = Sx2y - Sx2.Sy / n - 2.Sx.Sxy / n + 2.Sx.Sx.Sy / n2
83 * Mxy2 = Sxy2 - Sy2.Sx / n - 2.Sy.Sxy / n + 2.Sx.Sy.Sy / n2
84 * My3  = Sy3  - 3.Sy.Sy2 / n + 2.Sy.Sy.Sy / n2
85 */
86
87
88
89/* ------------------------------ */
90/* --- RegionStats after 2009 --- */
91/* ------------------------------ */
92// pas mieux que les fonctions precedentes -> a supprimer a terme (LL 2014)
93
94RegionStats* RegionStatsVector                 (int i0, int i1);
95#if TARGET_OS == GIETVM
96RegionStats * remote_RegionStatsVector         (int i0, int i1, int x, int y);
97#endif
98RegionStats* RegionStatsVector0                (int i0, int i1);
99void    free_RegionStatsVector (RegionStats *v, int i0, int i1);
100
101RegionStats** RegionStatsMatrix                 (int i0, int i1, int j0, int j1);
102RegionStats** RegionStatsMatrix0                (int i0, int i1, int j0, int j1);
103void     free_RegionStatsMatrix(RegionStats **m, int i0, int i1, int j0, int j1);
104
105void zero_RegionStats      (RegionStats  *x);
106void zero_RegionStatsVector(RegionStats  *v, int i0, int i1);
107void zero_RegionStatsMatrix(RegionStats **m, int i0, int i1, int j0, int j1);
108
109void display_RegionStats      (RegionStats  *x,                                 char *name);
110void display_RegionStatsVector(RegionStats  *v, int i0, int i1,                 char *name);
111void display_RegionStatsMatrix(RegionStats **m, int i0, int i1, int j0, int j1, char *name);
112
113void save_RegionStats      (RegionStats *x,                                  char *name);
114void save_RegionStatsVector(RegionStats  *v, int i0, int i1,                 char *name);
115void save_RegionStatsMatrix(RegionStats **m, int i0, int i1, int j0, int j1, char *name);
116
117/* ----------------------------------------- */
118/* --- RegionStats functions before 2009 --- */
119/* ----------------------------------------- */
120
121void         RegionStats_Constructor (RegionStats **Stats, uint32 nemax);
122RegionStats* RegionStats_pConstructor(                     uint32 nemax);
123void         RegionStats_Destructor  (RegionStats **Stats, uint32 nemax);
124void         RegionStats_pDestructor (RegionStats  *Stats, uint32 nemax);
125void         RegionStats_Clear       (RegionStats  *Stats, uint32 nemax);
126
127int  RegionStats_Create_File (char *filename); // for read
128int  RegionStats_Open_File  (char *filename); // for write
129void RegionStats_Close_File (int fd);
130
131int  RegionStats_Read_Header (        int fd); // return ne
132void RegionStats_Write_Header(int ne, int fd);
133
134void RegionStats_Read_Stats1 (int fd, int ne, RegionStats *stats);
135void RegionStats_Read_Stats2 (int fd, int ne, RegionStats *stats);
136
137void RegionStats_Write_Stats1(RegionStats *Stats, int ne, int fd);
138void RegionStats_Write_Stats2(RegionStats *Stats, int ne, int fd);
139   
140void RegionStats_Write_Stats1_Sparse(RegionStats *Stats, uint32 *EQ, uint32 ne0, uint32 ne1, int fd);
141
142void RegionStats_Load_Stats1 (char *filename, int *ne, RegionStats **Stats); 
143void RegionStats_Load_Stats2 (char *filename, int *ne, RegionStats **Stats); 
144           
145void RegionStats_MLoad_Stats1(char *filename, int *ne, RegionStats  *Stats); // Stats must have been allocated
146void RegionStats_MLoad_Stats2(char *filename, int *ne, RegionStats  *Stats); // Stats must have been allocated
147
148void RegionStats_Save_Stats1(RegionStats *Stats, int ne, char *filename);
149void RegionStats_Save_Stats2(RegionStats *Stats, int ne, char *filename);
150 
151void RegionStats_Display_Stats1(RegionStats *Stats, int ne, char *name);
152void RegionStats_Display_Stats2(RegionStats *Stats, int ne, char *name);
153
154//void RegionStats_Rectangle_Computation(RegionStats *Stats, Image *imageL);
155void RegionStats_SetRectangle         (RegionStats *Stats, int e, int ymin, int ymax, int xmin, int xmax);
156
157// pointeur de tableau de Stats (ECC: pour LSL parallel
158
159void RegionStats_Save_pStats1(RegionStats **pStats, int ne, char *filename);
160void RegionStats_Save_pStats2(RegionStats **pStats, int ne, char *filename);
161
162void RegionStats_Display_pStats1(RegionStats **pStats, int ne, char *name);
163void RegionStats_Display_pStats2(RegionStats **pStats, int ne, char *name);
164
165void Region32_Calc1_Features_1Pass(RegionStats *Stats, uint32 e, int i, int j);
166// faire une version pointFeaturesComputation (cf line et image)
167// ------------------------
168// --- RegionStats 2013 ---
169// ------------------------
170void   RegionStats_Calc_Rectangle_Moment1(uint32 **E, int height, int width, RegionStats *Stats);
171void   RegionStats_calc_Status(RegionStats *Stats, uint32 ne, uint32 min_height, uint32 min_width, uint32 min_area, uint8 *status);
172uint32 RegionStats_UpdateEQ_with_Status(uint8 *status, uint32 ne, uint32 *EQ);
173void   RegionStats_UpdateStats_with_EQ(uint32 *EQ, uint32 ne, RegionStats *Stats);
174
175   
176// RegioStats 2014 (Laurent Cabaret)
177void featuresComputation(uint32 **E, int height,int width,RegionStats *Stats); // ne plus utiliser
178
179void pointFeaturesComputation_Dummy(uint32 **E, int i, int j, RegionStats *Stats);
180void pointFeaturesComputation      (uint32 **E, int i, int j, RegionStats *Stats);
181   
182void lineFeaturesComputation_Dummy(uint32 **E, int i, int width, RegionStats *Stats);
183void lineFeaturesComputation      (uint32 **E, int i, int width, RegionStats *Stats);
184
185void bandFeaturesComputation_Dummy(uint32 **E, int i0, int i1, int width, RegionStats *Stats);
186void bandFeaturesComputation      (uint32 **E, int i0, int i1, int width, RegionStats *Stats);   
187   
188void imageFeaturesComputation_Dummy(uint32 **E, int height, int width, RegionStats *Stats);
189void imageFeaturesComputation      (uint32 **E, int height, int width, RegionStats *Stats);
190     
191// ------------------------
192// --- RegionStats 2014 ---
193// ------------------------
194
195void RegionStats_Copy_Stats1_From_Index(RegionStats *Stats, int dst_index, int src_index);
196void RegionStats_Accumulate_Stats1_From_Index(RegionStats *Stats, int dst_index, int src_index);
197   
198void RegionStats_Save_Stats1_Sparse(RegionStats *Stats, uint32 *EQ, uint32 ne0, uint32 ne1, char *filename);
199void RegionStats_DisplayStats_Sparse(uint32 *EQ, uint32 ne0, uint32 ne1, RegionStats *Stats, char *name, int * start_index);
200// affichage des Stats pour les etiquettes roots/ancetres de leur composante (pour algo Suzuki)
201
202void RegionStats_DisplayStats_Range(uint32 *EQ, uint32 ne0, uint32 ne1, RegionStats *Stats, char *name);
203   
204// nb de composantes connexes pour Suzuki MK2
205uint32 RegionStats_Count_Roots_Sparse1(RegionStats *Stats, uint32 *EQ, uint32 nemax);
206uint32 RegionStats_Count_Roots_Sparse (RegionStats *Stats, uint32 *EQ, uint32 ne0, uint32 ne1);
207
208uint32 RegionStats_Count_Labels_Sparse1(RegionStats *Stats, uint32 *EQ, uint32 nemax);
209uint32 RegionStats_Count_Labels_Sparse (RegionStats *Stats, uint32 *EQ, uint32 ne0, uint32 ne1);
210
211void copy_features_ui32matrix(RegionStats *Stats, uint32 ne, uint32 **m);
212void copy_ui32matrix_features(uint32 **m, uint32 ne, RegionStats *Stats);
213void sortv_ui32matrix_col(uint32 **m, int i0, int i1, int j0, int j1, int col);
214void RegionStats_SortFeatures(RegionStats *Stats, uint32 nemax);
215
216int RegionStats_Compare(RegionStats *S1, RegionStats *S2);
217int RegionStatsVector_Compare(RegionStats *S1, int i0, int i1, RegionStats *S2);
218int RegionStatsVector_Match  (RegionStats *S1, int i0, int i1, RegionStats *S2, int j0, int j1);
219
220
221#endif /* __FEATURES_H__ */
Note: See TracBrowser for help on using the repository browser.