Визуализации всегда были эффективным способом представления и объяснения многих статистических деталей. При обработке изображений гистограммы используются для отображения многих аспектов изображения, с которым мы работаем. Такие как,
- Экспозиция
- Контраст
- Динамический диапазон
- Насыщенность
и многое другое. Визуализируя гистограмму, мы можем улучшить визуальное присутствие изображения, а также мы можем узнать, какой тип обработки изображения можно было применить, сравнив гистограммы изображения.
Что такое гистограмма?
Изображения хранятся в виде значений пикселей, каждое значение пикселя представляет собой значение интенсивности цвета. Гистограммы - это частотное распределение этих значений интенсивности, встречающихся на изображении.
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. Давайте встретимся еще раз, и я расскажу вам о некоторых случаях использования гистограмм в обработке изображений.