我正在研究一个计算机视觉问题,在这个问题中,我必须合并图像的各个区域区域(或blob)由其线定义,即O
的以下区域:
0123456789
0 XXXXOXXXXX
1 XXXOOOXXXX
2 XXXOOXXXXX
3 XXXOXXXXXX
4 XXXXXXXXXX
定义如下:
row: 0, cols: 4-4
row: 1, cols: 3-5
row: 2, cols: 3-4
row: 3, cols: 3-3
我之所以选择这种数据结构,是因为我需要能够快速找到一个区域的邻域,即“接触”它的所有像素。
现在,我的问题是要合并两个区域,即计算它们的并集。这意味着我可能会在上面所示的数据结构中得到多个列范围。
有了这个设置,我有两个问题:
在
C
中,此数据的最佳数据结构是什么?典型的图像是16x16,这意味着没有那么多行/列我会做很多合并(目标是从每个像素一个区域开始,到一个大区域结束,即16x16-1合并)。例如,我可以使用一个指针来分配/释放对象,或者使用char*来存储cols并在之后解析它。如何有效地合并两个区域?我需要找到与合并它们相邻的潜在列(例如,
3-5
和6-9
变成3-9
),最好不要总是重新分配和复制内容。 最佳答案
如果你的数据是两种颜色的图像…黑白的,为什么不使用一个16个元素长的无符号短裤数组呢?
unsigned short image[16]
合并可以用位逻辑来完成,这种逻辑在16元素数组上非常有效。
关于c - 用于合并C中多个整数范围的数据结构和算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2298138/