Как я могу построить гистограмму 16,32 и 64 бина для изображения, которое является 8-битным на питоне? - PullRequest
1 голос
/ 11 марта 2019

У меня есть массив градаций серого

  Array

образец массива, подобный этому;

    array([[[142, 142, 142],
    [143, 143, 143],
    [142, 142, 142],
    ...,
    [147, 147, 147],
    [148, 148, 148],
    [143, 143, 143]],

   [[142, 142, 142],
    [142, 142, 142],
    [142, 142, 142],
    ...,
    [148, 148, 148],
    [150, 150, 150],
    [147, 147, 147]],

И тип массива

    Array.dtype
    dtype('uint8')

Iхотите построить 16, 32 и 64-бин-гистограммы этого массива, у кого-нибудь есть идеи?

1 Ответ

1 голос
/ 12 марта 2019

Я заметил, что у вас есть изображение RGB (3 канала). Вероятно, вы захотите визуализировать его гистограмму по каждому каналу (красный, зеленый и синий).

Этого легко добиться, используя pandas. Например, учитывая массив RGB Image img с той же структурой данных, что и у вашей переменной Array, вы можете построить гистограмму для каждого канала, преобразовав ее в DataFrame

import pandas as pd

df = pd.DataFrame({
    'red': img[...,0].ravel(), 
    'green': img[...,1].ravel(), 
    'blue': img[...,2].ravel()
})

А затем вычерчивает его, используя plot.hist

df.plot.hist(bins=n_bins, alpha=.3, xlim=[0,255], color=['red', 'green', 'blue'])

Где n_bins - количество бинов.


Для n_bins=16

enter image description here

Для n_bins=32

enter image description here

Для n_bins=64

enter image description here

...