平滑的局部天花板功能

时间:2009-12-24 23:12:59

标签: math image-processing curve-fitting

我有一个灰度图像,我想制作一个

的功能
  1. 密切关注图片
  2. 总是比图像更重要
  3. 在某个给定的比例下顺利。
  4. 换句话说,我想要一个平滑函数,它近似于局部区域中另一个函数的最大值,同时在所有点上估计该函数。

    任何想法?


    我的第一次传递相当于选择“高点”(通过将图像与高阶2-D多项式的最小二乘拟合进行比较)并将2-D多项式与它们及其斜率相匹配。由于第一次合适需要比我的地址空间更多的工作空间,我认为它不会起作用,我将不得不想出其他的东西......


    我做了什么

    我的最终目标是对图像进行平滑调整,以便每个局部区域使用全部值。关键的实现是“几乎完美”的功能对我来说没问题。

    以下程序(从未明确地使用max函数)是我最终得到的结果:

    • 使用“模糊”功能查找每个点的局部均值和标准差。
    • 偏移图像以获得零均值。 (image -= mean;
    • 将每个像素除以其stdev。 (image /= stdev;
    • 现在最多的图像应该在[-1,1]中(奇怪的是,我的大多数测试图像在该范围内的优于99%,而不是预期的67%)
    • 找到整个图像的标准偏差。
    • 将某些范围+/- n * sigma映射到您的输出范围。

    通过一点操作,可以转换为找到我询问的Max函数。

4 个答案:

答案 0 :(得分:2)

这是一件容易的事;我不知道它有多好。

  1. 要获得平滑,请使用您喜欢的模糊算法。例如,半径内的平均点5.空间成本是图像大小的顺序,时间是图像大小与模糊半径的平方的乘积。

  2. 获取每个像素与原始图像的差异,找到(original[i][j] - blurred[i][j])的最大值,并将该值添加到模糊图像中的每个像素。保证总和过度逼近原始图像。时间成本与图像大小成正比,具有恒定的额外空间(如果在计算最大值后覆盖模糊图像

  3. 为了做得更好(例如,在某些约束条件下最小化平方误差),您必须选择一类平滑曲线并进行一些实质性计算。您可以尝试二次或三次样条曲线,但在二维样条曲线上并不是很有趣。

答案 1 :(得分:1)

我的快速和肮脏的答案是从原始图像开始,并为每个像素重复以下过程,直到不做任何更改:

  1. 如果可以通过增加像素值来解析此像素与其邻居之间的超大差值,请执行此操作。
  2. 如果可以通过增加像素值来解析此像素周围的超大斜率变化及其邻居,请执行此操作。
  3. 2D版本看起来像这样:

    for all x:
        d = img[x-1] - img[x]
        if d > DMAX:
            img[x] += d - DMAX
        d = img[x+1] - img[x]
        if d > DMAX:
            img[x] += d - DMAX
    
        dleft = img[x-1] - img[x]
        dright = img[x] - img[x+1]
        d = dright - dleft
        if d > SLOPEMAX:
            img[x] += d - SLOPEMAX
    

答案 2 :(得分:1)

使用RxR滤镜对图像进行最大滤波,然后在最大滤波图像上使用R-1 B样条平滑顺序。 B样条的凸包属性保证它将高于原始图像。

答案 3 :(得分:0)

你能澄清一下你在某种程度上“平稳”的愿望吗?另外,你想要它有多大“本地区域”接近最大值?

快速而肮脏的答案:源图像的加权平均值和窗口最大值。