[英]How to map false color image to specific labels assigned for each color
我有一个错误的彩色图像,如下所示。 我想将此图像转换成一个数组,在其中可以为每个假色区域分配一个标签。 因此,我可以仅使用该标签值访问图像。 我尝试使用
r_channel = image[:, :, 0]
g_channel = image[:, :, 1]
b_channel = image[:, :, 2]
label_map = (0.2989) * (r_channel) + (0.5870) * g_channel + (0.1140) * b_channel
label_map = label_map * 500 / 255
label_map = np.round(label_map).astype(int)
但是问题是在这种情况下我会得到重复的标签。 我希望每个区域都有一个唯一的标签,最好以从1开始的升序排列。
给定一个值数组,其中将非零值视为“对象”,将零视为“背景”,则可以使用scipy.ndimage.label函数标记对象:
import scipy
from scipy import ndimage
import numpy as np
fname='/tmp/splotches.png'
arr = scipy.misc.imread(fname)
print(arr.shape)
# (160, 240, 3)
r, g, b = np.rollaxis(arr, axis = -1)
label_map = 0.2989 * r + 0.5870 * g + 0.1140 * b
label_map = label_map * 500 / 255
label_map = np.round(label_map).astype(int)
print(label_map.shape)
# (160, 240)
seen = set()
region = {}
i = 1
for val in label_map.flat:
if val not in seen:
seen.add(val)
mask = (label_map == val)
labeled, nr_objects = ndimage.label(mask)
for label in range(1, nr_objects+1):
assert np.any(labeled==label)
region[i] = labeled==label
i += 1
print(len(region))
# 382
使用scipy.ndimage.label
,发现了382个区域。
我发现了获取标签的独特方法。 这是我所做的:
r_channel = image[:, :, 0]
g_channel = image[:, :, 1]
b_channel = image[:, :, 2]
label_map = 1000000 * (r_channel) + 1000 * g_channel + b_channel
label_map = np.round(label_map).astype(int)
因此,现在我为每个超像素区域获得了唯一的标签。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.