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

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

Индексируемое изображение состоит из матрицы данных, X, и матрицы палитры, map. map является m-3 массивом класса double, содержащий значения с плавающей точкой в области значений [0, 1]. Каждая строка map задает красные, зеленые, и синие компоненты единственного цвета. Индексируемое изображение использует “прямое отображение” пиксельных значений к значениям палитры. Цвет каждого пикселя изображения определяется при помощи соответствующего значения X как индекс в map. Значения X поэтому должны быть целыми числами. Значение 1 точка к первой строке в map, значение 2 точки к второй строке, и так далее. Отобразите индексируемое изображение с операторами

image(X); colormap(map)

Палитра часто сохранена индексируемым изображением и автоматически загружается с изображением, когда вы используете функцию imread. Однако вы не ограничиваетесь использованием палитры по умолчанию — используют любую палитру, которую вы выбираете. Описание для свойства CDataMapping описывает, как изменить тип отображения используемого.

Следующая фигура иллюстрирует структуру индексируемого изображения. Пиксели в изображении представлены целыми числами, которые являются указателями (индексы) к значениям цвета, сохраненным в палитре.

Отношение между значениями в матрице изображений и палитре зависит от класса матрицы изображений. Если матрица изображений имеет класс double, значение 1 точка к первой строке в палитре, значение 2 точки к второй строке, и так далее. Если матрица изображений имеет класс uint8 или uint16, существует смещение — значение 0 точек к первой строке в палитре, значение 1 точка к второй строке, и так далее. Смещение также используется в форматах графических файлов, чтобы максимизировать количество цветов, которые могут быть поддержаны. В предыдущем изображении матрица изображений имеет класс double. Поскольку нет никакого смещения, значение 5 точек к пятой строке палитры.

Примечание

При использовании средства отображения живописцев на платформе Windows® необходимо только использовать 256 цветов при попытке отобразить индексируемое изображение. Большие палитры могут привести к неожиданным цветам, потому что алгоритм живописцев использует цветовую палитру Windows 256, которую графические драйверы и аппаратное обеспечение машинной графики, как известно, обрабатывают по-другому. Чтобы работать вокруг этой проблемы, используйте Zbuffer или средство отображения OpenGL, как соответствующие.

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

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

Эта фигура изображает изображение интенсивности класса double.

Чтобы отобразить изображение интенсивности, используйте imagesc (“шкала изображений”) функция, которая позволяет вам установить область значений значений интенсивности. imagesc масштабирует данные изображения, чтобы использовать полную палитру. Используйте двух-входную форму imagesc, чтобы отобразить изображение интенсивности, например:

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

Второй входной параметр к imagesc задает желаемую область значений интенсивности. Функция imagesc отображает I путем отображения первого значения в области значений (обычно 0) к первой записи палитры и второму значению (обычно 1) к последней записи палитры. Промежуточные значения линейно распределяются всюду по остающимся цветам палитры.

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

imagesc(I,[0 1]); colormap(winter);

Чтобы отобразить матричный A с произвольной областью значений значений как изображение интенсивности, используйте форму отдельного аргумента imagesc. С одним входным параметром imagesc сопоставляет минимальное значение матрицы данных к первой записи палитры и сопоставляет максимальное значение с последней записью палитры. Например, эти две строки эквивалентны:

imagesc(A); colormap(gray)
imagesc(A,[min(A(:)) max(A(:))]); colormap(gray)

RGB (истинный цвет) изображения

Изображение RGB, иногда называемое изображением истинного цвета, сохранено как m n 3 массивами данных, которые задают красные, зеленые, и синие компоненты цвета для каждого отдельного пикселя. Изображения RGB не используют палитру. Цвет каждого пикселя определяется комбинацией красной, зеленой, и синей интенсивности, сохраненной в каждой цветной плоскости в местоположении пикселя. Форматы графических файлов хранят изображения RGB как 24-битные изображения, где красные, зеленые, и синие компоненты составляют 8 битов каждый. Это приводит к потенциалу 16 миллионов цветов. Точность, с которой может быть реплицировано реальное изображение, привела к псевдониму “изображение истинного цвета”.

Массив RGB MATLAB® может иметь класс double, uint8 или uint16. В массиве RGB класса double каждый компонент цвета является значением между 0 и 1. Пиксель, компоненты цвета которого (0,0,0), отображен столь же черный, и пиксель, компоненты цвета которого (1,1,1), отображен как белый. Эти три компонента цвета для каждого пикселя сохранены по третьему измерению массива данных. Например, красные, зеленые, и синие компоненты цвета пикселя (10,5) сохранены в RGB(10,5,1), RGB(10,5,2) и RGB(10,5,3), соответственно.

Чтобы отобразить истинный цвет отображают RGB, используют функцию image:

image(RGB)

Следующие данные показывают изображение RGB класса double.

Чтобы определить цвет пикселя в (2,3), посмотрите на триплет RGB, сохраненный в (2,3,1:3). Предположим (2,3,1), содержит значение, 0.5176, (2,3,2) содержит 0.1608, и (2,3,3) содержит 0.0627. Цвет для пикселя в (2,3)

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