| 979 | } |
| 980 | |
| 981 | void GetProjectedIndex(CGV_UINT8 projected_index_out[MAX_SUBSET_SIZE], //output: index, uncentered, in the range 0..clusters-1 |
| 982 | CGV_FLOAT image_projected[SOURCE_BLOCK_SIZE], // image_block points, might be uncentered |
| 983 | CGV_INT clusters, // clusters: number of points in the ramp (max 16) |
| 984 | CGV_INT numEntries) |
| 985 | { // n - number of points in v_ max 15 |
| 986 | CMP_di what[SOURCE_BLOCK_SIZE]; |
| 987 | CGV_FLOAT image_v[SOURCE_BLOCK_SIZE]; |
| 988 | CGV_FLOAT image_z[SOURCE_BLOCK_SIZE]; |
| 989 | CGV_FLOAT image_l; |
| 990 | CGV_FLOAT image_mm; |
| 991 | CGV_FLOAT image_r = 0.0F; |
| 992 | CGV_FLOAT image_dm = 0.0F; |
| 993 | CGV_FLOAT image_min; |
| 994 | CGV_FLOAT image_max; |
| 995 | CGV_FLOAT image_s; |
| 996 | |
| 997 | SetDefaultIndex(projected_index_out); |
| 998 | |
| 999 | image_min = image_projected[0]; |
| 1000 | image_max = image_projected[0]; |
| 1001 | |
| 1002 | for (CGV_INT i = 1; i < numEntries; i++) |
| 1003 | { |
| 1004 | if (image_min < image_projected[i]) |
| 1005 | image_min = image_projected[i]; |
| 1006 | if (image_max > image_projected[i]) |
| 1007 | image_max = image_projected[i]; |
| 1008 | } |
| 1009 | |
| 1010 | CGV_FLOAT img_diff = image_max - image_min; |
| 1011 | |
| 1012 | if (img_diff == 0.0f) |
| 1013 | return; |
| 1014 | if (cmp_isnan(img_diff)) |
| 1015 | return; |
| 1016 | |
| 1017 | image_s = (clusters - 1) / img_diff; |
| 1018 | |
| 1019 | for (CGV_UINT8 i = 0; i < numEntries; i++) |
| 1020 | { |
| 1021 | image_v[i] = image_projected[i] * image_s; |
| 1022 | image_z[i] = cmp_floor(image_v[i] + 0.5F - image_min * image_s); |
| 1023 | projected_index_out[i] = (CGV_UINT8)image_z[i]; |
| 1024 | |
| 1025 | what[i].image = image_v[i] - image_z[i] - image_min * image_s; |
| 1026 | what[i].index = i; |
| 1027 | image_dm += what[i].image; |
| 1028 | image_r += what[i].image * what[i].image; |
| 1029 | } |
| 1030 | |
| 1031 | if (numEntries * image_r - image_dm * image_dm >= (CGV_FLOAT)(numEntries - 1) / 8) |
| 1032 | { |
| 1033 | image_dm /= numEntries; |
| 1034 | |
| 1035 | for (CGV_INT i = 0; i < numEntries; i++) |
| 1036 | what[i].image -= image_dm; |
| 1037 | |
| 1038 | CGV_UINT8 tmp_index; |
no test coverage detected