дескриптор HOG для python opencv match с использованием BFMatcher knn - PullRequest
0 голосов
/ 26 июня 2018

Я использую python opencv BFMatcher, чтобы сопоставить HOG-дескрипторы разных патчей одного и того же изображения, чтобы выяснить, подделать ли копировать-вставить. где патчи были получены из алгоритма SLIC в библиотеке scikit. Код выглядит следующим образом:

def matchWithHOGKNN(SegmentValueList: list, segments: numpy.ndarray, imageColor: numpy.ndarray):
'''prepare the HOG descriptor'''

hog = HOGDescriptor((32, 32), (16, 16), (8, 8), (8, 8),9) 

'''iteratively looping over the list of segment values'''
    for segVal in noSIFTkeySegValList:
        rows, cols = numpy.where(segments == segVal)
    '''iterating the HOG sliding window'''
         for y in range(min(rows), max(rows) - detection_window_row, 4):
           for x in range(min(cols), max(cols) - detection_window_col, 4):
             roi = greyImage[y:y + detection_window_row, x:x + detection_window_col]

'''add the descriptor with segment value'''
      dictionary[SegVal(segVal)] = hog.compute(img=roi)

        # '''after iterating the HOG kernel over the segment, add the descriptors to the dictionary'''
        # dictionary[segVal] = temp_h_o_g_descriptors


'''after iterating over all the 
compare between the descriptors of each segment obtained
here in the dictionary key->segment_value | value->HOG descriptor'''

'''prepare a numpy array of HOG descriptors'''
hog_descriptors = numpy.array(list(dictionary.values()))
list_of_keys = numpy.array(list(dictionary.keys()))


'''prepare the BF matcher'''
bf = cv2.BFMatcher()
matches = bf.knnMatch(hog_descriptors, hog_descriptors, k=2)

'''iterating over matches to get the best matches'''
for i, (m, n) in enumerate(matches):
    distance = abs(n.distance- m.distance)

    # if distance < minimum_distance:  # for testing purposes
    #     minimum_distance = distance  # for testing purposes

    if distance < 0.4:
        '''this is taken as a match'''
        '''obtain the segment values for matched descriptors'''
        keyValue1 = list_of_keys[m.queryIdx].segmentValue
        keyValue2 = list_of_keys[n.trainIdx].segmentValue

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

пример изображения, как показано ниже, исходное изображение, полученное из набора данных в Обнаружение и локализация подделки при копировании-перемещении enter image description here

клонированное изображение cloned the right hand side window

клон обнаруженного изображения marked patches are in white color

Спасибо.

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