2016-11-23 3 views
1

次の関数を使用して、形状が(samples, 1, image_row, image_column)の画像セットのサイズを変更しています。私はskimageライブラリを使用しています。skimage pythonライブラリを使用して画像のサイズを変更した後の情報の損失

from skimage import io 
from skimage.transform import resize 
def preprocess(imgs): 
imgs_p = np.ndarray((imgs.shape[0], imgs.shape[1], img_rows, img_cols), dtype=np.uint8) 
for i in range(imgs.shape[0]): 
    imgs_p[i, 0] = resize(imgs[i, 0], (img_rows, img_cols)) 
return imgs_p 

しかし、サイズ変更された画像の種類が0-1の配列になっていることに気付きました。ここにいくつかのテスト結果があります。サイズ変更されたイメージは0〜1の値のみで構成されています。私は自分のサイズ変更機能に何が問題なのかよくわかりません。

print(image[0,0].shape) 

    (420, 580) 
    print(image[0,0]) 
[[ 0 155 152 ..., 87 91 90] 
    [ 0 255 255 ..., 140 141 141] 
    [ 0 255 255 ..., 157 156 158] 
    ..., 
    [ 0 77 63 ..., 137 133 122] 
    [ 0 77 63 ..., 139 136 127] 
    [ 0 77 64 ..., 149 144 137]] 

    print(resized_image[0,0].shape) 
    (96, 128) 
    print(resized_image[0,0]) 
    [[1 1 0 ..., 0 0 0] 
    [0 0 0 ..., 0 0 0] 
    [0 0 0 ..., 0 0 0] 
    ..., 
    [0 0 0 ..., 0 0 0] 
    [0 0 0 ..., 0 0 0] 
    [0 0 0 ..., 0 0 0]] 

答えて

0

サイズ変更時に画像が浮動小数点に変換されます。オプションのブール値フラグtransform.resize()には、preserve_rangeが入ります。ブール値、オプション:source code

preserve_rangeから。元の値域を維持するかどうか。それ以外の場合は、img_as_floatという規則に従って入力イメージが変換されます。

これをTrueに設定すると、問題が解決するはずです。

0

resizeの出力はdtypeがfloatなので、0-1の範囲です。データ型とその範囲の完全な説明についてはuser guideを参照してください

from skimage import img_as_ubyte 
image = img_as_ubyte(image) 

:あなたは、あなたのイメージは、バックuint8の範囲に変換することができます。

関連する問題