00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <stdio.h>
00023 #include <stdlib.h>
00024 #include <string.h>
00025 #include <math.h>
00026 #include <flgrCoreDispatch.h>
00027 #include <flgrCoreIO.h>
00028 #include <flgrCoreSlideWindow.h>
00029 #include <flgrCoreNhbManage.h>
00030 #include "flgrLinearKerOp.h"
00031
00032
00033
00034
00036
00038 #define FLGR_MACRO_GET_NHB_CONV_1D(dtype) \
00039 int i,k; \
00040 int spp = extr->spp; \
00041 dtype *presult = (dtype *) result->array; \
00042 dtype *list_data_val; \
00043 dtype *list_nhb_val; \
00044 int *size = extr->size; \
00045 fgFLOAT64 a,b,sum; \
00046 fgFLOAT64 tmp=0; \
00047 \
00048 \
00049 for(k=0 ; k<spp ; k++) { \
00050 list_data_val = (dtype *) extr->list_data_val[k]; \
00051 list_nhb_val = (dtype *) extr->list_nhb_val[k]; \
00052 \
00053 tmp=0; \
00054 sum=0; \
00055 \
00056 for(i=0 ; i<size[k] ; i++){ \
00057 a = (fgFLOAT64) list_data_val[i]; \
00058 b = (fgFLOAT64) list_nhb_val[i]; \
00059 tmp += a*b; \
00060 sum += (b<0) ? 0 : b; \
00061 } \
00062 flgr_set_array_##dtype(presult,k,(dtype) (tmp/sum)); \
00063 } \
00064 \
00065 return
00066
00067
00068
00069 void flgr1d_get_nhb_convolution_fgBIT(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00070 flgr_no_define_type_function(FLGR_BIT);
00071 }
00072 void flgr1d_get_nhb_convolution_fgUINT8(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00073 FLGR_MACRO_GET_NHB_CONV_1D(fgUINT8);
00074 }
00075 void flgr1d_get_nhb_convolution_fgUINT16(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00076 FLGR_MACRO_GET_NHB_CONV_1D(fgUINT16);
00077 }
00078 void flgr1d_get_nhb_convolution_fgUINT32(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00079 FLGR_MACRO_GET_NHB_CONV_1D(fgUINT32);
00080 }
00081 void flgr1d_get_nhb_convolution_fgINT8(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00082 FLGR_MACRO_GET_NHB_CONV_1D(fgINT8);
00083 }
00084 void flgr1d_get_nhb_convolution_fgINT16(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00085 FLGR_MACRO_GET_NHB_CONV_1D(fgINT16);
00086 }
00087 void flgr1d_get_nhb_convolution_fgINT32(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00088 FLGR_MACRO_GET_NHB_CONV_1D(fgINT32);
00089 }
00090 void flgr1d_get_nhb_convolution_fgFLOAT32(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00091 FLGR_MACRO_GET_NHB_CONV_1D(fgFLOAT32);
00092 }
00093 void flgr1d_get_nhb_convolution_fgFLOAT64(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00094 FLGR_MACRO_GET_NHB_CONV_1D(fgFLOAT64);
00095 }
00097
00103
00104 FLGR_Ret flgr1d_get_nhb_convolution(FLGR_Vector *result, FLGR_NhbBox1D *extr) {
00105
00106
00107 if(result==NULL){
00108 POST_ERROR("Null objects!\n");
00109 return FLGR_RET_NULL_OBJECT;
00110 }
00111
00112 if(extr==NULL){
00113 POST_ERROR("Null objects!\n");
00114 return FLGR_RET_NULL_OBJECT;
00115 }
00116
00117 FLGR_DISPATCH_PROCEDURE(result->type,flgr1d_get_nhb_convolution,result,extr);
00118 }
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00133
00135 #define FLGR_MACRO_GET_NHB_CONV_2D(dtype) \
00136 int i,k; \
00137 int spp = extr->spp; \
00138 dtype *presult = (dtype *) result->array; \
00139 dtype *list_data_val; \
00140 dtype *list_nhb_val; \
00141 int *size = extr->size; \
00142 fgFLOAT64 a,b,sum=0; \
00143 fgFLOAT64 tmp=0; \
00144 \
00145 \
00146 for(k=0 ; k<spp ; k++) { \
00147 list_data_val = (dtype *) extr->list_data_val[k]; \
00148 list_nhb_val = (dtype *) extr->list_nhb_val[k]; \
00149 \
00150 tmp=0; \
00151 sum=0; \
00152 \
00153 for(i=0 ; i<size[k] ; i++){ \
00154 a = (fgFLOAT64) list_data_val[i]; \
00155 b = (fgFLOAT64) list_nhb_val[i]; \
00156 tmp += a*b; \
00157 sum += (b<0) ? 0 : b; \
00158 } \
00159 flgr_set_array_##dtype(presult,k,(dtype) (tmp/sum)); \
00160 } \
00161 \
00162 return
00163
00164
00165
00166 void flgr2d_get_nhb_convolution_fgBIT(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00167 flgr_no_define_type_function(FLGR_BIT);
00168 }
00169 void flgr2d_get_nhb_convolution_fgUINT8(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00170 FLGR_MACRO_GET_NHB_CONV_2D(fgUINT8);
00171 }
00172 void flgr2d_get_nhb_convolution_fgUINT16(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00173 FLGR_MACRO_GET_NHB_CONV_2D(fgUINT16);
00174 }
00175 void flgr2d_get_nhb_convolution_fgUINT32(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00176 FLGR_MACRO_GET_NHB_CONV_2D(fgUINT32);
00177 }
00178 void flgr2d_get_nhb_convolution_fgINT8(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00179 FLGR_MACRO_GET_NHB_CONV_2D(fgINT8);
00180 }
00181 void flgr2d_get_nhb_convolution_fgINT16(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00182 FLGR_MACRO_GET_NHB_CONV_2D(fgINT16);
00183 }
00184 void flgr2d_get_nhb_convolution_fgINT32(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00185 FLGR_MACRO_GET_NHB_CONV_2D(fgINT32);
00186 }
00187 void flgr2d_get_nhb_convolution_fgFLOAT32(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00188 FLGR_MACRO_GET_NHB_CONV_2D(fgFLOAT32);
00189 }
00190 void flgr2d_get_nhb_convolution_fgFLOAT64(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00191 FLGR_MACRO_GET_NHB_CONV_2D(fgFLOAT64);
00192 }
00194
00200
00201 FLGR_Ret flgr2d_get_nhb_convolution(FLGR_Vector *result, FLGR_NhbBox2D *extr) {
00202
00203
00204 if(result==NULL){
00205 POST_ERROR("Null objects!\n");
00206 return FLGR_RET_NULL_OBJECT;
00207 }
00208
00209 if(extr==NULL){
00210 POST_ERROR("Null objects!\n");
00211 return FLGR_RET_NULL_OBJECT;
00212 }
00213
00214 FLGR_DISPATCH_PROCEDURE(result->type,flgr2d_get_nhb_convolution,result,extr);
00215 }
00216
00217
00218