8-битные и 16-битные Изображения

Индексируемые изображения

С двойной точностью (64-битные) числа с плавающей запятой являются представлением MATLAB® по умолчанию для числовых данных. Однако, чтобы уменьшить требования к памяти для работы с изображениями, можно сохранить изображения как 8-битное или 16-битное беззнаковое целое с помощью числовых классов uint8 или uint16, соответственно. Изображение, матрица данных которого имеет класс uint8, называется 8-битным изображением; изображение, матрица данных которого имеет класс uint16, называется 16-битным изображением.

Функция image может отобразить 8-или 16-битные изображения непосредственно, не преобразовывая их в двойную точность. Однако image интерпретирует матричные значения немного по-другому, когда матрицей изображений является uint8 или uint16. Определенная интерпретация зависит от типа изображения.

Если классом X является uint8 или uint16, его значения смещаются 1 прежде чем быть используемым в качестве индексов палитры. Значение 0 точек к первой строке палитры, значение 1 точка к второй строке, и так далее. Команда image автоматически предоставляет соответствующее смещение, таким образом, метод отображения является тем же самым, является ли X double, uint8 или uint16:

image(X); colormap(map);

Индексное смещение палитры для uint8 и данных uint16 предназначается, чтобы поддержать стандартные форматы графических файлов, которые обычно хранят данные изображения в индексируемой форме с палитрой с 256 записями. Смещение позволяет вам управлять и изображения на дисплее этой формы с помощью более эффективного памятью uint8 и массивов uint16.

Из-за смещения необходимо добавить 1, чтобы преобразовать uint8 или uint16 индексированное изображение к double. Например:

X64 = double(X8) + 1;
	or
X64 = double(X16) + 1;

С другой стороны вычтите 1, чтобы преобразовать double индексированное изображение в uint8 или uint16:

X8 = uint8(X64 - 1);
	or
X16 = uint16(X64 - 1);

Растровые изображения

Область значений матриц изображений double обычно [0, 1], но область значений 8-битных изображений интенсивности обычно [0, 255], и область значений 16-битных изображений интенсивности обычно [0, 65535]. Используйте следующую команду, чтобы отобразить 8-битное изображение интенсивности с полутоновой палитрой:

imagesc(I,[0 255]); colormap(gray);

Чтобы преобразовать изображение интенсивности от double до uint16, сначала умножьтесь на 65 535:

I16 = uint16(round(I64*65535));

С другой стороны разделитесь на 65 535 после преобразования изображения интенсивности uint16 к double:

I64 = double(I16)/65535;

Изображения RGB

Компоненты цвета 8-битного изображения RGB являются целыми числами в области значений [0, 255], а не значения с плавающей точкой в области значений [0, 1]. Пиксель, компоненты цвета которого (255,255,255), отображен как белый. Команда image отображает изображение RGB правильно, является ли его классом double, uint8 или uint16:

image(RGB);

Чтобы преобразовать изображение RGB от double до uint8, сначала умножьтесь на 255:

RGB8 = uint8(round(RGB64*255));

С другой стороны разделитесь на 255 после преобразования изображения RGB uint8 к double:

RGB64 = double(RGB8)/255

Чтобы преобразовать изображение RGB от double до uint16, сначала умножьтесь на 65 535:

RGB16 = uint16(round(RGB64*65535));

С другой стороны разделитесь на 65 535 после преобразования изображения RGB uint16 к double:

RGB64 = double(RGB16)/65535;

Поддержка Математических операций uint8 и uint16

Чтобы использовать следующие функции MATLAB с uint8 и данными uint16, сначала преобразуйте данные, чтобы ввести double:

Например, если X является изображением uint8, бросьте данные, чтобы ввести double:

fft(double(X))

В этих случаях выводом всегда является double.

Функция sum возвращает результаты в том же типе как его входной параметр, но предоставляет возможность использовать двойную точность для вычислений.

Целочисленная математика MATLAB

Смотрите Арифметические операции на Целочисленных Классах для получения дополнительной информации о том, как математические функции работают с типами данных, которые не являются, удваивается.

Большая часть Обработки изображений функции Toolbox™ принимает входной параметр uint16 и uint8. Если вы планируете сделать сложную обработку изображений на uin t8 или данных uint16, рассмотрите включая тот тулбокс в вашей вычислительной среде MATLAB.

