Нанесите двухцветную гистограмму на изображения - PullRequest
1 голос
/ 21 марта 2020

Я пытаюсь получить значения 2D гистограммы некоторых изображений, но я действительно потерян с этим. Если я не ошибаюсь, я могу сделать это с np.histogram2d() из numpy.

. Я пытаюсь сделать следующее:

def hist2d(img, bins):
     b_channel, g_channel, r_channel    = img[:, :, 0], img[:, :, 1], img[:, :, 2]
     channels = [b_channel, g_channel, r_channel]

     c1 = np.histogram2d(b_channel,g_channel, bins=bins_per_hist)
     c2 = np.histogram2d(g_channel,r_channel, bins=bins_per_hist)
     c3 = np.histogram2d(r_channel,b_channel, bins=bins_per_hist)

     # Finally concatenate results
     # np.concatenate()

    return result

Моя идея,

  • Разделить изображение на 3 канала.
  • Получить 3 гистограммы 2d.
  • Возвращать массив numpy конкатенации 3 нормализованных 2D гистограмм: B / G, B / R и б / р

Вы считаете верной идею? Как мне использовать функцию np.histogram2d()? Я не понимаю, как я должен передать значения бункеров. Документация содержит список из 2 значений, но какие значения? У меня есть только один.

Примечание: Я делаю это с numpy, но, возможно, другой вариант colud будет openCV.

Спасибо большое! Я уверен, что это легко, но я тоже хочу учиться!

1 Ответ

0 голосов
/ 23 марта 2020

Это проще в Python / OpenCV.

Ввод:

enter image description here

import cv2

# read image
img = cv2.imread('mandril3.jpg')

# calculate 2D histograms for pairs of channels: BG, GR, RB
histBG = cv2.calcHist([img], [0, 1], None, [256, 256], [0, 256, 0, 256])
histGR = cv2.calcHist([img], [1, 2], None, [256, 256], [0, 256, 0, 256])
histRB = cv2.calcHist([img], [2, 0], None, [256, 256], [0, 256, 0, 256])

# merge 3 single channel historgrams into one color histogram
hist = cv2.merge([histBG,histGR,histRB])

# view results
cv2.imshow("hist", hist)
cv2.waitKey(0)

# save result
# result is float and counts need to be scale to range 0 to 255
hist_scaled = cv2.normalize(hist, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U)
cv2.imwrite('mandril3_histogram.png', hist_scaled)


Цветная гистограмма:

enter image description here

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