относительно анализа уникальных значений массива изображений - PullRequest
0 голосов
/ 13 мая 2018

Существует следующая функция для чтения изображения, я добавляю несколько строк для повторного вывода изображения и для вывода различных значений пикселей массива изображений. Изображение выглядит так. Тем не менее a, индексы = np.unique (img, return_index = True)

дает

a [0 1]

индексы [0 879385]

Кажется, что массив изображений имеет два уникальных значения, [0 1], что имеет смысл, но что указывают индексы?

def _get_image_data_pil(image_id, image_type, return_exif_md=False, return_shape_only=False):
    fname = get_filename(image_id, image_type)
    try:
        img_pil = Image.open(fname)
    except Exception as e:
        assert False, "Failed to read image : %s, %s. Error message: %s" % (image_id, image_type, e)

    if return_shape_only:
        return img_pil.size[::-1] + (len(img_pil.getbands()),)
    # -----
    # this is what I adde
    # -----

    img = np.asarray(img_pil)
    plt.imshow(img)
    plt.show()
    a,indices =np.unique(img,return_index=True)
    print('a ',a)
    print('indices ',indices)

    assert isinstance(img, np.ndarray), "Open image is not an ndarray. Image id/type : %s, %s" % (image_id, image_type)
    if not return_exif_md:
        return img
    else:
        return img, img_pil._getexif()

enter image description here

1 Ответ

0 голосов
/ 13 мая 2018

Индексы дают первые вхождения уникальных значений во входном массиве flatled .Чтобы преобразовать эти индексы в двумерные индексы на вход, вы можете использовать np.unravel_index.

Например, предположим, что форма img равна (1000, 1600):

In [110]: shape = (1000, 1600)

In [111]: indices = [0, 879385]

In [112]: np.unravel_index(indices, shape)
Out[112]: (array([  0, 549]), array([  0, 985]))

np.unravel_indices вернул два массива, по одному для каждого измерения.То есть первый массив содержит индексы первого измерения (то есть строки), а второй - индексы второго измерения (то есть столбцы).Чтобы поместить их в массив координат, вы можете использовать np.column_stack:

In [113]: np.column_stack(np.unravel_index(indices, shape))
Out[113]: 
array([[  0,   0],
       [549, 985]])
...