2014-10-01 42 views
0

在matlab中有一個函數rgb2ycbcr,這個函數根據輸入圖像表示使用幾個範圍,但所有這些範圍都考慮正值。 相反,我想代表我的值作爲該小區如何將圖像轉換爲YCbCr考慮範圍與負值?

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

我哪有?

+1

難道你不能只乘以2,然後減1嗎? (或者任何必要的因素,取決於你的初始範圍。) – 2014-10-01 15:36:56

回答

0

您可以將輸出從rgb2ycbcr映射到-1到+1範圍。例如,從rgb2ycbcr輸出的Cb和Cr的可能範圍之一是[16 240],可以使用interp1輕鬆重新映射。下面代碼中的Cb表示來自rgb2ycbcr的輸出矩陣中的Cb列;你可能需要做一些重塑操作。

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