gpt4 book ai didi

c++ - 为什么渲染引擎将图像 segmentation 为小方 block ?

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:46 25 4
gpt4 key购买 nike

假设我在内存中有一个图像,它由一个array 或一个std::vector 表示;为了这个例子,我还假设我的图像是 400x300 像素,我想将这个结构 segmentation 为最大 64x64 像素的正方形(或方 block )。

我正在考虑的数组是这样声明的

int a[400*300];

并且喜欢

int a[400][300];

这是 1 个不错的连续内存块。

我的观点是,您始终尽量保持数据结构和对该数据结构的访问尽可能线性。将图像 segmentation 为正方形涉及从 1 行跳到另一行或从 1 列跳到另一列,具体取决于图像在内存中的布局方式。给定图像的大小和尺寸,计算正方形的边界没有问题,但是在这个正方形上表达迭代时,事情变得有点太复杂了,我没有看到使用这种方法有任何真正的好处。

那么为什么这种 segmentation 步骤的解决方案如此受欢迎呢?为什么不只渲染 1 行或 1 列?

最佳答案

内存局部性/缓存一致性。大多数图像处理操作在 2D 中运行,为了高效的内存访问,您希望在 2D 中彼此靠近的像素在内存中彼此靠近。像这样按 block 排列数据意味着,与使用简单的线性布局相比,具有相同 x 坐标和相邻 y 坐标的 2 个像素平均具有更接近的内存地址。

有更复杂的图像布局方式,通常在 GPU 渲染时用于纹理,这平均提供更好的内存局部性。

关于c++ - 为什么渲染引擎将图像 segmentation 为小方 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19873023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com