Помещение Лапласовской пирамиды на черный холст меняет фон - PullRequest
0 голосов
/ 24 ноября 2018

Я построил функцию, которая берет изображение и строит из него пирамиду Лапласа.Я хочу взять, скажем, первое изображение пирамиды Лапласа и поместить его на черный холст (используя np.zeros для его создания).

Я сделал это, но получаю, что черный холст приобретает цвет, похожий на изображение Лапласа, вместо того, чтобы оставаться черным. enter image description here

Код в основном заменяет точку NxM на холсте изображением лапласиана:

canvas [0: 768, 0: 1024] = laplace_image

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

enter image description here

И код построения, который, вероятно, является проблемой:

Вот пример значений в лапласовом изображении

[[0.00206756 0.00217308 0.00229568 0.00241833 0.00253975 0.0026407
  0.0027411  0.00283026 0.00289416 0.00295967 0.00302006 0.003061
  0.00308811 0.00310638 0.00311357 0.00311655 0.00312005 0.00312285
  0.00311985 0.00311802 0.003109   0.00308746 0.00304459 0.00298541
  0.00291537 0.00283966 0.00276133 0.00267244 0.00255839 0.00242822
  0.002288   0.002139  ]

 [0.00066538 0.00070738 0.00075546 0.00080446 0.00084945 0.00087207
  0.00088813 0.00091252 0.0009471  0.00099087 0.00103915 0.00107427
  0.00109442 0.00109901 0.00110466 0.00110936 0.0011094  0.0011042
  0.0010959  0.00109445 0.00109941 0.00108648 0.00105162 0.00103264
  0.00101328 0.00098499 0.00094468 0.00089966 0.00084997 0.00079252
  0.00072701 0.00066181]]

1 Ответ

0 голосов
/ 24 ноября 2018

Установка vmin=0 гарантирует, что все нули в canvas будут интерпретированы как черные как imshow:

plt.figure()
plt.imshow(canvas, cmap='gray', vmin=0)
plt.show()

Перед тем, как они будут переданы в вашу цветовую карту, данные в canvas сначала нормализуютсятак что наименьшее значение соответствует черному, а наибольшее значение соответствует белому.Вы можете управлять нормализацией, передав аргументы vmin и vmax в imshow.Для cmap=gray любые значения x <= vmin будут отображаться черным, а любые значения x >= vmax будут отображаться белым.

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

img = np.zeros((500,1000))
img[:, :250] = -2
img[:, 250:500] = 2
plt.imshow(img, cmap='gray')

enter image description here

Переход в vmin=0 приведет к тому, что нули во второй половине img будут отображаться чернымвместо серого:

plt.imshow(img, cmap='gray', vmin=0)

enter image description here

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