Скользящее окно с использованием функции as_strided в numpy? - PullRequest
6 голосов
/ 25 сентября 2011

Когда я реализую скользящее окно, используя python для обнаружения объектов в неподвижных изображениях, я узнаю хорошую функцию:

numpy.lib.stride_tricks.as_strided

Итак, я попытался выработать общее правило, чтобы избежать ошибок, в которых я могу потерпеть неудачу при изменении размера нужных мне раздвижных окон. Наконец я получил это представление:

all_windows = as_strided(x,((x.shape[0] - xsize)/xstep ,(x.shape[1] - ysize)/ystep ,xsize,ysize), (x.strides[0]*xstep,x.strides[1]*ystep,x.strides[0],x.strides[1])

, в результате чего получается 4-х мерная матрица. Первые два представляют количество окон на осях x и y изображения. а остальные представляют размер окна (xsize, ysize)

и step представляет смещение между двумя последовательными окнами.

Это представление отлично работает, если я выберу квадратные раздвижные окна. но все же у меня есть проблема в том, чтобы заставить это работать для окон e.x. (128,64), где я обычно получаю несвязанные данные с изображением.

Что не так в моем коде. Есть идеи? а если есть лучший способ сделать скользящие окна красивыми и аккуратными в python для обработки изображений?

Спасибо

Ответы [ 3 ]

3 голосов
/ 30 июля 2013

В вашем коде есть проблема. На самом деле этот код работает хорошо для 2D, и нет причин использовать многомерную версию ( Использование шагов для эффективного фильтра скользящих средних ). Ниже исправлена ​​версия:

A = np.arange(100).reshape((10, 10))
print A
all_windows = as_strided(A, ((A.shape[0] - xsize + 1) / xstep, (A.shape[1] - ysize + 1) / ystep, xsize, ysize),
      (A.strides[0] * xstep, A.strides[1] * ystep, A.strides[0], A.strides[1]))
print all_windows
3 голосов
/ 25 сентября 2011

Ознакомьтесь с ответами на этот вопрос: Использование шагов для эффективного фильтра скользящих средних . По сути, шаги не являются отличным вариантом, хотя они работают.

1 голос
/ 19 июля 2014

Для последующих:

Это реализовано в scikit-learn в функции sklearn.feature_extraction.image.extract_patches.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...