Другая 8-разрядная и 16-битная поддержка массивов

Можно выполнить несколько других операций на uint8 и массивах uint16, включая:

  • Изменение, переупорядочение и конкатенация массивов с помощью функций reshape, cat, permute, и [] и операторы '

  • Сохранение и загрузка uint8 и массивов uint16 в MAT-файлах с помощью save и load. (Помните, что, если вы загружаете или сохраняете образ формата графических файлов, необходимо использовать команды imread и imwrite вместо этого.)

  • Определение местоположения индексов ненулевых элементов в uint8 и массивах uint16 с помощью find. Однако возвращенный массив всегда имеет класс double.

  • Операторы отношения

Преобразование 8-разрядного изображения RGB к шкале полутонов

Можно выполнить арифметические операции на целочисленных данных, которые позволяют вам преобразовать типы изображения без первого преобразования числового класса данных изображения.

Этот пример читает 8-битное изображение RGB в переменную MATLAB и преобразовывает его в полутоновое изображение:

rgb_img = imread('ngc6543a.jpg'); % Load the image
image(rgb_img) % Display the RGB image

axis image;

Примечание

Это изображение было создано с поддержкой Научного Института Космического телескопа, управляемого Ассоциацией Университетов для Исследования в Astronomy, Inc., из контракта NAs5-26555 НАСА, и воспроизводится с разрешением от AURA/STScI. Цифровые представления изображений, произведенных AURA/STScI, доступны единожды оплачиваемый. Кредиты: J. P. Harrington и Орковский K.J. (Университет Мэриленда) и НАСА.

Вычислите монохромную яркость путем объединения значений RGB согласно стандарту NTSC, который применяет коэффициенты, связанные с чувствительностью глаза к цветам RGB:

I = .2989*rgb_img(:,:,1)...
	+.5870*rgb_img(:,:,2)...
	+.1140*rgb_img(:,:,3);

I является изображением интенсивности с целочисленными значениями в пределах от минимума нуля:

min(I(:))
ans =
	0

максимум к 255:

max(I(:))
ans = 
	255

Чтобы отобразить изображение, используйте полутоновую палитру с 256 значениями. Это избегает потребности масштабировать отображение данных к цвету, которое требуется, если вы используете палитру различного размера. Используйте функцию imagesc в случаях, где палитра не содержит одну запись для каждого значения данных.

Теперь отобразите изображение в новой фигуре, использующей серую палитру:

figure; colormap(gray(256)); image(I);
axis image;

Сопутствующая информация

Другие палитры с областью значений цветов, которые отличаются постоянно от темного до света, могут произвести применимые изображения. Например, попробуйте colormap(summer(256)) за классический вид осциллографа. Смотрите colormap для большего количества выбора.

Функция brighten позволяет вам увеличить или уменьшить интенсивность цвета в палитре, чтобы компенсировать различия в экране компьютера или улучшить видимость слабых или ярких областей изображения (за счет противоположного конца области значений).

Сводные данные типов изображения и числовых классов

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

Тип изображения

двойные Данные

uint8 или uint16 Данные

Индексируемый

Изображение является массивом m на n целых чисел в области значений [1, p].

Палитра является p-3 массивом значений с плавающей точкой в области значений [0, 1].

Изображение является массивом m на n целых чисел в области значений [0, –1].

Палитра является p-3 массивом значений с плавающей точкой в области значений [0, 1].

Интенсивность

Изображение является массивом m на n значений с плавающей точкой, которые линейно масштабируются, чтобы произвести индексы палитры. Типичная область значений значений [0, 1].

Палитра является p-3 массивом значений с плавающей точкой в области значений [0, 1] и является обычно шкалой полутонов.

Изображение является массивом m на n целых чисел, которые линейно масштабируются, чтобы произвести индексы палитры. Типичная область значений значений [0, 255] или [0, 65535].

Палитра является p-3 массивом значений с плавающей точкой в области значений [0, 1] и является обычно шкалой полутонов.

RGB (Истинный цвет)

Изображение является m n 3 массивами значений с плавающей точкой в области значений [0, 1].

Изображение является m n 3 массивами целых чисел в области значений [0, 255] или [0, 65535].

Была ли эта тема полезной?