2015-06-02 4 views
0

У меня есть изображение RGB, называемое imrgb, размер которого составляет 320 * 512 * 3 double. И у меня также есть color_map = 64 * 3 double. Я использую следующий код:Как совместить полученную «карту» с данным «color_map»?

[X, map] = rgb2ind(imrgb, 256) 

результирующего X = 320 * 512 Uint8, и полученную карту = 65 * 3 двойных. Результирующая «карта» полностью отличается от заданного «color_map». Как исправить эту проблему?

Первые несколько рядов «карта» выглядит следующим образом:

0  0  0 
    0  0.125 1 
    0.56 1  0.439 
    1  0.125 0 
    0.188 1  0.812 
    1  0.749 0 
    0  0.7490 1 
    0.5019 0  0 
    0.7490 1  0.25098 

Первые несколько строк данного «color_map» выглядит следующим образом:

0 0 0.5625 
0 0 0.6250 
0 0 0.6875 
0 0 0.7500 
0 0 0.8125 
0 0 0.8750 
0 0 0.9375 
0 0  1 
0 0.0625 1 
+0

Использование 'rgb2ind' выполняет цветное квантование изображения, если вы не указываете карту ввода цвета и' выход map' обеспечивает цвет карту, которая сегментирует цвета, используя это квантование. Это ** не ** должно соответствовать пользовательской цветовой карте, которая была предоставлена ​​вами **, если ** вы не предоставили эту цветовую карту в качестве входа в 'rgb2ind'. Немного неясно, что вы здесь делаете. Не могли бы вы дать дополнительную информацию о целях сопоставления цветовых карт? Какая у вас общая цель? – rayryeng

+0

@rayryeng, я хочу получить X для дальнейшей обработки изображений. «Color_map» и «imrgb» даны, я просто хочу использовать то, что у меня есть, чтобы получить ровно двухмерное X для представления моего изображения. Как вы сказали, означает ли это, что я должен передать данный «color_map» вместе с данным «imrgb» в уравнение? – Angelababy

+0

@rayryeng, должен ли я делать это следующим образом: [X, color_map] = rgb2ind (imrgb, 256)? Или еще есть что-то, чего я не знаю. – Angelababy

ответ

1

Использование rgb2ind выполняет цветное квантование (по умолчанию используется равномерное квантование непосредственно в пространстве RGB, и мы также применяем dithering к изображению) вашего изображения до определенного количества цветов (в вашем случае 256), если вы не указали цветовую карту ввода. Выход map обеспечивает цветную карту, которая наилучшим образом сегментирует цвета, используя это квантование для вашего изображения. imrgb. Переменная X дает вам индексы, где каждый пиксель отображается в цветной карте из переменной map. Это фактически таблица соответствия цветов.

Эта переменная map сообщает нам, какой цвет из таблицы поиска должен отображаться как пиксель. Например, приведенный выше вызов в вашем сообщении приведет к индексированному изображению X, которое имеет индексы от 1 до 256 и map будет содержать 256 строк, где каждый столбец представляет собой долю красного (первый столбец), зеленый (второй столбец) и синий (третий колонка). Пропорции между [0-1]. Кроме того, каждая строка является уникальным цветом. Поэтому, если индекс, найденный на изображении, равен 5, мы будем искать пятую строку этой цветовой карты, и это цвет, который будет представлять этот пиксель.

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

В этом случае вам просто нужно сделать:

[X, map] = rgb2ind(imrgb, colour_map);