Конвертировать 16-битное изображение Tiff в 8-битный RGB - PullRequest
0 голосов
/ 25 июня 2019

Я имею в виду некоторые спутниковые изображения, состоящие из 16-битных .tiff изображений.Цвет кодируется как 16-битный на канал.Я хотел бы знать, как я могу преобразовать эти изображения в обычный 8-битный RGB для дальнейшей обработки CNN.

Я пробовал OpenCV (cv2.read('file',-1)) и PIL (read('file')), но эти два пакета не могут распознавать и читать 16-битные образы TIFF.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Как правило, когда вы хотите читать или писать изображения на Python - любой битовой глубины и формата - лучше всего использовать ImageIO .Как следует из названия, единственной целью является ввод / вывод изображений.

Вы могли бы прочитать на изображении, скажем, example.tif, например, так:

import imageio
image = imageio.imread('example.tif')

Что касается преобразования,это просто базовая математика.Структура данных, в которой вы будете получать данные пикселей, представляет собой массив Numpy .Самоанализ image.shape и image.dtype.Вы должны ожидать, что ваши изображения будут иметь shape из (y, x, 3), где y - это количество пикселей по вертикали, x - по горизонтали, а 3 - три цветовых канала: красный, зеленый.синий.Его dtype (тип данных) должен быть uint16, что означает 16-разрядные целые числа без знака.

16-разрядные целые числа в диапазоне от 0 до 65535 (2 16 -1).Вам нужно привести этот диапазон к 8-битному: от 0 до 255 (2 8 -1).

image = image / 2**8

Это (как правило) даст вам массив с плавающей точкойзначения пикселей.Его тип данных должен быть явно приведен к 8-битному целому числу, чтобы отбрасывать любые дроби.

image = image.astype(numpy.uint8)

Затем либо используйте этот image для дальнейшей обработки, либо сохраните его в (новом) файле:

imageio.imwrite('example.png', image)
1 голос
/ 25 июня 2019

Если все, что вам нужно - это преобразовать, цветовое пространство вашего .tiff файла в RGB. Тогда попробуйте: -

from PIL import Image

img = Image.open(r"Path_to_tiff_image")
img = img.convert("RGB")
img.save(r"path_of_destination_image")

Приведенный выше код сначала открывает изображение .tiff, затем меняет его цветовой режим на RGB. А затем сохраняет его в месте назначения.

...