8-Bit и 16-Bit изображения

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

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

The 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, сначала умножить на 65535:

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

И наоборот, разделите на 65535 после преобразования uint16 изображение интенсивности в double:

I64 = double(I16)/65535;

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

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

image(RGB);

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

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

И наоборот, разделите на 255 после преобразования uint8 Изображение RGB для double:

RGB64 = double(RGB8)/255

Преобразование изображения RGB из double на uint16, сначала умножить на 65535:

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

И наоборот, разделите на 65535 после преобразования 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-Bit и 16-Bit массивов

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

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

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

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

  • Реляционные операторы

Преобразование изображения 8-Bit RGB в полутоновое

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

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

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

axis image;

Примечание

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

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

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

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