📄 xil_rgb2ycrcb_fi_model.m
字号:
function [y, cr, cb] = Xil_RGB2YCrCb_fi_model(R, G, B, ...
IWIDTH, CWIDTH, MWIDTH, OWIDTH, ...
ACOEF, BCOEF, CCOEF, DCOEF, ...
YMAX, YMIN, CMAX, CMIN, ...
YOFFSET, COFFSET );
if (nargin < 4 ) IWIDTH = 8; end
if (nargin < 5 ) CWIDTH = 17; end % Coefficients are unsigned
if (nargin < 6 ) MWIDTH = 18; end
if (nargin < 7 ) OWIDTH = 8; end
if (nargin < 8 ) ACOEF = 0.2988; end
if (nargin < 9 ) BCOEF = 0.1138; end
if (nargin < 10) CCOEF = 0.7131; end % 0.5/(1-ACOEF)
if (nargin < 11) DCOEF = 0.5642; end % 0.5/(1-BCOEF)
if (nargin < 12) YMAX = pow2(OWIDTH)-1; end
if (nargin < 13) YMIN = 0 ; end
if (nargin < 14) CMAX = pow2(OWIDTH)-1; end
if (nargin < 15) CMIN = 0 ; end
if (nargin < 16) YOFFSET = 0 ; end
if (nargin < 17) COFFSET = pow2(OWIDTH-1); end
q_i=quantizer([IWIDTH, 0], 'ufixed', 'round', 'wrap');
r = quantize( q_i, R); % unsigned fixpoint quantized version of input channels
g = quantize( q_i, G);
b = quantize( q_i, B);
q_c=quantizer([CWIDTH, CWIDTH-1], 'round', 'wrap');
acoef = quantize( q_c, ACOEF); % signed fixpoint quantized version of input channels
bcoef = quantize( q_c, BCOEF);
ccoef = quantize( q_c, CCOEF);
dcoef = quantize( q_c, DCOEF);
rg = r-g;
bg = b-g;
rgm = rg*acoef;
bgm = bg*bcoef;
FRACT_WIDTH = MWIDTH-IWIDTH-2 ; % Number of fractional bits are retained after multiplication
q_m=quantizer([MWIDTH-2, FRACT_WIDTH], 'floor', 'wrap');
rgm_used = quantize( q_m, rgm);
bgm_used = quantize( q_m, bgm);
y_inta = rgm_used+bgm_used;
y_intb = g;
y_int = y_inta+y_intb;
by = b - y_int;
ry = r - y_int;
q_o=quantizer([OWIDTH+2, 0], 'round', 'wrap');
cb_int_round = quantize( q_o, by*dcoef + COFFSET);
cr_int_round = quantize( q_o, ry*ccoef + COFFSET);
y_int_round = quantize( q_o, y_int+YOFFSET);
% Do the clipping
y_int_postmax = y_int_round; wh = find( y_int_postmax > YMAX); y_int_postmax(wh) = YMAX;
cb_int_postmax = cb_int_round; wh = find( cb_int_postmax > CMAX); cb_int_postmax(wh) = CMAX;
cr_int_postmax = cr_int_round; wh = find( cr_int_postmax > CMAX); cr_int_postmax(wh) = CMAX;
% Do the clamping
y = y_int_postmax; wh = find( y < YMIN); y(wh) = YMIN;
cb = cb_int_postmax; wh = find( cb < CMIN); cb(wh) = CMIN;
cr = cr_int_postmax; wh = find( cr < CMIN); cr(wh) = CMIN;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -