Потеря информации после изменения размера изображения с помощью библиотеки skimage python

Я использую следующую функцию для изменения размера набора изображений, имеющего форму (samples, 1, image_row, image_column). Я использую библиотеку skimage.

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]]

person user297850    schedule 23.11.2016    source источник


Ответы (2)


Ваши изображения будут преобразованы в числа с плавающей запятой при изменении размера. Существует необязательный логический флаг, который принимает transform.resize(): preserve_range. Из исходного кода

preserve_range: логическое значение, необязательно. Сохранять ли исходный диапазон значений. В противном случае входное изображение преобразуется в соответствии с соглашениями img_as_float.

Установите это значение на True, и это должно решить вашу проблему.

person gobrewers14    schedule 23.11.2016

Выход resize имеет тип dtype с плавающей запятой, поэтому он находится в диапазоне 0-1. Вы можете преобразовать свое изображение обратно в диапазон uint8 с помощью:

from skimage import img_as_ubyte
image = img_as_ubyte(image)

Полное описание типов данных и их диапазоны.

person Stefan van der Walt    schedule 23.11.2016