我正在尝试根据灰度图像(点值介于0到255之间的numpy 2D数组)计算阈值。
公式如下:
其中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
答案 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