2013-10-24 208 views
3

我對Matlab很新穎。我試圖將RGB圖像轉換爲YUV,並將其轉換回RGB。這是我的代碼:將RGB圖像轉換爲YUV並將其轉換回matlab

RGB = imread('ist.jpg'); 

R = RGB(:,:,1); 
G = RGB(:,:,2); 
B = RGB(:,:,3); 

Y = 0.299 * R + 0.587 * G + 0.114 * B; 
U = -0.14713 * R - 0.28886 * G + 0.436 * B; 
V = 0.615 * R - 0.51499 * G - 0.10001 * B; 

R = Y + 1.139834576 * V; 
G = Y -.3946460533 * U -.58060 * V; 
B = Y + 2.032111938 * U; 

RGB = cat(3,R,G,B); 
imshow(RGB); 

Matlab顯示我的最終圖像非常藍,與初始RGB圖像非常不同。當我比較藍色通道值前後的某些像素時,我會得到不同的值。我究竟做錯了什麼。

此外,如果有更高效和更短的方式讓我訪問圖像的Y,U和V值,那會更好。

我會非常感謝任何形式的幫助。

回答

3

我沒有MATLAB訪問,所以無法測試這個。但是,imread很可能返回uint8數據。做whos並查看數據類型是什麼。如果是uint8,RGB-> YUV-> RGB轉換就是剪裁。試試這個:

RGB = double(imread('ist.jpg')); % convert to double 

% RGB->YUV->RGB like you have them in the current code  

RGB = cat(3,R,G,B)./255; % since it's a double now, need 0..1 range for imshow. 
          % Divide 0..255 by 255 to get 0..1. 
imshow(RGB); 

imshow和數據類型的更多討論,請參見this

+0

謝謝,它做到了神奇。我猜想這是一個非常新人的錯誤。 –

0

圖像處理工具箱中有這樣的功能:ycbcr2rgbrgb2ycbcr