В системах с 24-битными цветными дисплеями изображения истинного цвета могут отобразить до 16 777 216 (то есть, 224) цвета. В системах с более низкими экранными битовыми глубинами изображения истинного цвета все еще отображены обоснованно хорошо потому что MATLAB® автоматически использование окрашивает приближение и размывающийся в случае необходимости. Цветное приближение является процессом, которым программное обеспечение выбирает новые цвета, если прямые соответствия не могут быть найдены.
Индексируемые изображения, однако, могут вызвать проблемы, если у них есть большое количество цветов. В общем случае необходимо ограничить индексированные изображения 256 цветами по следующим причинам:
В системах с 8-битным отображением индексированные изображения больше чем с 256 цветами должны будут быть размыты или сопоставлены и, поэтому, не могут отобразиться хорошо.
На некоторых платформах палитры не могут превысить 256 записей.
Если индексируемое изображение имеет больше чем 256 цветов, MATLAB не может сохранить данные изображения в uint8
массив, но обычно использует массив типа данных double
вместо этого, делая размер ресурса хранения изображения намного больше (каждый пиксель использует 64 бита).
Большая часть предела форматов файла изображения индексировала изображения к 256 цветам. Если вы пишете индексируемое изображение больше чем с 256 цветами (использующий imwrite
) к формату, который не поддерживает больше чем 256 цветов, вы получите ошибку.
Эта тема уточняет методы, чтобы сократить количество, раскрашивает изображение.
Сокращать количество раскрашивает изображение, используйте rgb2ind
функция. Эта функция преобразует изображение истинного цвета в индексируемое изображение, сокращение количества раскрашивает процесс. rgb2ind
предоставляет следующие методы для аппроксимации цветов в оригинальном изображении:
Квантование (описанный в квантовании)
Универсальное квантование
Минимальное квантование отклонения
Отображение палитры (описанный в Отображении Палитры)
Качество получившегося изображения зависит от метода приближения, который вы используете, область значений раскрашивает входное изображение, и используете ли вы размывание. Обратите внимание на то, что различные методы работают лучше на различные изображения. Смотрите Уменьшают Цвета Используя Размывание для описания размывания и как включить или отключить его.
Сокращение количества раскрашивает изображение, включает квантование. Функциональный rgb2ind
квантование использования как часть его алгоритма сокращения количества цветов. rgb2ind
поддержки два метода квантования: универсальное квантование и минимальное квантование отклонения.
Важный термин в обсуждениях квантования изображений является кубом цвета RGB. Куб цвета RGB является 3D массивом всех цветов, которые заданы для конкретного типа данных. Поскольку изображения RGB в MATLAB могут иметь тип uint8
uint16
, или double
, существуют три возможных цветных определения куба. Например, если изображение RGB имеет тип данных uint8
, 256 значений заданы для каждой цветной плоскости (красный, синий, и зеленый), и, всего, будет 224 (или 16,777,216), цвета заданы цветным кубом. Этот цветной куб является тем же самым для всего uint8
Изображения RGB, независимо от который цвета они на самом деле используют.
uint8
uint16
, и double
цветные кубы у всех есть та же область значений цветов. Другими словами, самый яркий красный в uint8
Изображение RGB появляется то же самое как самый яркий красный в double
Изображение RGB. Различие то, что double
Куб цвета RGB имеет намного больше оттенков красного цвета (и намного больше оттенков всех цветов). Следующий рисунок показывает куб цвета RGB для uint8
изображение.
Куб Цвета RGB для Изображений uint8
Квантование включает деление куба цвета RGB во многие меньшие поля и затем отображения всех цветов, которые находятся в пределах каждого поля к значению цвета в центре того поля.
Универсальное квантование и минимальное квантование отклонения отличаются по подходу, используемому, чтобы разделить куб цвета RGB. С универсальным квантованием цветной куб сокращается в поля равного размера (меньшие кубы). С минимальным квантованием отклонения цветной куб сокращается в поля (не обязательно кубы) различных размеров; размеры полей зависят от того, как цвета распределяются в изображении.
Универсальное Квантование. Чтобы выполнить универсальное квантование, вызовите rgb2ind
и задайте допуск. Допуск определяет размер полей, имеющих форму куба, на которые разделен куб цвета RGB. Допустимая область значений для установки допуска [0,1]. Например, если вы задаете допуск 0.1
, затем ребра полей являются одной десятой, которая длина куба цвета RGB и максимальное общее количество полей
n = (floor(1/tol)+1)^3
Команды ниже выполняют универсальное квантование с допуском 0,1.
RGB = imread('peppers.png');
[x,map] = rgb2ind(RGB, 0.1);
Следующая фигура иллюстрирует универсальное квантование uint8
изображение. Для ясности рисунок показывает двумерный срез (или цветная плоскость) от цветного куба где red=0 и зелено-синий диапазон от 0 до 255. Значения фактического пикселя обозначаются центрами x маркеров.
Универсальное квантование на срезе куба цвета RGB
После того, как цветной куб был разделен, все пустые поля выводятся. Поэтому только одно из полей используется, чтобы произвести цвет для палитры. Как показано ранее максимальная длина палитры, созданной универсальным квантованием, может быть предсказана, но палитра может быть меньшей, чем предсказание потому что rgb2ind
удаляет любые цвета, которые не появляются во входном изображении.
Минимальное Квантование Отклонения. Чтобы выполнить минимальное квантование отклонения, вызовите rgb2ind
и укажите, что максимальное количество раскрашивает палитру выходного изображения. Номер, который вы задаете, определяет количество полей, на которые разделен куб цвета RGB. Эти команды используют минимальное квантование отклонения, чтобы создать индексируемое изображение с 185 цветами.
RGB = imread('peppers.png');
[X,map] = rgb2ind(RGB,185);
Минимальное квантование отклонения работает путем соединения пикселей в группы на основе отклонения между их пиксельными значениями. Например, набор синих пикселей может группироваться, потому что у них есть небольшое отклонение от центрального пикселя группы.
В минимальном квантовании отклонения поля, которые делят цветной куб, отличаются по размеру и не обязательно заполняют цветной куб. Если некоторые области цветного куба не имеют пикселей, существует, не окружает эти области.
В то время как вы определяете номер полей, n
, использоваться rgb2ind
, размещение определяется алгоритмом, когда это анализирует цветные данные в вашем изображении. Если изображение разделено на n
оптимально расположенные поля, пиксели в каждом поле сопоставлены с пиксельным значением в центре поля, как в универсальном квантовании.
Получившаяся палитра обычно имеет количество записей, которые вы задаете. Это вызвано тем, что цветной куб разделен так, чтобы каждая область содержала по крайней мере один цвет, который появляется во входном изображении. Если входное изображение использует меньше цветов, чем номер, вы задаете, выходная палитра будет иметь меньше, чем n
цвета и выходное изображение будут содержать все цвета входного изображения.
Следующий рисунок показывает тот же двумерный срез цветного куба как показано на предыдущем рисунке (демонстрирующий универсальное квантование). Одиннадцать полей были созданы с помощью минимального квантования отклонения.
Минимальное квантование отклонения на срезе куба цвета RGB
Для данного количества цветов минимальное квантование отклонения приводит к лучшим результатам, чем универсальное квантование, потому что это учитывает фактические данные. Минимальное квантование отклонения выделяет больше записей палитры в цвета, которые часто появляются во входном изображении. Это выделяет меньше записей в цвета, которые нечасто появляются. В результате точность цветов выше, чем с универсальным квантованием. Например, если входное изображение будет иметь много оттенков зеленого цвета и немного оттенков красного цвета, будет больше зеленых, чем красные в выходной палитре. Обратите внимание на то, что расчет для минимального квантования отклонения занимает больше времени, чем это у универсального квантования.
Если вы задаете фактическую палитру, чтобы использовать, rgb2ind
отображение палитры использования (вместо квантования), чтобы найти цвета в заданной палитре, которые лучше всего совпадают с цветами в изображении RGB. Этот метод полезен, если необходимо создать изображения, которые используют фиксированную палитру. Например, если вы хотите отобразить несколько индексируемых изображений на 8-битном отображении, можно избежать цветных проблем путем отображения их всех с той же палитрой. Отображение палитры производит хорошее приближение, если заданная палитра имеет схожие цвета тем в изображении RGB. Если палитра не имеет схожих цветов тем в изображении RGB, этот метод приводит к плохим результатам.
Этот пример иллюстрирует отображение двух изображений к той же палитре. Палитра, используемая для двух изображений, создается на лету с помощью функции MATLAB colorcube
, который создает палитру RGB, содержащую количество цветов, которые вы задаете. colorcube
всегда создает ту же палитру для данного количества цветов.), Поскольку палитра включает, окрашивает все в кубе цвета RGB, выходные изображения могут довольно аппроксимированный входные изображения.
RGB1 = imread('autumn.tif'); RGB2 = imread('peppers.png'); X1 = rgb2ind(RGB1,colorcube(128)); X2 = rgb2ind(RGB2,colorcube(128));
Примечание
Функциональный imshow
также полезно для отображения нескольких индексируемых изображений. Для получения дополнительной информации см. Изображения на дисплее Индивидуально в Той же фигуре или странице с описанием для imshow
.
Использование imapprox
то, когда необходимо сократить количество, раскрашивает индексируемое изображение. imapprox
основан на rgb2ind
и использует те же методы приближения. По существу, imapprox
первые вызовы ind2rgb
преобразовывать изображение в формат RGB, и затем вызывает rgb2ind
возвратить новое индексируемое изображение с меньшим количеством цветов.
Например, эти команды создают версию trees
отобразите с 64 цветами, а не оригиналом 128.
load trees
[Y,newmap] = imapprox(X,map,64);
imshow(Y,newmap)
Качество получившегося изображения зависит от метода приближения, который вы используете, область значений раскрашивает входное изображение, и используете ли вы размывание. Обратите внимание на то, что различные методы работают лучше на различные изображения. Смотрите Уменьшают Цвета Используя Размывание для описания размывания и как включить или отключить его.
Когда вы используете rgb2ind
или imapprox
сокращать количество раскрашивает изображение, получившееся изображение может выглядеть нижним к оригиналу, потому что некоторые цвета потеряны. rgb2ind
и imapprox
оба выполняют размывание, чтобы увеличить очевидное число, раскрашивает выходное изображение. Размывание изменяет цвета пикселей в окружении так, чтобы средний цвет в каждом окружении аппроксимировал исходный цвет RGB.
Для примера того, как размывание работает, рассмотрите изображение, которое содержит много темно-оранжевых пикселей, для которых нет никакого точного совпадения в палитре. Чтобы создать видимость этого оттенка оранжевого, размывание выбирает комбинацию цветов из палитры, которые, взятый вместе в качестве группы на шесть пикселей, аппроксимируют желаемый оттенок оранжевого. Издалека, пиксели, кажется, правильный оттенок, но если вы смотрите близко на изображение, вы видите смешение других оттенков. Чтобы проиллюстрировать размывание, следующий пример загружает 24-битное изображение истинного цвета, и затем использует rgb2ind
создать индексируемое изображение со всего восемью цветами. Первый пример не использует размывание, второе действительно использует размывание.
Считайте изображение и отобразите его.
rgb = imread('onion.png');
imshow(rgb)
Создайте индексируемое изображение с восемью цветами и без размывания.
[X_no_dither,map] = rgb2ind(rgb,8,'nodither');
imshow(X_no_dither,map)
Создайте индексируемое изображение с помощью восьми цветов с размыванием. Заметьте, что размытое изображение имеет большее число очевидных цветов, но несколько нечетко выглядит. Изображение, произведенное без размывания, имеет меньше очевидных цветов, но улучшенное пространственное разрешение когда по сравнению с размытым изображением. Один риск в выполнении сокращения количества цветов без размывания состоит в том, что новое изображение может содержать ложные контуры.
[X_dither,map] = rgb2ind(rgb,8,'dither');
imshow(X_dither,map)