使用 OpenCV 对多层信息进行编码
Encoding multiple layers of information with OpenCV
如何使用 OpenCV 优化多层数据点的编码?
例如,如果有一张森林的图片,我想编码像 'forest' 这样的大标签,像 'tree' 这样的中等大小标签,然后像 'leaf' 这样的小标签, 或者 'branch', 一个像素可能有 3 个标签: 森林, 树, 叶子, 然后对于每个标签, 可能有一个概率值。
这是一个相对简单的示例,但可以想象有更多的重叠标签。
最简单的方法是为每个可能的标签设置一个 cv::Mat,但我的问题更倾向于优化内存使用的最佳方法。
我认为您可以使用位来编码此信息。例如,假设您使用的是 8U 图像(每个像素 1 个字节)。然后你可以使用像
这样的东西
0x01 : leaf
0x02 : tree
0x04 : forest
来表示这些特征。在这里,您为每个特征使用了一个位掩码,因此如果一个像素属于多个 class。
,您可以 OR
这些值
所以,
0x03
将是 leaf, tree
0x06
将是 tree, forest
对于置信水平,您将不得不使用单独的渠道。如果您不介意损失一些精度,您可以为这些使用 8U 通道而不是 32F 通道。因此,与其将 0.6578 存储在浮点数中,不如将其存储为字节中的 66。
如果以这种方式创建的矩阵包含大量零,您可以通过将其存储为稀疏矩阵来进一步减少内存使用量。
如何使用 OpenCV 优化多层数据点的编码?
例如,如果有一张森林的图片,我想编码像 'forest' 这样的大标签,像 'tree' 这样的中等大小标签,然后像 'leaf' 这样的小标签, 或者 'branch', 一个像素可能有 3 个标签: 森林, 树, 叶子, 然后对于每个标签, 可能有一个概率值。
这是一个相对简单的示例,但可以想象有更多的重叠标签。
最简单的方法是为每个可能的标签设置一个 cv::Mat,但我的问题更倾向于优化内存使用的最佳方法。
我认为您可以使用位来编码此信息。例如,假设您使用的是 8U 图像(每个像素 1 个字节)。然后你可以使用像
这样的东西0x01 : leaf
0x02 : tree
0x04 : forest
来表示这些特征。在这里,您为每个特征使用了一个位掩码,因此如果一个像素属于多个 class。
,您可以OR
这些值
所以,
0x03
将是 leaf, tree
0x06
将是 tree, forest
对于置信水平,您将不得不使用单独的渠道。如果您不介意损失一些精度,您可以为这些使用 8U 通道而不是 32F 通道。因此,与其将 0.6578 存储在浮点数中,不如将其存储为字节中的 66。
如果以这种方式创建的矩阵包含大量零,您可以通过将其存储为稀疏矩阵来进一步减少内存使用量。