我有一个2D图像,我要对其进行低通滤波,并具有以下约束/质量指标:
- 我无法向图像“添加”光线,因此结果中的每个像素应<=输入中的相应像素。
- 低通截止频率应作为参数进行实验
- 重复应用此过滤器不应显着改变结果。
- 运行该算法所需的时间(5MPix图像需要5分钟)
- 尽量减少被滤除的光量。
以下是我尝试过的一些方法,以及它们的缺点:
像正常情况一样使用高斯滤镜,然后将结果下拉以符合约束1。这与前3个点非常吻合,但比所需的光要少得多。
通过它们之间的“低”点和“向下”抛物线拟合“向上”抛物线以使其平滑。这在1D中效果很好,但是首先在水平方向应用它,然后在垂直方向应用它会在2D中产生不好的效果。对于我的应用程序,它需要花费更长的时间,但不会太长。但是,重复应用此过滤器将大大改变结果。如果(1D)输入是一个完美的“向下”抛物线(根本不应该过滤),它将由位于开始/结束处的2个“向上”抛物线代替。
使用其他形式的2D“基本”函数和线性求解来找到最佳参数。这只是一个想法,目前尚未实现/测试。
我在信号处理方面的经验几乎仅限于图像处理,因此我希望在信号处理其他领域活跃的专家的帮助下找到解决此问题的替代方法。
更新2011/08/18
根据当前的反应,我决定通过添加典型输入的图形以及我最初描述的3种方法的结果以及到目前为止所收到的建议,使事情变得更加清晰。为了便于比较,在这些示例中我仅使用了一维过滤。
输入数据:
高斯滤波器 +将其调低以符合要求(1)。
您会看到降低它会导致右侧不必要的减光。
抛物线
对我而言,这是非常出色的,可悲的是,它不能通过首先应用水平然后垂直来完美地转换为2D。在这种情况下,您还会看到我可以以浮点分辨率评估拟合的抛物线,这虽然不大,但却不是绝对必要的。
灰度腐蚀
根据rwong的建议,我尝试了灰度腐蚀。我使用了与“拟合”抛物线形状相同的抛物线形结构元素。结果几乎完全相同,因此这看起来很有希望。但是,仍然存在一些问题:1.我的结构元素“不够大”(尽管宽度已经达到801像素)1.我只有“向上”抛物线,没有“向下抛物线”来平滑从一个抛物线的过渡到下一个。
中值过滤
仅出于完整性考虑,并不是我真正想要的。
原始数据
我将原始输入数据+各种python命令粘贴到pastebin上,因此您也可以尝试使用相同的数据。
http://pastebin.com/ASnJ9M0p