rgb2ind

Преобразование изображения RGB в индексируемое изображение

Синтаксис

[X, карта] = rgb2ind (RGB, n)
X = rgb2ind (RGB, карта)
[X, карта] = rgb2ind (RGB, tol)
[___] = rgb2ind (___, dither_option)

Описание

[X,map] = rgb2ind(RGB,n) преобразовывает изображение RGB в индексируемое изображение X с помощью минимального квантования отклонения и размывания. map содержит в большинстве цветов n. n должен быть меньше чем или равен 65 536.

X = rgb2ind(RGB, map) преобразовывает изображение RGB в индексируемое изображение X с палитрой map с помощью обратного алгоритма палитры и размывания. size(map,1) должен быть меньше чем или равен 65 536.

[X,map] = rgb2ind(RGB, tol) преобразовывает изображение RGB в индексируемое изображение X с помощью универсального квантования и размывания. map содержит в большинстве цветов (floor(1/tol)+1)^3. tol должен быть между 0,0 и 1.0.

[___] = rgb2ind(___,dither_option) включает или отключает размывание. dither_option может быть одним из этих значений.

'dither' (значение по умолчанию)

Dither, при необходимости, чтобы достигнуть лучшего цветного разрешения за счет пространственного разрешения

'nodither'

Карты каждый раскрашивает оригинальное изображение к самому близкому цвету в новой карте. Никакое размывание не выполняется.

Примечание

Значения в результирующем изображении X является индексами в палитру map и не должен использоваться в математической обработке, такой как фильтрация операций.

Поддержка класса

Входное изображение может иметь класс uint8, uint16, single или double. Если длина map меньше чем или равна 256, выходное изображение имеет класс uint8. В противном случае выходное изображение имеет класс uint16.

Значение 0 в выходном массиве, X соответствует первому, раскрашивает палитру.

Примеры

свернуть все

Считайте и отобразите истинный цвет изображение JPEG uint8 туманности.

RGB = imread('ngc6543a.jpg');
figure
imagesc(RGB)
axis image
zoom(4)

Преобразуйте RGB в индексируемое изображение с 32 цветами.

[IND,map] = rgb2ind(RGB,32);
figure
imagesc(IND)
colormap(map)
axis image
zoom(4)

Советы

  • Если вы задаете tol, rgb2ind использует универсальное квантование, чтобы преобразовать изображение. Этот метод включает сокращение куба цвета RGB в меньшие кубы длины tol.

  • Если вы задаете n, rgb2ind использует минимальное квантование отклонения. Этот метод включает сокращение куба цвета RGB в меньшие поля (не обязательно кубы) различных размеров, в зависимости от того, как цвета распределяются в изображении. Если входное изображение на самом деле использует меньше цветов, чем номер, вы задаете, выходная палитра также меньше.

  • Если вы задаете map, rgb2ind использует отображение палитры, которое вовлекает нахождение цветов в map, которые лучше всего совпадают с цветами в изображении RGB.

Алгоритмы

  • Универсальное Квантование — Универсальное квантование сокращает куб цвета RGB в меньшие кубы длины tol. Например, если вы задаете tol 0,1, края кубов являются одной десятой длина куба RGB. Общее количество маленьких кубов:

    n = (floor(1/tol)+1)^3
    

    Каждый куб представляет единственный цвет в выходном изображении. Поэтому максимальной длиной палитры является n. rgb2ind удаляет любые цвета, которые не появляются во входном изображении, таким образом, фактическая палитра может быть значительно уменьшенной, чем n.

  • Минимальное Квантование Отклонения — Минимальное квантование отклонения сокращает куб цвета RGB в меньшие поля (не обязательно кубы) различных размеров, в зависимости от того, как цвета распределяются в изображении. Если входное изображение на самом деле использует меньше цветов, чем заданный номер, выходная палитра также меньше.

  • Обратная Палитра — обратный алгоритм палитры квантует заданную палитру на 32 отличных уровня на компонент цвета. Затем для каждого пикселя во входном изображении найден самый близкий цвет в квантованной палитре.

Ссылки

[1] Спенсер В. Томас, "Эффективное Обратное Вычисление Карты цветов", Графические Драгоценные камни II, (редактор Джеймс Арво), Academic Press: Бостон. 1991. (включает исходный код),

Смотрите также

| | |

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