比较两个图像中连接的组件的标签

时间:2018-11-24 23:40:39

标签: python image type-conversion python-imaging-library scikit-image

我有一个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中是否有任何例程可以做到这一点?有人可以给我指出一个代码段吗?

1 个答案:

答案 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位图像?为什么呢?