rgb to ycbcr conversion in matlab

前端 未结 2 2032
有刺的猬
有刺的猬 2020-12-17 07:15

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.

2条回答
  •  有刺的猬
    2020-12-17 07:55

    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:

    enter image description here

提交回复
热议问题