【发布时间】:2010-02-17 13:52:12
【问题描述】:
我希望能够计算一行像素中的“平均最亮点”。这是用于原始 3D 扫描仪的。
为了测试,我只是简单地遍历了像素,如果当前像素比之前的像素亮,那条线的最亮点将被设置为当前像素。这当然会在整个图像中产生非常不稳定的结果。
如果有意义的话,我想获得“亮度的平均中心”。
必须是常见的事情,我只是缺少谷歌搜索的正确词。
【问题讨论】:
我希望能够计算一行像素中的“平均最亮点”。这是用于原始 3D 扫描仪的。
为了测试,我只是简单地遍历了像素,如果当前像素比之前的像素亮,那条线的最亮点将被设置为当前像素。这当然会在整个图像中产生非常不稳定的结果。
如果有意义的话,我想获得“亮度的平均中心”。
必须是常见的事情,我只是缺少谷歌搜索的正确词。
【问题讨论】:
计算偏移的强度加权平均值。
鉴于您的示例的强度(猜测)和偏移量:
0 0 0 0 1 3 2 3 1 0 0 0 0 0
1 2 3 4 5 6 7 8 9 10 11 12 13 14
这会给你(5+3*6+2*7+3*8+9)/(1+3+2+3+1) = 7
【讨论】:
您正在寻找1D Convolution,它带有一个过滤器,您可以使用该过滤器“卷积”图像。例如,您可以使用中值过滤器(借用维基百科的示例)
x = [2 80 6 3]
y[1] = Median[2 2 80] = 2
y[2] = Median[2 80 6] = Median[2 6 80] = 6
y[3] = Median[80 6 3] = Median[3 6 80] = 6
y[4] = Median[6 3 3] = Median[3 3 6] = 3
so
y = [2 6 6 3]
因此,这里的窗口大小为 3,因为您一次查看 3 个像素,并将此窗口周围的像素替换为中值。窗口 3 表示,我们查看当前正在评估的像素之前的第一个像素和之后的第一个像素,5 表示之前和之后的 2 个像素,依此类推。
对于mean filter,除了用所有值的平均值替换窗口周围的像素外,您执行相同的操作,即
x = [2 80 6 3]
y[1] = Mean[2 2 80] = 28
y[2] = Mean[2 80 6] = 29.33
y[3] = Mean[80 6 3] = 29.667
y[4] = Mean[6 3 3] = 4
so
y = [28 29.33 29.667 4]
所以对于您的问题,y[3] 是“平均亮点”。
注意y[1](前面没有像素)和y[4](后面没有像素)的边框是如何处理的——这个例子“复制”了边框附近的像素。因此,我们通常用重复或恒定的边界“填充”图像,对图像进行卷积,然后移除这些边界。
这是您可以在许多计算包中找到的标准操作。
【讨论】:
您的问题就像寻找最长序列问题一样。一旦你能够确定一个序列(起点和长度),剩下的就是找到中值,它是中心元素。 为了找到序列,必须存在明暗的定义,或者是相对 -> 以前的值或几个以前的值。绝对:一个固定的阈值。
【讨论】: