gpt4 book ai didi

Python 相当于 label2idx MATLAB 函数

转载 作者:太空宇宙 更新时间:2023-11-03 13:25:35 25 4
gpt4 key购买 nike

python中的label2idx()函数有库实现吗?

我希望从标签表示中提取超像素到 label2idx() 函数返回的格式。

label2idx 函数:https://in.mathworks.com/help/images/ref/label2idx.html

最佳答案

给定一个标签数组 label_arr,其中包含从 1max(label_arr) 的所有标签,您可以:

def label2idx(label_arr):
return [
np.where(label_arr.ravel() == i)[0]
for i in range(1, np.max(label_arr) + 1)]

如果您想放宽包含所有标签的要求,您可以添加一个简单的 if,即:

def label2idx(label_arr):
return [
np.where(label_arr.ravel() == i)[0]
if i in label_arr else np.array([], dtype=int)
for i in range(1, np.max(label_arr) + 1)]

只是为了复制 MATLAB 文档中的示例:

import numpy as np
import scipy as sp
import scipy.ndimage

struct_arr = np.array(
[[1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 1, 1, 0, 0],
[1, 1, 1, 0, 1, 1, 0, 0],
[1, 1, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 1, 0],
[1, 1, 1, 0, 0, 0, 1, 0],
[1, 1, 1, 0, 0, 1, 1, 0],
[1, 1, 1, 0, 0, 0, 0, 0]])

label_arr, num_labels = sp.ndimage.label(struct_arr)
# label_arr:
# [[1 1 1 0 0 0 0 0]
# [1 1 1 0 2 2 0 0]
# [1 1 1 0 2 2 0 0]
# [1 1 1 0 0 0 0 0]
# [1 1 1 0 0 0 3 0]
# [1 1 1 0 0 0 3 0]
# [1 1 1 0 0 3 3 0]
# [1 1 1 0 0 0 0 0]]

def label2idx(label_arr):
return [
np.where(label_arr.ravel() == i)[0]
for i in range(1, np.max(label_arr) + 1)]

pixel_idxs = label2idx(label_arr)

for pixel_idx in pixel_idxs:
print(pixel_idx)

# [ 0 1 2 8 9 10 16 17 18 24 25 26 32 33 34 40 41 42 48 49 50 56 57 58]
# [12 13 20 21]
# [38 46 53 54]

请注意,由于 MATLAB 和 NumPy 之间的差异,您不会得到完全相同的结果,特别是:

  • MATLAB:FORTRAN 风格的矩阵索引和基于 1 的索引
  • Python+NumPy:C 风格的矩阵索引和基于 0 的索引

如果您想获得与在 MATLAB 中获得的数字完全相同的数字,您可以改用它(注意额外的 .T+ 1):

def label2idx_MATLAB(label_arr):
return [
np.where(label_arr.T.ravel() == i)[0] + 1
for i in range(1, np.max(label_arr) + 1)]

关于Python 相当于 label2idx MATLAB 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56750400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com