blob: a4408f4185dbefca5828b52dee42e03310677e0c [file] [log] [blame]
The Android Open Source Project7f81d9b2009-03-03 19:30:08 -08001/*
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