2015-06-07 184 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