Рубрики

Программа OpenCV Python для анализа изображения с использованием гистограммы

В этой статье обсуждается анализ изображений с использованием Matplotlib и OpenCV. Давайте сначала разберемся, как экспериментировать с данными изображения в различных стилях и как представлять с помощью гистограммы.
Предпосылки:

Импорт данных изображения

import matplotlib.pyplot as plt #importing matplotlib

Изображение должно использоваться в файле PNG, так как matplotlib поддерживает только изображения PNG. Здесь это 24-битное изображение RGB PNG (8 бит для каждого из R, G, B), используемое в этом примере. Каждый внутренний список представляет пиксель. Здесь, с изображением RGB, есть 3 значения. Для изображений RGB matplotlib поддерживает типы данных float32 и uint8.

img = plt.imread('flower.png') #reads image data


В Matplotlib это выполняется с помощью функции imshow () . Здесь мы схватили объект сюжета.

Все о гистограмме

Гистограмма рассматривается как график или график, который связан с частотой пикселей в изображении серой шкалы.
со значениями пикселей (от 0 до 255). Изображение в градациях серого — это изображение, в котором значение каждого пикселя является единичным образцом, то есть оно несет только информацию об интенсивности, где значение пикселя изменяется от 0 до 255. Составляются изображения этого типа, также известные как черно-белые. исключительно оттенков серого, от черного с самой слабой интенсивностью до белого с самым сильным, где пиксель можно рассматривать как каждую точку на изображении.
Как выглядит изображение GrayScale:

Он количественно определяет количество пикселей для каждого рассматриваемого значения интенсивности. Прежде чем перейти к гистограмме, давайте составим примерное представление из данного примера.

Здесь мы получаем интуицию о контрасте, яркости, распределении интенсивности и т. Д. Этого изображения. Как мы можем видеть изображение и его гистограмму, которая нарисована для изображения в градациях серого, а не для цветного изображения.
Левая область гистограммы показывает количество более темных пикселей на изображении, а правая область показывает количество более ярких пикселей.

Создание гистограммы с использованием массива numpy

Чтобы создать гистограмму данных нашего изображения, мы используем функцию hist ().

plt.hist(n_img.ravel(), bins=256, range=(0.0, 1.0), fc='k', ec='k') #calculating histogram


На нашей гистограмме это выглядит как распределение интенсивности по всему изображению. Черно-белые пиксели как изображения в градациях серого.

Из гистограммы мы можем сделать вывод, что темная область — это более чем яркая область.

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

Расчет гистограммы

Здесь мы используем cv2.calcHist () (встроенная функция в OpenCV), чтобы найти гистограмму.

cv2.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]])

images: это исходное изображение типа uint8 или float32, представленное как «[img]».
каналы: это индекс канала, для которого мы рассчитываем гистограмму. Для изображения в градациях серого его значение равно [0] и
Цветное изображение, вы можете передать [0], [1] или [2], чтобы рассчитать гистограмму синего, зеленого или красного канала соответственно.
маска: маска изображения. Чтобы найти гистограмму полного изображения, она указана как «Нет».
histSize: это представляет наш счетчик БИН. Для полной шкалы мы передаем [256].
Диапазоны : это наш ДИАПАЗОН. Обычно это [0,256].

Например:

# загрузить изображение в режиме оттенков серого

img = cv2.imread('ex.jpg',0)

  
# вычислить частоту пикселей в диапазоне 0-255

histg = cv2.calcHist([img],[0],None,[256],[0,256]) 

Затем нам нужно построить гистограмму, чтобы показать характеристики изображения.

Построение гистограмм

Анализ с использованием Matplotlib:

# импорт необходимых библиотек opencv

import cv2

  
# импорт библиотеки для черчения

from matplotlib import pyplot as plt

  
# читает входное изображение

img = cv2.imread('ex.jpg',0)

  
# найти частоту пикселей в диапазоне 0-255

histr = cv2.calcHist([img],[0],None,[256],[0,256])

  
# показать графическое изображение изображения
plt.plot(histr)
plt.show()

Входные данные:



Выход:



Иллюстрация показывает, что каждое число пикселей изображения лежит в диапазоне от 0 до 255. Во втором примере оно непосредственно находит гистограмму и строит ее. Нам не нужно использовать calcHist (). Смотрите код ниже:

import cv2

from matplotlib import pyplot as plt

img = cv2.imread('ex.jpg',0)

  
# альтернативный способ найти гистограмму изображения

plt.hist(img.ravel(),256,[0,256])

plt.show()

Выход:

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

Ссылки:

  • http://docs.opencv.org/2.4/doc/tutorials/imgproc/table_of_content_imgproc/table_of_content_imgproc.html#table-of-content-imgproc
  • http://www.cambridgeincolour.com/tutorials/histograms1.htm

Эта статья предоставлена Афзалом Ансари . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Программа OpenCV Python для анализа изображения с использованием гистограммы

0.00 (0%) 0 votes