Я хочу реализовать кольцевой срединный фильтр - то, что он делает, в основном заменяет центральный пиксель на медианные значения пикселей в круговом кольце вокруг него. я могу сделать круглую маску некоторого радиуса, как этотКольцо медианного фильтра в python
kernel = np.zeros((2*radius+1, 2*radius+1))
y,x = np.ogrid[-radius:radius+1, -radius:radius+1]
mask = x**2 + y**2 <= radius**2
kernel[mask] = 1
Затем можно использовать общий фильтр SciPy, чтобы принять медиану значений
import scipy.ndimage.filters as scp_filt
circular_median = scp_filt.generic_filter(my_image, np.median, footprint=kernel)
выше маска в том числе пикселей внутри круга. Какие пиксели должны лежать на окружности, мне кажется немного неоднозначным (подумайте о круге, вписанном в ядра 3 * 3, 5 * 5, 7 * 7). Есть ли функция «кольца», которую я могу использовать OTS или что-то еще?
Почему все это - попытка использовать часть этой статьи http://pages.swcp.com/~spsvs/resume/PODS_DSS2009_2009-01-15.pdf Кольцевой срединный фильтр после вычитания из исходного изображения оставляет объекты с размером шкалы меньше радиуса.
Кроме того, не уверен, что я должен сделать это в RGB или нет. Я видел только медианные фильтры на черно-белых изображениях
Вы можете просто вычисляющие относительные координаты кольца, а затем примените его к изображению. Это сопоставимо с применением настраиваемого элемента структурирования в математической морфологии. – FiReTiTi
Да, это точно мой вопрос - каковы точные относительные координаты. Скажем, если 0,0 - центр ядра 11 * 11, каковы координаты круга. Это немного неоднозначно, и для этого Брешенхамский алго (см. Мой ответ ниже) кажется хорошим. Здесь есть старый вопрос: http://stackoverflow.com/questions/17454931/how-can-i-apply-a-ring-shaped-median-filter-to-an-image-in-matlab, который использует gaussian2D, но для этого условие «кольцо = кольцо» eps & ring <1e-9' является ручным, и его необходимо изменить для каждого размера ядра. – madratman
Самый простой способ - до применения медианного фильтра, чтобы вычислить координаты кольца. В вашем случае вы можете начать с точки (0,5), затем проследить круг/форму кольца с помощью небольшого шага (скажем, градуса за раз), но вы должны проверить, что новая точка еще не находится в список. – FiReTiTi