Вы смешиваете прямую и обратную индексацию.
Я бы подумал вместо этого использовать std::remove_if
.Таким образом, если вы удаляете несколько элементов, вы не сдвигаете весь вектор вперед при каждом стирании.
Это будет выглядеть примерно так:
imageDataVector.erase(std::remove_if(imageDataVector.begin(), imageDataVector.end(), std::bind2nd(std::less<data_type>(), threshold)), imageDataVector.end());
Поочередно попробуйте следующее, отметивчто это приведет к большому перемещению, если вы удалите несколько элементов из вектора.
for (int j=imageDataVector.size()-1 ;j>=0;j--)
{
if(imageDataVector[i] < threshold)
imageDataVector.erase(imageDataVector.begin()+j);
}