2017-08-14 5 views
1

例えばfloatの配列に平均フィルタを適用すると、window_size=3となります。私は、このライブラリを発見した:浮遊配列でスキマー平均フィルターが機能しないのはなぜですか?

from skimage.filters.rank import mean 
import numpy as np 

x=np.array([[1,8,10], 
      [5,2,9], 
      [7,2,9], 
      [4,7,10], 
      [6,14,10]]) 

print(x) 
print(mean(x, square(3))) 


[[ 1 8 10] 
[ 5 2 9] 
[ 7 2 9] 
[ 4 7 10] 
[ 6 14 10]] 
[[ 4 5 7] 
[ 4 5 6] 
[ 4 6 6] 
[ 6 7 8] 
[ 7 8 10]] 

をしかし、この機能は、フロートアレイ上で実行することはできません。

from skimage.filters.rank import mean 
import numpy as np 

x=np.array([[1,8,10], 
      [5,2,9], 
      [7,2,9], 
      [4,7,10], 
      [6,14,10]]) 

print(x) 
print(mean(x.astype(float), square(3))) 

File "/home/pd/RSEnv/lib/python3.5/site-packages/skimage/util/dtype.py", line 236, in convert 
raise ValueError("Images of type float must be between -1 and 1.") 
    ValueError: Images of type float must be between -1 and 1. 

これを解決する方法は?一般に

答えて

2

(これは他のプログラミング言語のために有効である)、画像は、典型的には2つの方法で表すことができる範囲[0, 255]の強度値を有する

  • 。この場合、値はuint8 - 符号なし整数8バイトです。
  • であり、強度値は[0, 1]である。この場合、値はタイプfloatです。
  • 言語とライブラリによっては、ピクセルの強度に許容される値の種類と範囲が多少なりとも許容される場合があります。

    ここでエラーがあなたのイメージのピクセルの値が(あなたのarrayがタイプfloatであることが、彼らは範囲[-1, 1]ではないことを示しています。値は[0, 255]の間にあるとおり、あなただけでそれらすべてを分割する必要があります255整数に値を変換するとまた働くかもしれ

    Hereは、サポートされている画像データの種類を説明するscikitイメージのユーザー・ガイドで、このページから

    2つの文:。。。

    画像をフロート
  • 注範囲に制限されなければならない-1 1に、データ型自体はこの範囲を超えることがあるにもかかわらず
  • それはDTYPEに関するこれらの仮定に違反するので、あなたは、画像の上にastypeを使用しないでください範囲
関連する問題