Визуализации всегда были эффективным способом представления и объяснения многих статистических деталей. При обработке изображений гистограммы используются для отображения многих аспектов изображения, с которым мы работаем. Такие как,

  • Экспозиция
  • Контраст
  • Динамический диапазон
  • Насыщенность

и многое другое. Визуализируя гистограмму, мы можем улучшить визуальное присутствие изображения, а также мы можем узнать, какой тип обработки изображения можно было применить, сравнив гистограммы изображения.

Что такое гистограмма?

Изображения хранятся в виде значений пикселей, каждое значение пикселя представляет собой значение интенсивности цвета. Гистограммы - это частотное распределение этих значений интенсивности, встречающихся на изображении.

h(i) = the number of pixels in I(image) with the intensity value i

Например, если i = 0, h (0) - это количество пикселей со значением 0.

Создание гистограммы изображения с помощью skimage

Изображение в оттенках серого

from skimage import io
import matplotlib.pyplot as plt
image = io.imread('~/Desktop/Lenna_gray.png')
ax = plt.hist(image.ravel(), bins = 256)
plt.show()
Output: Figure-1

В приведенном выше коде мы загрузили изображение Ленны в оттенках серого и сгенерировали его гистограмму с помощью matplotlib. Поскольку изображение хранится в виде упорядоченной двумерной матрицы, мы преобразовали его в одномерный массив с помощью метода ravel ().

Цветное изображение

В цветных изображениях у нас есть 3 цветовых канала, представляющих RGB. В гистограмме комбинированного цвета интенсивность определяется как сумма всех трех цветовых каналов.

h(i) = h_red(i) + h_green(i) + h_blue(i)

from skimage import io
import matplotlib.pyplot as plt
image = io.imread('~/Desktop/Lenna.png')

_ = plt.hist(image.ravel(), bins = 256, color = 'orange', )
_ = plt.hist(image[:, :, 0].ravel(), bins = 256, color = 'red', alpha = 0.5)
_ = plt.hist(image[:, :, 1].ravel(), bins = 256, color = 'Green', alpha = 0.5)
_ = plt.hist(image[:, :, 2].ravel(), bins = 256, color = 'Blue', alpha = 0.5)
_ = plt.xlabel('Intensity Value')
_ = plt.ylabel('Count')
_ = plt.legend(['Total', 'Red_Channel', 'Green_Channel', 'Blue_Channel'])
plt.show()
Output: Figure-2

Что такое биннинг гистограммы?

Обычно диапазон значений интенсивности изображений составляет от [0–255] в 8-битном представлении (2⁸). Но изображения также могут быть представлены с использованием 2¹⁶, 2³² бит и так далее. В таких случаях диапазон интенсивности велик, и трудно представить каждое значение интенсивности на гистограмме.

Мы используем биннинг, чтобы решить указанную выше проблему. Здесь мы разделим диапазон на несколько сегментов. Например,

if we quantize 0-255 into 8 bins, here our bins will be
0-31, 32-63, 64-95, 96-127, 128-159, 160-191, 192-223, 224-255

Теперь нам нужно найти способ поместить каждое значение интенсивности в соответствующие ячейки. Мы можем просто решить эту проблему,

k = 256 #number of possible integer values in 8 bit representation
b = 8   #number of bins
j = floor( (h(i)*b)/k )
#j is the bin number of the intensity value at position i

давайте снова построим гистограмму полутонового изображения Lenna, но на этот раз с 8 ячейками,

from skimage import io
import matplotlib.pyplot as plt
image = io.imread('~/Desktop/Lenna_gray.png')
_ = plt.hist(image.ravel(), bins = 8 )
_ = plt.xlabel('Intensity Value')
_ = plt.ylabel('Count')
plt.show()
Output: Figure-3

Что такое кумулятивная гистограмма?

Кумулятивная гистограмма - это специальная гистограмма, которая может быть получена из обычной гистограммы. Мы находим счетчики каждого значения интенсивности от 0 до 255, а затем складываем каждый последующий счетчик,

if i = 0 then H(i) = h(0)
else H(i) = H(i-1) + h(0)

Кумулятивные гистограммы полезны во многих приложениях для обработки изображений, таких как выравнивание гистограмм и т. Д.

from skimage import io
import matplotlib.pyplot as plt
image = io.imread('~/Desktop/Lenna_gray.png')
_ = plt.hist(image.ravel(), bins = 256, cumulative = True)
_ = plt.xlabel('Intensity Value')
_ = plt.ylabel('Count') 
plt.show()
Output: Figure-4

Надеюсь, вы понимаете, что такое гистограмма и как создавать гистограммы с помощью skimage. Давайте встретимся еще раз, и я расскажу вам о некоторых случаях использования гистограмм в обработке изображений.