4

私はMatlabが初めてです。RGB 画像を YUV に変換し、それを RGB に戻そうとしています。これは私のコードです:

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 の値にアクセスできるようにするための、より効率的で短い方法があれば、それがより良いでしょう。

あらゆる種類の助けに本当に感謝しています。

4

2 に答える 2

3

もう MATLAB にアクセスできないので、これをテストすることはできません。ただし、データimreadを返す可能性が最も高いです。データ型が何であるかを確認してくださいuint8whosである場合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

于 2013-10-24T01:46:47.503 に答える