我有一个32位图像,其中包含多个带有不同标签的连接组件(例如3个标签)。我们还假设这3个标签值分别是316067、213676和1000。由于某种原因,我必须将此图像转换为16位。当然,执行转换后,标签将映射到16位范围。假设这些标签分别映射到3000、14000和1000(我知道在转换后的图像中,已经在16位范围内的标签不会映射到任何新数字)。我的目标是找到在映射时从32位图像更改为16位图像的所有此类标签。在上面的示例中,我想找到以下内容。
1)将标签1和2映射到新的标签值。 2)标签1从316067映射到3000,标签2从213676映射到14000。
这对我来说具有挑战性,因为我有数百个此类32位图像需要转换为16位图像,并且需要读出更改后的标签。另外,在每张图像中,我都有数千个标签。
最合适,最有效的方法是什么? Python中是否有任何例程可以做到这一点?有人可以给我指出一个代码段吗?
答案 0 :(得分:0)
我正在尝试给出答案,但您的问题尚不清楚,我想说的内容没有形成或不能很好地融入评论中,因此我将以部分答案开始,并按照您的说明进行编辑/开发。
您并不是说图像是单通道的,但是当您给3个标签分别是316067、213676和1000时,我假设是单通道。是吗?
让我们合成一个样本图像:
im = np.arange(0,65536*65536,8192,dtype=np.uint32).reshape(1024,-1)
这将im
设置为1024x512像素,值设置为:
array(
[[ 0, 8192, 16384, ..., 4177920, 4186112],
[ 4194304, 4202496, 4210688, ..., 8372224, 8380416],
...,
[4282384384, 4282392576, 4282400768, ..., 4286562304, 4286570496],
[4286578688, 4286586880, 4286595072, ..., 4290756608, 4290764800],
[4290772992, 4290781184, 4290789376, ..., 4294950912, 4294959104]],
dtype=uint32)
它给出的唯一标签/颜色数为:
len(np.unique(im))
524288
那是那个代表吗?现在,您目前如何获得16位图像?为什么呢?