维基百科显示从XYZ到Luv的转换方程如下 但是,matlab中的实现是不同的。我不知道它是如何有意义的。我有什么想念吗?
下面的代码是matlab中xyz2uvl的实现。
black = 1.0e-16 .* [0.167115861476741, 0.173300464636333, 0.142953358039464];
singularRows = find(sum(xyz,2) == 0);
if (~isempty(singularRows))
xyz(singularRows,:) = bsxfun(@plus, xyz(singularRows,:), black);
end
uvl = zeros(size(xyz));
uvl(:,1) = clipdivide(4 * xyz(:,1), xyz * [1; 15; 3]);
uvl(:,2) = clipdivide(6 * xyz(:,2), xyz * [1; 15; 3]);
uvl(:,3) = xyz(:,2);
function C = clipdivide(A, B)
B(B < eps) = eps;
C = A ./ B;
end