• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2008 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef bbf_LOCAL_SCAN_DETECTOR_EM_H
18 #define bbf_LOCAL_SCAN_DETECTOR_EM_H
19 
20 /* ---- includes ----------------------------------------------------------- */
21 
22 #include "b_BasicEm/Context.h"
23 #include "b_BasicEm/Basic.h"
24 #include "b_BasicEm/UInt32Arr.h"
25 #include "b_BasicEm/Int16Arr.h"
26 #include "b_BasicEm/MemTbl.h"
27 #include "b_TensorEm/IdCluster2D.h"
28 #include "b_BitFeatureEm/Sequence.h"
29 #include "b_BitFeatureEm/BitParam.h"
30 #include "b_BitFeatureEm/LocalScanner.h"
31 #include "b_TensorEm/RBFMap2D.h"
32 
33 /* ---- related objects  --------------------------------------------------- */
34 
35 /* ---- typedefs ----------------------------------------------------------- */
36 
37 /* ---- constants ---------------------------------------------------------- */
38 
39 /* data format version number */
40 #define bbf_LOCAL_SCAN_DETECTOR_VERSION 100
41 
42 /* maximum number of features in scan detector */
43 #define bbf_LOCAL_SCAN_DETECTOR_MAX_FEATURES 16
44 
45 /* maximum size of any cluster in all processing stages of landmarker */
46 #define bpi_LOCAL_SCAN_DETECTOR_MAX_CLUSTER_SIZE 24
47 
48 /* maximum dimension of PCA subspace  */
49 #define bpi_LOCAL_SCAN_DETECTOR_MAX_PCA_DIM 12
50 
51 /* ---- object definition -------------------------------------------------- */
52 
53 /** discrete feature set */
54 struct bbf_LocalScanDetector
55 {
56 	/* ---- private data --------------------------------------------------- */
57 
58 	/** feature pointer arrray */
59 	struct bbf_Feature* ftrPtrArrE[ bbf_LOCAL_SCAN_DETECTOR_MAX_FEATURES ];
60 
61 	/** multiple purpose rbf map */
62 	struct bts_RBFMap2D rbfMapE;
63 
64 	/** temporary cluster */
65 	struct bts_Cluster2D tmpCluster1E;
66 
67 	/** temporary cluster */
68 	struct bts_Cluster2D tmpCluster2E;
69 
70 	/** temporary cluster */
71 	struct bts_Cluster2D tmpCluster3E;
72 
73 	/** temporary cluster */
74 	struct bts_Cluster2D tmpCluster4E;
75 
76 	/** local scanner */
77 	struct bbf_LocalScanner scannerE;
78 
79 	/** activity array */
80 	struct bbs_Int32Arr actArrE;
81 
82 	/** index array */
83 	struct bbs_Int16Arr idxArrE;
84 
85 	/** working image buffer */
86 	struct bbs_UInt8Arr workImageBufE;
87 
88 	/* ---- public data ---------------------------------------------------- */
89 
90 	/** patch width */
91 	uint32 patchWidthE;
92 
93 	/** patch height*/
94 	uint32 patchHeightE;
95 
96 	/** width of scan area */
97 	uint32 scanWidthE;
98 
99 	/** height of scan area */
100 	uint32 scanHeightE;
101 
102 	/** scanner scale exponent */
103 	uint32 scaleExpE;
104 
105 	/** interpolated image warping */
106 	flag interpolatedWarpingE;
107 
108 	/** image downscale threshold (part of image warping) (16.16) */
109 	uint32 warpScaleThresholdE;
110 
111 	/** reference cluster */
112 	struct bts_IdCluster2D refClusterE;
113 
114 	/** cluster with scan positions */
115 	struct bts_Cluster2D scanClusterE;
116 
117 	/** feature data array (contains feature elements) */
118 	struct bbs_UInt16Arr ftrDataArrE;
119 
120 	/** parameter for bit generation */
121 	struct bbf_BitParam bitParamE;
122 
123 	/** outlier distance in pixels (16.16); ( >0: activates outlier analysis ) */
124 	uint32 outlierDistanceE;
125 
126 	/** pca reference cluster */
127 	struct bts_IdCluster2D pcaClusterE;
128 
129 	/** pca average vector (10.6) */
130 	struct bbs_Int16Arr pcaAvgE;
131 
132 	/** pca projection matrix (8.8) */
133 	struct bbs_Int16Arr pcaMatE;
134 
135 	/** pcs subspace dimensions */
136 	uint32 pcaDimSubSpaceE;
137 
138 	/** max width of working image */
139 	uint32 maxImageWidthE;
140 
141 	/** max height of working image */
142 	uint32 maxImageHeightE;
143 
144 };
145 
146 /* ---- associated objects ------------------------------------------------- */
147 
148 /* ---- external functions ------------------------------------------------- */
149 
150 /* ---- \ghd{ constructor/destructor } ------------------------------------- */
151 
152 /** initializes bbf_LocalScanDetector  */
153 void bbf_LocalScanDetector_init( struct bbs_Context* cpA,
154 								 struct bbf_LocalScanDetector* ptrA );
155 
156 /** resets bbf_LocalScanDetector  */
157 void bbf_LocalScanDetector_exit( struct bbs_Context* cpA,
158 								 struct bbf_LocalScanDetector* ptrA );
159 
160 /* ---- \ghd{ operators } -------------------------------------------------- */
161 
162 /** copy operator */
163 void bbf_LocalScanDetector_copy( struct bbs_Context* cpA,
164 								 struct bbf_LocalScanDetector* ptrA,
165 								 const struct bbf_LocalScanDetector* srcPtrA );
166 
167 /** equal operator */
168 flag bbf_LocalScanDetector_equal( struct bbs_Context* cpA,
169 								  const struct bbf_LocalScanDetector* ptrA,
170 								  const struct bbf_LocalScanDetector* srcPtrA );
171 
172 /* ---- \ghd{ query functions } -------------------------------------------- */
173 
174 /* ---- \ghd{ modify functions } ------------------------------------------- */
175 
176 /* ---- \ghd{ memory I/O } ------------------------------------------------- */
177 
178 /** word size (16-bit) object needs when written to memory */
179 uint32 bbf_LocalScanDetector_memSize( struct bbs_Context* cpA,
180 									  const struct bbf_LocalScanDetector* ptrA );
181 
182 /** writes object to memory; returns number of words (16-bit) written */
183 uint32 bbf_LocalScanDetector_memWrite( struct bbs_Context* cpA,
184 									   const struct bbf_LocalScanDetector* ptrA, uint16* memPtrA );
185 
186 /** reads object from memory; returns number of words (16-bit) read */
187 uint32 bbf_LocalScanDetector_memRead( struct bbs_Context* cpA,
188 									  struct bbf_LocalScanDetector* ptrA,
189 									  const uint16* memPtrA,
190 									  struct bbs_MemTbl* mtpA );
191 
192 /* ---- \ghd{ exec functions } --------------------------------------------- */
193 
194 /** processes image with cluster; produces output cluster and returns confidence (8.24)
195  *  offsPtrA specifies pixel position (0,0) in input image
196  */
197 int32 bbf_LocalScanDetector_process( struct bbs_Context* cpA,
198 									 const struct bbf_LocalScanDetector* ptrA,
199                                      uint8* imagePtrA,
200 									 uint32 imageWidthA,
201 									 uint32 imageHeightA,
202 									 const struct bts_Int16Vec2D*  offsPtrA,
203 									 const struct bts_IdCluster2D* inClusterPtrA,
204 									 struct bts_IdCluster2D* outClusterPtrA );
205 
206 #endif /* bbf_LOCAL_SCAN_DETECTOR_EM_H */
207 
208