Я новичок в этой платформе, а также в мире компьютерного зрения. Я работаю над проектом, в котором я использую гистограмму BackProjection для обнаружения цветного объекта. Есть два способа реализовать этот метод: либо с использованием numpy, либо с помощью встроенной функции opencv (cv2.calcBackProject). Однако я действительно хочу использовать версию numpy, поскольку она позволяет лучше понять, что происходит. Код для реализации numpy показан ниже:
1 import cv2
2 import numpy as np
3 import matplotlib.pyplot as plt
4 #roi is the object or region of object we need to find
5 roi = cv2.imread('D:/downloads/messi_ground.jpg')
6 hsv = cv2.cvtColor(roi,cv2.COLOR_BGR2HSV)
7 #target is the image we search in
8 target = cv2.imread('D:/downloads/messi.jpg')
9 hsvt = cv2.cvtColor(target,cv2.COLOR_BGR2HSV)
10 # Find the histograms using calcHist.
11 M = cv2.calcHist([hsv],[0, 1], None, [180, 256], [0, 180, 0, 256] )
12 I = cv2.calcHist([hsvt],[0, 1], None, [180, 256], [0, 180, 0, 256] )
13 R = M/I
14 h,s,v = cv2.split(hsvt)
15 B = R[h.ravel(),s.ravel()
16 B = np.minimum(B,1)
17 B = B.reshape(hsvt.shape[:2])
Этот алгоритм находит пиксели в целевом изображении, которые похожи на пиксели в гистограмме модели (в моем случае гистограмма рентабельности инвестиций, M)
Итак, мои вопросы:
- что буквально происходит, когда одна гистограмма делится на другую (строка 13)?
- как в результате гистограмма (в данном случае R в строке 13) проецируется обратно с использованием канала h, s целевого изображения? Другими словами, как строка 15 поддерживает полученную R-гистограмму?
- Строка 16 предполагает создание чисел от 0 до 1 для просмотра значений пикселей как вероятности, принадлежащих модели гистограмма. Однако я пропустил его и получил те же результаты, поэтому почему алгоритмы его используют?
К сожалению, статья, объясняющая этот метод, очень абстрактна и не раскрывает функциональность алгоритма ( Бумага: Индексирование с помощью цветовой гистограммы) Я знаю, что этот веб-сайт призван помочь с проблемами прямого программирования. Однако я думаю, что это также должно помочь понять некоторые операции, связанные с программированием.