image - 24位色一维信息的一致内存方式

标签 image matlab opencv colors

假设我有一个标量信息分配给 2D 的每个像素长方形 R ,例如灰度图像,或深度图/凹凸图。

enter image description here

这样的标量信息在 8 bit 中规范编码图像,它允许 2^8=256不同的音调。方便的是,这里的音调具有非常直观的含义,例如white=0 , black=1 , gray=somewhere between 0 and 1 .

保存图像后,例如在 .png 中,音调 t , 0 <= t <= 255 , 在 RGB 中编码颜色 [t,t,t] (每个像素浪费 16bit)。


问题: 比如说,8 bit 提供的分辨率灰度不足以满足我的目的。

是否有既定的方法来无损编码 24bit (1D) 信息到 RGB颜色空间保留颜色的一些直观含义

最佳答案

您可能需要考虑 Hilbert curve .这是将一维曲线嵌入到更高维(2、3 或更多)空间中。

这是将一维曲线映射到二维颜色空间时的样子。白色曲线有 2^16 = 65,536 个点,嵌入到 2^8 x 2^8 = 256 x 256 维颜色空间中。曲线上任意两个相邻点都非常相似。

虽然我手头没有代码,但可以将其概括为将曲线嵌入三个维度。如果您愿意,我可以提供生成此图的 Matlab 代码,但我不相信它会有很大帮助...

enter image description here

这是您通过图像中的希尔伯特曲线最终得到的色标。不是很直观,但确实涵盖了所有 65,536 种颜色。

enter image description here

编辑 - 这是代码

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

关于image - 24位色一维信息的一致内存方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15782586/

相关文章:

matlab - 如何在 MATLAB 中实现鱼眼镜头效果(桶形变换)?

bash - 运行 matlab 命令行并自动运行 unix 服务器 bjob​​s

python - 尝试在 tensorflow 中创建 OCR,字母训练后要做什么?

python-2.7 - Opencv Python 2.7 中的轮廓检测

image - OpenCV图像指针无法按预期工作

css - 浏览器处理真正海量的图像

c# - 查找 RichTextBox 中的所有图像

matlab - 从 contourf 图中删除线条

android - 在 Android 上缓存 SVG 图像和内存使用

java - 将 BioFormats 文件导入 Matlab 时出错