Что представляет собой эта корреляционная матрица ядра изображения? - PullRequest
0 голосов
/ 28 апреля 2020

Я экспериментирую с некоторыми методами компьютерного зрения, в частности с обнаружением функций. Я пытаюсь определить особенности путем проведения автокорреляции между изображением и ядром объекта.

Однако полученная матрица корреляции не имеет смысла для меня ... Может кто-нибудь помочь мне понять, как интерпретировать или визуализировать эту матрицу, чтобы было ясно, где находится функция?

Ядро функции:

enter image description here

Исходное изображение:

Lenna, Original Image

Код:

import cv2
import pprint
import numpy
import scipy.ndimage
from matplotlib import pyplot as plt
import skimage.feature

# load the image
img = cv2.imread('./lenna.jpg')[:,:,0]
f_kernel = cv2.imread('./lenna_feature.jpg')[:,:,0]

def matched_filter(img, f_kernel, detect_thres):
    result = scipy.ndimage.correlate(img, f_kernel)
    print("Feature Match Template")
    plt.imshow(skimage.feature.match_template(img, f_kernel))
    plt.show()
    return result

plt.imshow(matched_filter(img,f_kernel,1))
print("Correlation Matrix")
plt.show()

Результат:

Code-Results

Итак, на первом изображении результата есть очевидная максимальная точка в (150 200). Я интерпретирую это как наиболее вероятное местоположение объекта.

Однако во втором результирующем изображении, корреляционном матричном результате, нет очевидного паттерна. Я ожидал, что будет какая-то очевидная точка высокой корреляции.

Справка?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2020

skimage.feature.match_template вычисляет нормализованную взаимную корреляцию . То есть для каждого местоположения на изображении патч изображения и шаблон нормализуются (вычитают среднее значение и делятся на стандартное отклонение), а затем умножаются вместе и усредняются. Это вычисляет коэффициент корреляции патча изображения и шаблона. Коэффициент корреляции - это значение от 1 до -1. Коэффициент корреляции 1 указывает, что исправление изображения является линейной модификацией шаблона (т.е. constant1 * template + constant2).

scipy.ndimage.correlate вычисляет корреляцию (то же, что свертка, но без зеркального отображения ядро). То есть здесь мы сначала не нормализуем патч изображения. Места, где изображения имеют более высокие значения, автоматически также будут иметь более высокую корреляцию, даже если они совсем не похожи на шаблон.

1 голос
/ 28 апреля 2020

Я не могу воспроизвести ваш результат. Для меня второе изображение имеет форму, которая выглядит немного как Лена.

В любом случае, вы не хотите использовать корреляцию, вы хотите использовать коэффициент корреляции для сопоставления с шаблоном. Чистая корреляция не нормализуется, поэтому это скорее усредняющий фильтр, чем сопоставление с шаблоном.

Редактировать: добавлено изображение корреляции

corellation image

...