您可能需要考虑Hilbert 曲线。这是将一维曲线嵌入到更高维(2、3 或更多)空间中。
这是将一维曲线映射到二维颜色空间的情况。白色曲线有 2^16 = 65,536 个点,并嵌入到 2^8 x 2^8 = 256 x 256 维色彩空间中。曲线上的任何两个相邻点都非常相似。
可以将其概括为将曲线嵌入到三个维度中,尽管我手头没有代码。如果您愿意,我可以使生成此图的 Matlab 代码可用,但我不相信它会很有帮助...
这是通过图像中的希尔伯特曲线最终得到的色阶。不是超级直观,但它确实涵盖了所有 65,536 种颜色。
编辑- 这是代码
function [x,y] = d2xy(n,d)
# D2XY Embeds a point d into an n*n square (assuming n is a power of 2). For
# example, if n = 8 then we can embed the points d = 0:63 into it.
x = uint32(0);
y = uint32(0);
t = uint32(d);
n = uint32(n);
s = uint32(1);
while s < n
rx = bitand(1, idivide(t, 2));
ry = bitand(1, bitxor(t,rx));
[x,y] = rot(s,x,y,rx,ry);
x = x + s * rx;
y = y + s * ry;
t = idivide(t, 4);
s = s * 2;
end
end
function [x,y] = rot(n,x,y,rx,ry)
if ry == 0
if rx == 1
x = n-1-x;
y = n-1-y;
end
# Swap x and y
t = x; x = y; y = t;
end
end
b = zeros(65536, 2);
for d = 0:65535
[x,y] = d2xy(256, d);
b(d+1,1) = x;
b(d+1,2) = y;
end
plot(b(:,1), b(:,2)), xlim([-1,256]), ylim([-1,256]), axis square