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