Note how the descriptors with index=4 has same value (always 0.088388346, or 243 4 181 61 if that float value is shown as 4 bytes) for all dimensions. This is causing issue with bag-of-words algorithms where unrelated images get high matching score because of that. How is it possible or is it expected when descriptor step fails? It feels like memory is initialized to same value but never touched again when creating the descriptor. Downstream, my current workaround is just to detect that kind of pattern and ignore the descriptor.
There are the modifications to reproduce the issue with the mainSift.cpp example code and image above:
Here is an example of descriptors with index=3,4 and 5 respectively extracted from image below:
Note how the descriptors with index=4 has same value (always
0.088388346
, or243 4 181 61
if that float value is shown as 4 bytes) for all dimensions. This is causing issue with bag-of-words algorithms where unrelated images get high matching score because of that. How is it possible or is it expected when descriptor step fails? It feels like memory is initialized to same value but never touched again when creating the descriptor. Downstream, my current workaround is just to detect that kind of pattern and ignore the descriptor.There are the modifications to reproduce the issue with the
mainSift.cpp
example code and image above:The image resolution is 1280x480, so it may not be related to pitch padding like in this post: https://github.com/Celebrandil/CudaSift/issues/41#issuecomment-420625571