numpy自适应阈值公式

时间:2015-06-07 20:11:08

标签: python numpy

我正在尝试根据灰度图像(点值介于0到255之间的numpy 2D数组)计算阈值。

公式如下:

equation http://www.sciweavers.org/tex2img.php?eq=T%3D%202%2F%28w%2Ah%29%20%5Csum_%7Bi%3D0%7D%5E%7Bw-1%7D%20%5Csum_%7Bj%3D0%7D%5E%7Bh-1%7D%20S%28i%2Cj%29&bc=White&fc=Black&im=jpg&fs=12&ff=arev&edit=0

其中w,h是我的图像S的宽度和高度,S(i,j)是该点的值。

我的实施如下:

h,w = sMap.shape
adapTresh = np.sum(sMap)*2/(w*h)

但是对于我的一些图片,这个总数回来了> 255,所以我相信某个地方有问题,我是否使用了numpy错误(再次)?

我不熟悉Python,我是在2天前开始的,所以如果这是一个愚蠢的问题,请原谅我。

print w,h
>> 411,410
print 2/(w*h), np.sum(sMap), adapTresh
>> 0 22461727 266

1 个答案:

答案 0 :(得分:1)

矩阵中所有单元格的平均值是:

avg = np.sum(sMap) / (w * h)

在极端情况下,所有单元格都等于255,这样

avg = 255

例如

In [8]: M = 255 * np.ones(4).reshape((2,2))

In [12]: M
Out[12]: 
array([[ 255.,  255.],
       [ 255.,  255.]])

In [9]: M.sum() * (2.0 / sum(M.shape))
Out[9]: 510.0

所以我认为你的自适应阈值功能是错误的。你有没有打算

In [11]: M.sum() / sum(M.shape)
Out[11]: 255.0