【问题标题】:Ring median filter in pythonpython中的环形中值滤波器
【发布时间】:2016-04-26 15:41:22
【问题描述】:

我想实现一个环形中值滤波器 - 它的作用基本上是将中心像素替换为围绕它的圆环中像素的中值。 我可以像这样制作一些半径的圆形遮罩

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 Ring 中值滤波器,在从原始图像中减去后留下的对象的尺度大小小于半径。

另外,不确定我是否应该在 RGB 中执行此操作。我只在灰度图像上看到过中值过滤器

【问题讨论】:

  • 您可以简单地计算环的相对坐标,然后将其应用于您的图像。与在数学形态学中应用自定义结构元素相当。
  • 是的,这正是我的问题——确切的相对坐标是什么。假设 0,0 是 11*11 内核的中心,那么圆的坐标是多少。这有点模棱两可,为此 Bresenham 算法(见下面我的回答)似乎不错。这里有一个老问题stackoverflow.com/questions/17454931/… 使用了 gaussian2D,但为此条件ring = ring&gt;eps &amp; ring&lt;1e-9 是手动的,需要针对每个内核大小进行更改。
  • 最简单的方法是在应用中值滤波器之前计算环坐标。在您的情况下,您可以从点 (0,5) 开始,然后用一小步跟踪圆形/环形(假设一次一个度数),但您必须检查新点是否已经进入列表。

标签: python opencv image-processing median background-subtraction


【解决方案1】:

对圆圈使用 Bresenham 算法https://www.daniweb.com/programming/software-development/threads/321181/python-bresenham-circle-arc-algorithm

Scipy 通用过滤器和这个环形中值内核在实践中相当慢,至少在 python 中是这样

【讨论】:

  • 线形是链,不是省略号的一部分。
  • 嗯,你指的是悬链线吗?减去环形中值滤波器的想法是保持元素小于半径的比例(根据链接的论文)。或者你的意思是在内核中,环的形状不正确
  • 环形将与悬链线曲线不匹配,因此检测会很差。 Thales Helicopter(前欧洲直升机公司)有一项专利,该专利专门使用链形来匹配悬链线曲线。 (PS:我不是投反对票的人……)
  • 这很有趣。能否请您链接专利?无法找到它。 P.S.:不用担心 :),让他们讨厌的人讨厌,呵呵。
  • 专利来自“François-Xavier Filias and Jean Sequeira”,但我不知道号码。
猜你喜欢
  • 2018-01-02
  • 1970-01-01
  • 2016-09-10
  • 2011-10-02
  • 2013-02-25
  • 1970-01-01
  • 2013-08-27
  • 1970-01-01
  • 2013-07-01
相关资源
最近更新 更多