У меня есть изображение RGB, которое называется imrgb
, размер которого равен 320*512*3
. Я хочу знать, как преобразовать его в двумерное изображение?
Я видел несколько красочных изображений, но они все еще двухмерны, а не трехмерных. Может ли кто-нибудь сказать мне, как преобразовать его в двумерное изображение , но все равно выглядит красочным?Как преобразовать изображение RGB в двумерное изображение в Matlab
ответ
Если я понял правильно, вы можете хранить данные изображения в виде 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
или мы можем использовать любую другую палитру нашего выбора.
Например:
image(X)
colormap(jet(200)) %// The size can be different than the original colormap
axis off
получают:
Итак, как вы видите изображение выглядит 3D, но данные на самом деле 2D.
Это вы имели в виду?
Мои данные содержат: color_map = 64 * 3 и imrgb = 320 * 512 * 3, но у меня нет оригинального изображения. Как я могу получить X? Является ли X матрицей или вектором? – Angelababy
'X' - это матрица размером 320 * 512. Попробуйте '[X, map] = rgb2ind (imrgb, 256)' –
my color_map = 64 * 3. не следует ли мне попробовать: [X, map] = rgb2ind (imrgb, 64) ?? – Angelababy
@ Benoit_11, есть проблема, карта, которую я получаю из [X, map] = rgb2ind (imrgb, 256), полностью отличается от «color_map», который у меня есть. Как решить эту проблему? – Angelababy
Каков твой образ? Это uint8, uint16? –
@ Benoit_11, результат для моего X - 320 * 512 uint8. Как решить проблему? – Angelababy