Math 光滑局部celing函数
我有一个灰度图像,我想做一个函数Math 光滑局部celing函数,math,image-processing,curve-fitting,Math,Image Processing,Curve Fitting,我有一个灰度图像,我想做一个函数 紧跟图像 总是比它的形象更刺耳 在一定的尺度上平滑 换句话说,我想要一个光滑函数,它近似于局部区域中另一个函数的最大值,同时高估该函数在所有点上的值 有什么想法吗 我在这方面的第一个步骤是选择“高点”(通过将图像与高阶二维多项式的最小二乘拟合进行比较),并将二维多项式与其斜率进行匹配。由于第一次安装需要比我的地址空间更多的工作空间,我认为它不会工作,我将不得不想出一些其他的东西 我所做的 我的最终目标是对图像进行平滑调整,以便每个局部区域都使用完整的值范围。
我在这方面的第一个步骤是选择“高点”(通过将图像与高阶二维多项式的最小二乘拟合进行比较),并将二维多项式与其斜率进行匹配。由于第一次安装需要比我的地址空间更多的工作空间,我认为它不会工作,我将不得不想出一些其他的东西
我所做的 我的最终目标是对图像进行平滑调整,以便每个局部区域都使用完整的值范围。关键的认识是,一个“近乎完美”的函数对我来说很好 下面的过程(从来没有明确的max函数)就是我最后的结果:
- 使用类似“模糊”的函数查找每个点的局部平均值和标准偏差
- 偏移图像以获得零平均值。(
)image-=mean;
- 将每个像素除以其stdev。(
)image/=stdev;
- most图像现在应该在
中(奇怪的是,我的大多数测试图像在该范围内的质量超过99%,而不是预期的67%)[-1,1]
- 找出整个图像的标准偏差
- 将一些span+/-n*sigma映射到您的输出范围
只需稍加操作,就可以将其转换为我所问的最大函数。你能澄清一下,你希望它在某种程度上“平滑”是什么意思吗?此外,在一个“局部区域”的多大范围内,您希望它接近最大值
快速脏答:源图像和窗口最大值的加权平均值。我的快速脏答是从原始图像开始,对每个像素重复以下过程,直到没有更改:
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
使用RxR滤波器对图像进行最大滤波,然后对最大滤波图像使用R-1阶B样条平滑。B样条曲线的凸包属性保证它将高于原始图像。这里有一些简单的东西;我不知道它有多好
(原始[i][j]-模糊[i][j])
的最大值,并将该值添加到模糊图像中的每个像素。该总和保证与原始图像过度接近。时间成本与图像的大小成比例,并具有恒定的附加空间(如果在计算最大值后覆盖模糊图像)为了做得更好(例如,在某些约束条件下最小化平方误差),您必须选择一些平滑曲线并进行一些实质性的计算。您可以尝试二次或三次样条曲线,但在二维中,样条曲线没有多大乐趣。-通过“平滑”,我只希望函数中的小变化(以及它的斜率)从一个像素到下一个像素。理想情况下,我想要一个数学意义上平滑的函数,但这对于一个离散的函数来说是困难的。-局部区域的大小是调谐参数之一。-至于加权平均的想法;加窗的最大值不能够进行阶跃变化吗?或者我读错了。选择N个最接近的局部最大值并根据距离对其进行加权可能会做到这一点…我必须考虑这一点。是的,加窗的最大值可以进行阶跃变化。你可以加权平均值b基于像素与达到最大值的位置之间的距离来平滑,或者你可以应用一些平滑函数。我意识到存在一个问题:如果你有一个斜率变化太大的局部最大值,它可能永远不会被校正。我想你可以给每个相邻点加上一半的差异在这种情况下…或者你可以将其写为一个带约束的优化问题。如果你使用任何平滑基础,你可以最小化控制点高度之和(或平方和),但平滑函数要比图像大。但是,在平滑之后进行最大滤波可能更快更容易。我喜欢:),然而,我认为在所有高点添加钟形曲线(
n/(1+r^2)
是我的选择)会更好。要使所有曲线加起来精确到正确的数量并不难(线性代数),只要没有更好的结果,找到每个局部区域的平均值和标准偏差,并使用x\u bar+-n*sigma
。或者,最好通过固定平均值并只考虑其上方或下方的点来确定“上”和“下”标准偏差。这对于不平衡的区域(如恒星场)效果更好。虽然我不同意你的建议,但它为我指明了正确的方向。