2013-04-21 70 views
0

我得到了一張Matlab格式的人臉數據集,但我不知道如何在Matlab中導入數據集之後顯示圖像。如何在Matlab中顯示RGB圖像,其中每個通道是單獨的矩陣?

矩陣的大小是60x60x3x1000,這意味着, 圖像的尺寸爲60x60,每個圖像RGB有3個通道,並且有1000個這樣的圖像。

我無法弄清楚如何進行基本操作,比如顯示第i個顏色的第 臉。

謝謝

+1

如何'圖像(X(:,:,:,ⅱ))'? – wakjah 2013-04-21 23:04:54

+0

我收到錯誤:TrueColor CData包含元素超出範圍0.0 <=值<= 1.0 – user2225930 2013-04-21 23:12:35

+3

try:image(squeeze(x(:,:,:,i)))。 – bas 2013-04-21 23:37:37

回答

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)。

因此,要獲得第k個圖像需要

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

,或者,如果你想使用雙精度浮點

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

(我不是100%確定你需要在這種情況下使用squeeze)。

顯示圖像

figure('Name', 'Showing k-th face'); 
imshow(Im_k); 
相關問題