RANSA C min_samples ошибка в распознавании ориентиров - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь воспроизвести алгоритм распознавания наземных ориентиров, используя DELF: https://colab.research.google.com/github/Tony607/Landmark-Retrival/blob/master/Landmark-Recognition.ipynb#scrollTo = hkqYyDSoHpn C

В этот момент в скрипте я всегда получаю сообщение об ошибке, однако я запуск сценария в точности так, как он был изначально (определены только пути к изображениям и т. д. c.)

# Array to keep track of all candidates in database.
inliers_counts = []
# Read the resized query image for plotting.
img_1 = mpimg.imread(resized_image)
for index in unique_image_indexes:
    locations_2_use_query, locations_2_use_db = get_locations_2_use(index, indices, accumulated_indexes_boundaries)
    # Perform geometric verification using RANSAC.
    _, inliers = ransac(
        (locations_2_use_db, locations_2_use_query), # source and destination coordinates
        AffineTransform,
        min_samples=3,
        residual_threshold=20,
        max_trials=1000)
    # If no inlier is found for a database candidate image, we continue on to the next one.
    if inliers is None or len(inliers) == 0:
        continue
    # the number of inliers as the score for retrieved images.
    inliers_counts.append({"index": index, "inliers": sum(inliers)})
    print('Found inliers for image {} -> {}'.format(index, sum(inliers)))
    # Visualize correspondences.
    _, ax = plt.subplots()
    img_2 = mpimg.imread(db_images[index])
    inlier_idxs = np.nonzero(inliers)[0]
    plot_matches(
        ax,
        img_1,
        img_2,
        locations_2_use_db,
        locations_2_use_query,
        np.column_stack((inlier_idxs, inlier_idxs)),
        matches_color='b')
    ax.axis('off')
    ax.set_title('DELF correspondences')
    plt.show()
ValueError                                Traceback (most recent call last)
<ipython-input-96-1c43ecb25596> in <module>()
     10         min_samples=3,
     11         residual_threshold=20,
---> 12         max_trials=1000)
     13     # If no inlier is found for a database candidate image, we continue on to the next one.
     14     if inliers is None or len(inliers) == 0:

/usr/local/lib/python3.6/dist-packages/skimage/measure/fit.py in ransac(data, model_class, min_samples, residual_threshold, is_data_valid, is_model_valid, max_trials, stop_sample_num, stop_residuals_sum, stop_probability, random_state, initial_inliers)
    797 
    798     if not (0 < min_samples < num_samples):
--> 799         raise ValueError("`min_samples` must be in range (0, <number-of-samples>)")
    800 
    801     if residual_threshold < 0:

ValueError: `min_samples` must be in range (0, <number-of-samples>)

Проблема заключается в том, что, как только изображение имеет менее 3 внутренних элементов (совпадающие функции ) с изображением запроса выдается ошибка. Однако это следует просто игнорировать, и сценарий должен go перейти к следующему изображению для сравнения, поскольку оно закодировано со строкой

if inliers is None or len(inliers) == 0:
        continue

. Но это не так, скрипт перестает работать. Кстати, он также останавливается, когда я изменяю его на <= 3: </p>

Может кто-нибудь помочь мне?

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