我有一个灰度图像,我想制作一个
的功能换句话说,我想要一个平滑函数,它近似于局部区域中另一个函数的最大值,同时在所有点上估计该函数。
任何想法?
我的第一次传递相当于选择“高点”(通过将图像与高阶2-D多项式的最小二乘拟合进行比较)并将2-D多项式与它们及其斜率相匹配。由于第一次合适需要比我的地址空间更多的工作空间,我认为它不会起作用,我将不得不想出其他的东西......
我的最终目标是对图像进行平滑调整,以便每个局部区域使用全部值。关键的实现是“几乎完美”的功能对我来说没问题。
以下程序(从未明确地使用max函数)是我最终得到的结果:
image -= mean;
)image /= stdev;
)[-1,1]
中(奇怪的是,我的大多数测试图像在该范围内的优于99%,而不是预期的67%)通过一点操作,可以转换为找到我询问的Max函数。
答案 0 :(得分:2)
这是一件容易的事;我不知道它有多好。
要获得平滑,请使用您喜欢的模糊算法。例如,半径内的平均点5.空间成本是图像大小的顺序,时间是图像大小与模糊半径的平方的乘积。
获取每个像素与原始图像的差异,找到(original[i][j] - blurred[i][j])
的最大值,并将该值添加到模糊图像中的每个像素。保证总和过度逼近原始图像。时间成本与图像大小成正比,具有恒定的额外空间(如果在计算最大值后覆盖模糊图像
为了做得更好(例如,在某些约束条件下最小化平方误差),您必须选择一类平滑曲线并进行一些实质性计算。您可以尝试二次或三次样条曲线,但在二维样条曲线上并不是很有趣。
答案 1 :(得分:1)
我的快速和肮脏的答案是从原始图像开始,并为每个像素重复以下过程,直到不做任何更改:
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)
你能澄清一下你在某种程度上“平稳”的愿望吗?另外,你想要它有多大“本地区域”接近最大值?
快速而肮脏的答案:源图像的加权平均值和窗口最大值。