RGB图像转换到L*u*v*空间(matlab)

①RGB—XYZ

%% Convert RGB to XYZ
function XYZ = rgb2xyz(image)
    T = (1/0.17697)*[0.49, 0.31, 0.20; 0.17697, 0.81240, 0.01063; 0.00, 0.01, 0.99];
    R = image(:,:,1);
    G = image(:,:,2);
    B = image(:,:,3);
    XYZ(:,:,1) = T(1)*R + T(4)*G + T(7)*B; % X
    XYZ(:,:,2) = T(2)*R + T(5)*G + T(8)*B; % Y
    XYZ(:,:,3) = T(3)*R + T(6)*G + T(9)*B; % Z
end

②XYZ—Luv*

%% Convert XYZ to Luv
function LUV = xyz2luv(image)
    whiteP = [0.950456,1,1.088754]; %白点的XYZ值
    un = 4*whiteP(1) / (whiteP(1)+15*whiteP(2)+3*whiteP(3));
    vn = 9*whiteP(2) / (whiteP(1)+15*whiteP(2)+3*whiteP(3));
    Y = image(:,:,2);
    U = 4*image(:,:,1) ./ (image(:,:,1) + 15*image(:,:,2) + 3*image(:,:,3));
    V = 9*image(:,:,2) ./ (image(:,:,1) + 15*image(:,:,2) + 3*image(:,:,3));
    L = zeros(size(Y));
    for i = 1:size(Y,1)
        for j = 1:size(Y,2)
            if Y(i, j) <= 0.008856
                L(i, j) = 903.3*Y(i, j);
            else
                L(i, j) = 116*Y(i, j)^(1/3) - 16;
            end
        end
    end
    LUV(:,:,1) = L;
    LUV(:,:,2) = 13 * L .* (U - un);
    LUV(:,:,3) = 13 * L .* (V - vn);
end

麻瓜写于2019/01/14

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 生活静如止水,平淡如竹。那些淡淡的日子,虽没惊艳岁月,却也温柔了时光。 风铃响,饭氤香。 晨,唤醒我的不知是缠绵笔...
    雲水禅心211阅读 3,610评论 0 1
  • 初中的时候有一位男校友,跟我是一个年级,不是同班,他跟我的表哥在一个班,毕业以后在乡镇工作。 他娶了一个个子很高很...
    Arui78阅读 5,389评论 0 4
  • 嘿,亲爱的男生,你还记得我吗?不,也许你早已忘了我的容颜。你知道吗?你时常出现在我的梦境里。 我应该郑重地和你说再...
    纽扣偶像阅读 1,501评论 0 0