#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.