2014-04-10 2 views
0

rgb에서 ycbcr로 변환하는 변환 수식을 적용하기 전에 왜 rgb 이미지를 배정도로 변환합니까?matlab에서 RGB 이미지를 double로 변환하십시오.

rgb = im2double(in); 

% These equations transform RGB in [0,1] to YCBCR in [0, 255] 
out(:,:,1) = 16 + 65.481 * rgb(:,:,1) + 128.553 * rgb(:,:,2) + 24.966 * rgb(:,:,3); 
out(:,:,2) = 128 - 37.797 * rgb(:,:,1) - 74.203 * rgb(:,:,2) + 112 * rgb(:,:,3); 
out(:,:,3) = 128 + 112 * rgb(:,:,1) - 93.786 * rgb(:,:,2) -18.214 * rgb(:,:,3); 

답변

3

im2double은 RGB 이미지를 0-255 범위에서 0-155 범위로 스케일합니다.이 범위는 변환 방정식에서 필요합니다.

또한 이미지는 uint8이 아닌 double 형식이어야하므로 계산하는 동안 정밀도가 손실되지 않습니다. 이미지가 이중이 아니면 결과가 반올림되어 정확도가 떨어집니다.

관련 문제