Imoverlay в питоне - PullRequest
       32

Imoverlay в питоне

4 голосов
/ 20 января 2012

Я пытаюсь наложить матрицу на другую матрицу, используя matplotlib imshow ().Я хочу, чтобы матрица наложения была красной, а «матрица фона» - костью, с точки зрения цветовой карты.Таким образом, простое добавление изображений не работает, так как вы можете иметь только одну цветовую карту.Мне еще предстоит найти другой способ «наложения», кроме простого добавления матриц с помощью imshow ().

Я пытаюсь более или менее заменить этот модуль matlab .

Пожалуйста, дайте мне знать, какие у меня есть альтернативы!

Ответы [ 2 ]

6 голосов
/ 20 января 2012

Просто используйте массив маски .

Например

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

x = np.arange(100).reshape(10,10)
y = np.zeros((10,10))

# Make a region in y that we're interested in...
y[4:6, 1:8] = 1

y = np.ma.masked_where(y == 0, y)

plt.imshow(x, cmap=mpl.cm.bone)
plt.imshow(y, cmap=mpl.cm.jet_r, interpolation='nearest')

plt.show()

enter image description here

1 голос
/ 20 января 2012

Я склонен использовать OpenCV много, который использует numpy в качестве бэкэнда, поэтому изображения - это просто матрицы.

Чтобы наложить двоичное изображение на фоновое изображение, вы в основном делаете:

overlaycolour = [255,0,0] # for red

for each channel c in 1:3
    overlayimage[:,:,c] = (1-alpha)*backgroundimage[:,:,c] + 
                              alpha*binary[:,:,c]*overlaycolour[c]

Здесь alpha - прозрачность наложения (если alpha равно 1, наложение просто вставляется на изображение; если альфа равно 0, то наложение невидимо, а если между ними альфа,оверлей немного прозрачный).

Кроме того, либо: - двоичное изображение (т. е. изображение, которое должно быть наложено) нормализовано до 1 с и 0 с, а цвет наложения от 0 до 255, ИЛИ - двоичное изображение имеет значение 255 с и 0 с, а цвет наложения - от 0 до 1.

Наконец, если фоновое изображение серого цвета, превратите его в цветное изображение, просто реплицируя этот отдельный канал для каждого изкрасный, зеленый, синий каналы.

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

Iя не уверен, как этот вид кодасделано в PIL, но это не должно быть слишком сложно.

...