Plt imshow не работает автоматически с отрицательным значением (python) - PullRequest
0 голосов
/ 25 мая 2020

В настоящее время я использую алгоритм Различия Гаусса. Пока мне удалось создать DoG в каждой октаве и сформировать пирамиду. Во-первых, все изображение уже в оттенках серого, во-вторых, мы знаем, что каждое изображение на каждом уровне DoG создается путем вычитания текущего изображения из предыдущего изображения (это приведет к некоторым отрицательным значениям).

Теперь я хочу изобразить это с помощью matplotlib. Из документации я прочитал «imshow автоматически обрабатывает отрицательные значения, соответствующим образом масштабируя значения яркости, поэтому наименьшие (отрицательные) значения будут отображаться черным, значения, близкие к нулю, будут серыми, а самые высокие значения будут белыми». поэтому я пробую это так

plt.imshow(imae, cmap="gray")

, но каким-то образом я все еще получаю изображение в оттенках серого вместо черно-белого, как в одном из примеров здесь: https://www.analyticsvidhya.com/blog/2019/10/detailed-guide-powerful-sift-technique-image-matching-python/

Затем я попытался установить vmin на ноль, и он работает. Я просто не понимаю, почему он по умолчанию не вел себя так, как указано в документации

** EDIT (включая некоторый исходный код) **

Это как выглядит моя октава DoG

def DoG_octave(gaussian_octave):
    octave = []
    for i in range(0, len(gaussian_octave)-1):
      next_image = np.subtract(gaussian_octave[i+1], gaussian_octave[i])
      octave.append(next_image)

    return octave

Это займет один уровень октавы Гаусса из гауссовой пирамиды и вернет также один уровень октавы DoG для создания пирамиды DoG, и для каждого изображения на этом уровне ('imae '), Я показываю их с помощью imshow, поэтому plt.imshow(imae, cmap="gray")

...