Fixed approx. gray calculations for cross correlations

test16bit
Stefan Jahn 4 years ago
parent e75e2adedf
commit a7d696384a

@ -213,7 +213,14 @@ void Detect::InputDetect(int *posx, int *posy) {
} }
} }
inline float calc_vector(uint16_t a1, uint16_t a2, uint16_t b1, uint16_t b2, uint16_t c1, uint16_t c2, uint16_t d1, uint16_t d2) { /* returns approx. gray value */
inline uint16_t calc_gray(uint8_t r, uint8_t g, uint8_t b) {
/* Gray ~ 0.3*R + 0.59*G + 0.11*B -> approx. 0.3125*R + 0.625*G + 0.125*B */
return (r >> 2) + (r >> 3) + (g >> 1) + (g >> 3) + (b >> 3);
}
/* returns 4-vector product */
inline uint32_t calc_vector(uint16_t a1, uint16_t a2, uint16_t b1, uint16_t b2, uint16_t c1, uint16_t c2, uint16_t d1, uint16_t d2) {
return a1 * a2 + b1 * b2 + c1 * c2 + d1 * d2; return a1 * a2 + b1 * b2 + c1 * c2 + d1 * d2;
// __m64 m1 = _mm_set_pi16 (a1, b1, c1, d1); // __m64 m1 = _mm_set_pi16 (a1, b1, c1, d1);
// __m64 m2 = _mm_set_pi16 (a2, b2, c2, d2); // __m64 m2 = _mm_set_pi16 (a2, b2, c2, d2);
@ -273,14 +280,14 @@ void Detect::InputDetectCrossC(int *posx, int *posy) {
inx >= 0 && inx < inFrame.w && iny >= 0 && iny < inFrame.h) { inx >= 0 && inx < inFrame.w && iny >= 0 && iny < inFrame.h) {
uint16_t ogray[4]; uint16_t ogray[4];
uint16_t igray[4]; uint16_t igray[4];
ogray[0] = pxo[oldi+0] + pxo[oldi+1] + pxo[oldi+2]; ogray[0] = calc_gray( pxo[oldi+0], pxo[oldi+1], pxo[oldi+2]);
ogray[1] = pxo[oldi+3] + pxo[oldi+4] + pxo[oldi+5]; ogray[1] = calc_gray( pxo[oldi+3], pxo[oldi+4], pxo[oldi+5]);
ogray[2] = pxo[oldi+6] + pxo[oldi+7] + pxo[oldi+8]; ogray[2] = calc_gray( pxo[oldi+6], pxo[oldi+7], pxo[oldi+8]);
ogray[3] = pxo[oldi+9] + pxo[oldi+10] + pxo[oldi+11]; ogray[3] = calc_gray( pxo[oldi+9], pxo[oldi+10], pxo[oldi+11]);
igray[0] = pxi[oldi+0] + pxi[ini+1] + pxi[ini+2]; igray[0] = calc_gray( pxi[oldi+0], pxi[ini+1], pxi[ini+2]);
igray[1] = pxi[oldi+3] + pxi[ini+4] + pxi[ini+5]; igray[1] = calc_gray( pxi[oldi+3], pxi[ini+4], pxi[ini+5]);
igray[2] = pxi[oldi+6] + pxi[ini+7] + pxi[ini+8]; igray[2] = calc_gray( pxi[oldi+6], pxi[ini+7], pxi[ini+8]);
igray[3] = pxi[oldi+9] + pxi[ini+10] + pxi[ini+11]; igray[3] = calc_gray( pxi[oldi+9], pxi[ini+10], pxi[ini+11]);
f += calc_vector( ogray[0], igray[0], f += calc_vector( ogray[0], igray[0],
ogray[1], igray[1], ogray[1], igray[1],
ogray[2], igray[2], ogray[2], igray[2],

Loading…
Cancel
Save