Преобразуйте данные изображения между классами

Обзор преобразований класса изображений

Можно преобразовать uint8 и данные изображения uint16 к double с помощью функции MATLAB® double. Однако преобразование между классами изменяет способ, которым MATLAB и тулбокс интерпретируют данные изображения. Если вы хотите, чтобы полученный массив был интерпретирован правильно как данные изображения, необходимо повторно масштабировать или сместить данные, когда вы преобразовываете его.

Для более легкого преобразования классов используйте одну из этих функций: im2uint8, im2uint16, im2int16, im2single или im2double. Эти функции автоматически обрабатывают перемасштабирование и возмещение исходных данных любого класса изображений. Например, эта команда преобразовывает изображение RGB с двойной точностью с данными в области значений [0,1] к изображению RGB uint8 с данными в области значений [0,255].

RGB2 = im2uint8(RGB1);

Потеря информации в преобразованиях

Когда вы преобразовываете в класс, который использует меньше битов, чтобы представлять числа, вы обычно теряете часть информации в вашем изображении. Например, полутоновое изображение uint16 способно к хранению до 65 536 отличных оттенков серого, но полутоновое изображение uint8 может сохранить только 256 отличных оттенков серого. Когда вы преобразовываете полутоновое изображение uint16 в полутоновое изображение uint8, im2uint8 квантует серые оттенки в оригинальном изображении. Другими словами, все значения от 0 до 127 в оригинальном изображении становятся 0 в изображении uint8, значения от 128 до 385 всего становятся 1 и так далее.

Преобразование индексируемых изображений

Не всегда возможно преобразовать индексируемое изображение от одного класса памяти до другого. В индексируемом изображении матрица изображений содержит только индексы в палитру, а не сами цветные данные, таким образом, никакое квантование цветных данных не возможно во время преобразования.

Например, uint16 или double, индексированное изображение с 300 цветами не может быть преобразовано в uint8, потому что массивы uint8 имеют только 256 отличных значений. Если вы хотите выполнить это преобразование, необходимо сначала сократить количество цветов в изображении с помощью функции imapprox. Эта функция выполняет квантование на цветах в палитре, чтобы сократить количество разных цветов в изображении. Смотрите Уменьшают Цвета Индексируемого Изображения Используя imapprox для получения дополнительной информации.