Сравните изображения на python и разрешите разницу в сдвиге пикселей

#python #image-processing #edge-detection #canny-operator #image-comparison

#python #обработка изображений #обнаружение границ #canny-оператор #сравнение изображений

Вопрос:

После внедрения детектора canny edge я должен сравнить результаты с результатами, обнаруженными человеком, и рассчитать точность и отзыв (путем сравнения каждого пикселя). Оба изображения являются двоичными. Дело в том, что я должен разрешить сдвиг пикселя на единицу между изображениями. Это означает, что если у меня есть значение 1 в E (i, j), а эталонное изображение имеет его, например, в GT (i-1, j), совпадение все равно будет. Этот сдвиг индивидуален для каждого пикселя и может быть в любом направлении. Для реализации я должен использовать либо маску, либо функцию cv2.dilate() , но поскольку с помощью dilate мы включаем больше пикселей, каждый из них может быть сопоставлен с одним в эталонном изображении, поэтому создается несколько совпадений для каждого исходного пикселя, что недопустимо. У кого-нибудь есть идея, как разрешить сдвиг пикселей без создания нескольких совпадений на пиксель?

Комментарии:

1. Можете ли вы опубликовать примеры эталонных изображений для E и GT?

2. Из того, что я понимаю из вашего вопроса, используя маску 3×3 со всеми 1, работающими по всем GT (i, j) для соответствующего E (i, j), вы сможете достичь того, что вы ищете.

Ответ №1:

Возможное решение методом перебора может выглядеть примерно так:

 num_feature_pixels = 0
matches = 0
for i in num_rows:
    for j in num_cols:
        if GT[i, j] == 1:
            num_feature_pixels  = 1
                for k in 9:
                    row = k / 3
                    col = k % 3
                    if GT[i, j] == E[i - 1   row, j - 1   col]:
                        matches  = 1
                        break
# Do something with the matches to total positives ratio
  

Вероятность получения нескольких ложных срабатываний в этом методе высока, поскольку нет способа определить, соответствует ли пиксель, сопоставляемый в окне 3×3, на самом деле основной истине для пикселя на изображении E.