我想实现一个环中值滤波器 - 它所做的基本上是将中心像素替换为其周围圆环中像素的中值。 我可以使一些半径的圆形掩模这样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内核的中心,那么圆的坐标是多少?它有点模棱两可,因此Bresenham算法(见下面的答案)似乎很好。这里有一个老问题http://stackoverflow.com/questions/17454931/how-can-i-apply-a-ring-shaped-median-filter-to-an-image-in-matlab它使用gaussian2D,但因为条件'ring = ring> eps&ring <1e-9'是手动的,并且需要为每个内核大小更改。 – madratman
最简单的方法是在应用中值滤波器之前计算环坐标。在你的情况下,你可以从点(0,5)开始,然后用一小步(假设一次一个度数)跟踪圆/环的形状,但是你必须检查新点是否已经进入列表。 – FiReTiTi