Алгоритм Max для скользящего окна с эффективным изображением 2d с переходом> 1

Проблема аналогична применению фильтра максимума скользящего 2D окна к изображению M x N. Однако, в отличие от обычного случая, скользящее окно не просто скользит по 1 пикселю, а вместо этого посредством скачка в k пикселей. Так, например, если k = 2, скользящее окно будет применено горизонтально к пикселю в точках (0,0), (2,0), (4,0), ... и аналогично по вертикали.

Для случая с 1 переходом уже существует реализация в библиотеке CUDA NPP (примитивы производительности). Более конкретно, эти функции называются nppiFilterMax*, Тем не менее, я не смог найти более обобщенную версию для скольжения k-hop. В качестве обходного пути, я мог бы просто использовать функцию NPP, чтобы выполнить максимум фильтра в 1 переход, и просто выбрать результат в соответствующих позициях, хотя это кажется расточительным и неэффективным. Есть ли какая-либо существующая реализация или технический документ для этой проблемы?

1 ответ

Эти функции свертки изображения, как правило, предназначены для hop == 1, когда > 1меньше данных распределяется между различными смещениями, поэтому производительность может снизиться.

За hop > 1Вам может понадобиться написать собственное ядро, чтобы получить лучшую производительность. Вы можете увидеть этот пример CUDA "отделимая свертка" для получения дополнительной информации.

http://docs.nvidia.com/cuda/cuda-samples/index.html

Это идет с белой бумагой, обсуждающей детали. К счастью, максимальная свертка тоже отделима. Вы получите некоторые идеи о том, как написать свое ядро ​​для выполнения этой задачи.

http://docs.nvidia.com/cuda/samples/3_Imaging/convolutionSeparable/doc/convolutionSeparable.pdf

Другие вопросы по тегам