2014-10-01 2 views
0

matlab에는 rgb2ycbcr 함수가 있습니다.이 함수는 입력 이미지 표현에 따라 여러 범위를 사용하지만이 모든 범위는 양수 값을 고려합니다. 대신 나는이 음모어떻게 음의 값을 가진 범위를 고려하여 YCbCr로 이미지를 변환 할 수 있습니까?

http://en.wikipedia.org/wiki/YCbCr#mediaviewer/File:YCbCr-CbCr_Scaled_Y50.png

내가 어떻게 할 수에서 나의 값을 표현하고자하는?

+1

2를 곱한 다음 1을 뺄 수 없습니까? (또는 초기 범위에 따라 필요한 요소가 필요합니다.) –

답변

0

출력을 rgb2ycbcr에서 -1에서 +1 범위로 매핑 할 수 있습니다. 예를 들어, 에서 출력되는 Cb 및 Cr의 가능한 범위 중 하나는 [16 240]이며 interp1을 사용하여 쉽게 다시 매핑 할 수 있습니다. 아래의 코드에서 Cb는 출력 행렬의 Cb 열을 rgb2ycbcr에서 나타냅니다. 약간의 변형 작업이 필요할 수 있습니다.

CbNew = interp1([16, 240], [-1, 1], Cb); 

잠재적 인 세 가지 범위가 상호 배타적이므로 출력 데이터를 고려할 때 자동으로 적절한 재 매핑을 찾을 수도 있습니다. 동일한 매핑이 Cr에도 적용됩니다.

if any(Cb < 1) 
    CbRange = [16/255, 240/255]; 

elseif any(Cb < 250) 
    CbRange = [16, 240]; 

elseif any(Cb < 61681) 
    CbRange = [4112, 61680]; 
else 
    %\\suggest throwing an error here, since the above should cover all possible output 
end 

CbNew = interp1(CbRange, [-1, 1], Cb);