2011-09-24 94 views
3

我正在写变量半径(标准偏差)的高斯模糊,即图像的每个像素使用不同的内核进行卷积。计算高斯模糊的标准技术在这里不起作用:FFT,轴分离,重复盒模糊 - 他们都假设内核对于整个图像是相同的。现在可变半径高斯模糊,近似内核

,我试图使用以下方案来近似它:

具有分段常数函数f(x,y)的近似高斯核K(X,Y)由轴的一组N个定义的-aligned矩形řķ和系数αķ为:

F(X,Y)=Σ K = 1ñαķ·χřķ(X,Y)

令G(X,Y)是我们的图像,然后

K(X,Y)·G(X,Y)DXDY≈ ∬ F(X,Y)·G(X,Y)DXDY =Σ K = 1ñαķ·∬řķ克(X,Y)DXDY

RHS上的积分是一个矩形上的简单积分,因此可以通过预计算整个图像的部分和来在恒定时间内计算。

结果算法运行在O(W·H·N)其中W和H是图像的尺寸,N是(AFAIK)与近似值的误差成反比。

其余部分是找到一个很好的近似函数f(x,y)。 如何在给定矩形数N(最小化误差)或给定误差(最小化矩形数)的情况下找到高斯的最佳逼近?

+0

变量半径如何进入高斯内核的近似值?此外,你的卷积方程(模糊)看起来很奇怪:你的意思是写'G(x0,y0)=?K(x-x0,y-y0)?g(x,y)dxdy'?在任何情况下,您可以采取的另一种方法是对不同的内核执行多个卷积,然后以位置相关的方式在它们之间进行线性插值。 –

+0

@Kipton:我假定内核以(0,0)为中心并具有固定的半径。可以在不改变相对误差率的情况下,对每个像素进行恒定时间的转换和缩放与其近似的一组矩形。 – ybungalobill

+0

@Kipton:您的方法具有线性时间和空间复杂性,当将误差趋于零时变为二次方。 – ybungalobill

回答

0

考虑到矩形的位置和大小,计算系数应该相当容易,所以真正的问题是找出将矩形放在哪里。

由于您近似于高斯,因此我们将注意力集中在中心与高斯中心重合的矩形上似乎至少是合理的,所以我们实际上只有一维问题 - 计算嵌套的大小我假设的一组矩形或者是正方形,或者如果您的纵横比不是1,则与高斯类似。

这可以通过动态编程来解决。假设你从外面工作到中间。在N阶段,你已经计算出一个nxk表格,它给出了来自1,2 ... N个外部像素环的最佳逼近误差,用于1,2,... k个不同的矩形,以及最内部的矩形的大小负责那个最好的错误。为了计算N + 1阶段,你考虑到目前为止最内层矩形的每个可能的大小,为外层区域贡献x环像素。您可以计算出该矩形的alpha值,该值最适合新环中的像素,并且外围的环不会留在外部矩形中。使用已计算表中的值,可以知道当您留出k个外部矩形以覆盖这些区域时可能获得的最佳误差,因此您可以计算出现在N + 1个像素环所产生的最佳总误差。这允许您填写N + 1个外部像素的表格条目。当你在这个区域的中间工作时,你将能够为整个区域制定出最佳的解决方案。

+0

很明显,配置相对于原点是对称的,并且不失一般性,矩形居中(如果不是,则有4个对称矩形可以由4个居中矩形组合来代替:一个大,两个in一个“+”号和一个小号)。但是我不明白你为什么说这是一维问题。谁说所有的矩形具有相同的纵横比?为什么它们不能重叠但不能嵌套?事实上,我几乎可以肯定,最佳解决方案将包含非嵌套矩形。 – ybungalobill

+0

一维问题的含义是 - 在我所假设的约束下 - 矩形中只有一个自由度:它的大小。反过来,这意味着一个动态编程方法可以沿着一维线路工作 - 在我的答案中增加N--这通常是动态编程问题之间的区别,这个问题很难处理。如果通过考虑嵌套矩形 - 或者至少一组预定形状的非相交图形无法找到全局最优解 - 那么这种方法可能不实用 - 对不起。 – mcdowella