У меня есть одно 4-канальное изображение HSVL - Hue, Saturation, Value (floats), Label (unsigned int). Задача состоит в том, чтобы вычислить массив сумм оттенков, насыщений и значений для каждой уникальной метки. Например, я смогу получить доступ к выходу Sum [пикселей с меткой 455] = {Hue: 500, Sat: 100, Val: 200}. Размер изображения составляет около 5 МП, а около 3000 разных меток.
Моя идея состоит в том, чтобы иметь ~ 32 сканирования по частям изображения, что приведет к 32 x nLabels суммам. Затем я могу сканировать по 32 разделам изображения, чтобы получить структуры сумм nLabel.
Выполняется ли "проверка по ключу?" существует алгоритм, который является решением этого точного типа проблемы?
Если вы хотите сделать это с помощью CUDA, это может помочь.
Поскольку вам нужны только значения суммы, я думаю, что вам нужно "уменьшить ключ". Thrust обеспечивает реализацию thrust::reduce_by_key()
которая может удовлетворить ваши потребности.
Но перед его использованием вам нужно отсортировать все пиксели по меткам. Это можно сделать с помощью thrust::sort_by_key()
Вы также можете быть заинтересованы в thrust::zip_iterator
, который может thrust::zip_iterator
3-х каналов HSV в один итератор значений для сортировки и сокращения.