2015-06-02 4 views
1

У меня есть изображение RGB, которое называется imrgb, размер которого равен 320*512*3. Я хочу знать, как преобразовать его в двумерное изображение?
Я видел несколько красочных изображений, но они все еще двухмерны, а не трехмерных. Может ли кто-нибудь сказать мне, как преобразовать его в двумерное изображение , но все равно выглядит красочным?Как преобразовать изображение RGB в двумерное изображение в Matlab

enter image description here

+0

@ Benoit_11, есть проблема, карта, которую я получаю из [X, map] = rgb2ind (imrgb, 256), полностью отличается от «color_map», который у меня есть. Как решить эту проблему? – Angelababy

+0

Каков твой образ? Это uint8, uint16? –

+0

@ Benoit_11, результат для моего X - 320 * 512 uint8. Как решить проблему? – Angelababy

ответ

5

Если я понял правильно, вы можете хранить данные изображения в виде 2D массива и использовать цветовую палитру, чтобы назначить его цвета, отображая его как «красочное» изображение. В этом случае цветовая карта будет массивом Nx3, где каждая строка соответствует индексу, присутствующему (или отсутствующему) в данных изображения. Так, если в цветовой палитре имеется массив 256x3, например, изображение будет составлено из индексов от 0 до 255.

Например, рассмотрим демонстрационное изображение peppers.png, которое поставляется с Matlab. Давайте прочитаем и используем функцию rgb2ind для хранения данных изображения в переменной X и связанной с ней цветовой палитре в переменной map.

a = imread('peppers.png'); 
[X,map] = rgb2ind(a,256); 

Если мы задаем размер X, мы получаем:

ans = 

    384 512 

Так переменная 2D, даже если исходное изображение (a) был 3D (RGB).

Если мы хотим отобразить эти 2D-данные в качестве красочных, нам необходимо предоставить подходящую цветочную карту. Например, мы можем использовать оригинальную палитру (хранится в map), чтобы получить следующее:

image(X) 
colormap(map) 
axis off 

enter image description here

или мы можем использовать любую другую палитру нашего выбора.

Например:

image(X) 
colormap(jet(200)) %// The size can be different than the original colormap 
axis off 

получают:

enter image description here

Итак, как вы видите изображение выглядит 3D, но данные на самом деле 2D.

Это вы имели в виду?

+0

Мои данные содержат: color_map = 64 * 3 и imrgb = 320 * 512 * 3, но у меня нет оригинального изображения. Как я могу получить X? Является ли X матрицей или вектором? – Angelababy

+0

'X' - это матрица размером 320 * 512. Попробуйте '[X, map] = rgb2ind (imrgb, 256)' –

+0

my color_map = 64 * 3. не следует ли мне попробовать: [X, map] = rgb2ind (imrgb, 64) ?? – Angelababy