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 doubleuint8, или 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 правильно, является ли его классом doubleuint8, или uint16:

image(RGB);

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

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

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

RGB64 = double(RGB8)/255

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

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

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

RGB64 = double(RGB16)/65535;

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

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

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

fft(double(X))

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

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

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

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

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

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

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

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

  • Сохранение и загрузка 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, доступны единожды оплачиваемый. Кредиты: Дж.П. Харрингтон и К.Й. Орковский (Университет Мэриленда) и НАСА.

Вычислите монохромную яркость путем объединения значений 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].