2015-06-07 154 views
0

我想根据灰度图像(点数为2到255之间的点数值的numpy 2D数组)计算阈值。numpy自适应阈值公式

的公式如下:

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 
+0

你应该propably检查什么是'2 /(W * H)'回报一如既往得是围绕分工谨慎。 – Endzior

+0

实际上,它打印0,但计算结果是正确的,所以我相信错误是在总和? – xShirase

+0

尝试使用2.0而不是2 – ZdaR

回答

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 
+0

mmm,我需要考虑这一点,公式是正确的,而且空白图像生成一个完整的面具是合乎逻辑的。我使用了以下文章作为参考:http://www.jdl.ac.cn/doc/2011/201311114474757481_a%20simple%20and%20effective%20saliency%20detection%20approach.pdf – xShirase

+0

这是您的问题!在你的链接论文中,S被定义为S(i,j)= s'(i,j)×f(i,j)。这不是一个简单的总和,你需要实现已经完成的s'(x),f(x)和S(x) – fivetentaylor

+0

,显着性图是好的,呈现为它应该没有问题的那边只是我看不出来的阈值:) – xShirase