2013-04-21 2 views
0

Мне дали набор данных с человеческими лицами в формате Matlab, но я не знаю, как отображать изображения, после того как я импортировал набор данных в Matlab.Как отображать RGB-изображения в Matlab, где каждый канал является отдельной матрицей?

Размер матрицы 60x60x3x1000, что означает, изображения имеют размеры 60х60, есть 3 канала на изображении RGB, и есть 1000 таких изображений.

Я не могу понять, как выполнять основные операции, такие как отображение i-го лица в цвете.

Благодаря

+1

Как насчет 'изображений (х (:,:,:, б))'? – wakjah

+0

Я получаю ошибку: TrueColor CData содержит элемент вне диапазона 0.0 <= значение <= 1.0 – user2225930

+3

try: image (squeeze (x (:,:,,, i))). – bas

ответ

0

Вы пробовали image(1:60, 1:60, Images(:, :, :, i))?

Чтобы получить индивидуальный канал, который вы можете сделать:

colormap(gray) 
image(Images(:,:,1,i)) 

или

colormap(gray) 
image(Images(:,:,2,i)) 

или

colormap(gray) 
image(Images(:,:,3,i)) 

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

Кроме того, если вы получаете ошибку про то, что вне диапазона попытки:

imagesc(1:60, 1:60, Images(:, :, :, i)) 

Это сказал, что это трудно для меня поверить свой профессор или коллеги не дают вам RGB данных в стандарте [0,255]. Если вы это сделаете, то imagesc будет бесполезным при сравнении цветовых каналов бок о бок.

Также может быть полезно посмотреть, как выглядят некоторые значения в каждой цветовой матрице. Мы могли видеть, что если вы дали мне выход:

min(Images(:, :, 1, 1)) 
max(Images(:, :, 1, 1)) 

Если на самом деле они являются своим родом поплавка, я могу показать вам, как масштабировать его до стандартного целого RGB представления.

0

Похоже, что данные даны в диапазоне [0..255], но типа double (а не uint8).

Таким образом, чтобы получить к-го образ вам нужен

Im_k = uint8(squeeze(Images(:,:,:,k))); 

или, если вы хотите использовать двойную точность с плавающей точкой

Im_k = squeeze(Images(:,:,:,k))/255; 

(я не 100% уверен, что вам нужно использовать в этом случае squeeze).

Показать изображение

figure('Name', 'Showing k-th face'); 
imshow(Im_k);