Существует очень хорошая реализация mean shift сегментации в EDISON (Edge Detection and Image SegmentatiON system).

К сожалению она обладает несколькими недостатками:

  • Оптимизированная версия (HIGH_SPEEDUP) не только не оптимизирована под современные процессоры, но работает даже медленнее чем неоптимизированная версия (NO_SPEEDUP)
  • Отсутствует оптимизация под многоядерные CPU
  • Отсутствует реализация под GPU

Поэтому реализация была модифицирована с учетом следующих целей:

  • Результаты должны быть максимально близки к оригинальной версии (к NO_SPEEDUP)
  • Распараллеливание под многоядерные CPU (OpenMP)
  • Адаптация под GPU (OpenCL)
  • Возможность ускорения множеством видеокарт вместе с процессором (просто из любопытства)

Получившаяся модификация с замерами производительности на различных процессорах и видеокартах выложена на github.

Пример результата:

Unicorn from Blade Runner