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 */
54struct 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  */
153void bbf_LocalScanDetector_init( struct bbs_Context* cpA,
154								 struct bbf_LocalScanDetector* ptrA );
155
156/** resets bbf_LocalScanDetector  */
157void bbf_LocalScanDetector_exit( struct bbs_Context* cpA,
158								 struct bbf_LocalScanDetector* ptrA );
159
160/* ---- \ghd{ operators } -------------------------------------------------- */
161
162/** copy operator */
163void bbf_LocalScanDetector_copy( struct bbs_Context* cpA,
164								 struct bbf_LocalScanDetector* ptrA,
165								 const struct bbf_LocalScanDetector* srcPtrA );
166
167/** equal operator */
168flag 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 */
179uint32 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 */
183uint32 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 */
187uint32 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 */
197int32 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