rgb to ycbcr conversion in matlab

匿名 (未验证) 提交于 2019-12-03 03:03:02

问题:

I am trying to write a function in Matlab that takes an RGB image of class unit8 and double and converts it to a YCBCR image. The transformation formula is below.

I would be really thankful for any help of any kind.

回答1:

There's an Image Processing Toolbox function for that, if you have access to it: RGB2YCBCR

If you don't have access to it, here's how you can do the conversion yourself:

rgbImage = imread('peppers.png');  %# A sample RGB image A = [65.481 -37.797 112; ...       %# A 3-by-3 matrix of scale factors      128.553 -74.203 -93.786; ...      24.966 112 -18.214];  %# First convert the RGB image to double precision, scale its values to the %#   range 0 to 1, reshape it to an N-by-3 matrix, and multiply by A: ycbcrImage = reshape(double(rgbImage)./255,[],3)*A;  %# Shift each color plane (stored in each column of the N-by-3 matrix): ycbcrImage(:,1) = ycbcrImage(:,1)+16; ycbcrImage(:,2) = ycbcrImage(:,2)+128; ycbcrImage(:,3) = ycbcrImage(:,3)+128;  %# Convert back to type uint8 and reshape to its original size: ycbcrImage = reshape(uint8(ycbcrImage),size(rgbImage));

And here's the image you get when you display ycbcrImage:



回答2:

"rgb2ycbcr" function (image processing toolbox):

Path :

MATLAB\R2013a\toolbox\images\colorspaces\rgb2ycbcr.m

Code :

function ycbcr = rgb2ycbcr(varargin) rgb = parse_inputs(varargin{:}); isColormap = false;  if (ndims(rgb) == 2)  isColormap=true;  colors = size(rgb,1);  rgb = reshape(rgb, [colors 1 3]); end  origT = [65.481 128.553 24.966;-37.797 -74.203 112; 112 -93.786 -18.214]; origOffset = [16;128;128];   scaleFactor.double.T = 1/255;       scaleFactor.double.offset = 1/255;  scaleFactor.uint8.T = 1/255;        scaleFactor.uint8.offset = 1;       scaleFactor.uint16.T = 257/65535;   scaleFactor.uint16.offset = 257;     classIn = class(rgb); T = scaleFactor.(classIn).T * origT; offset = scaleFactor.(classIn).offset * origOffset;   ycbcr = zeros(size(rgb),classIn);  for p = 1:3  ycbcr(:,:,p) = imlincomb(T(p,1),rgb(:,:,1),T(p,2),rgb(:,:,2), T(p,3),rgb(:,:,3),offset(p)); end    if isColormap  ycbcr = reshape(ycbcr, [colors 3 1]); end


转载请标明出处:rgb to ycbcr conversion in matlab
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!