如何使用OpenCV最好地优化多层数据点的编码?
例如,如果有一张森林的图片,我想编码大标签,如"森林",中等大小的标签,如"树",然后是小标签,如"叶子"或"树枝",一个像素可能有 3 个标签:森林、树、叶子,然后对于其中的每一个,可能有一个概率值。
这是一个相对简单的例子,但可以想象有更多的重叠标签。
最简单的方法是为每个可能的标签提供一个 cv::Mat,但我的问题更倾向于优化内存使用的最佳方法。
我认为您可以使用位来编码此信息。例如,假设您使用的是 8U 图像(每像素 1 个字节)。然后你可以使用类似的东西
0x01 : leaf
0x02 : tree
0x04 : forest
来表示这些功能。此处对每个要素使用位掩码,因此如果像素属于多个类,则可以OR
这些值。
所以
0x03
会leaf, tree
0x06
会tree, forest
对于置信水平,您必须使用单独的通道。如果您可以接受失去一些精度,则可以使用8U通道而不是32F通道。因此,您可以将其存储为字节中的 66,而不是将 0.6578 存储在浮点数中。
如果以这种方式创建的矩阵包含大量零,则可以通过将其存储为稀疏矩阵来进一步减少内存使用量。