Сократите количество, раскрашивает изображение

В системах с 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 могут иметь тип uint8uint16, или double, существуют три возможных цветных определения куба. Например, если изображение RGB имеет класс uint8, 256 значений заданы для каждой цветной плоскости (красный, синий, и зеленый), и, всего, будет 224 (или 16,777,216) цвета, заданные цветным кубом. Этот цветной куб является тем же самым для всего uint8 Изображения RGB, независимо от который цвета они на самом деле используют.

uint8uint16, и 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's.

Универсальное квантование на срезе куба цвета 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 то, когда необходимо сократить количество, раскрашивает индексируемое изображение. 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)