exponenta event banner
Изображения

8-Bit и 16-Bit

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

Числа с двойной точностью (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, сначала умножить на 65535:

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

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

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

Большинство функций 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-битного изображения 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-by-n-by-3 значений с плавающей запятой в диапазоне [0, 1].

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