Добавить различие изображений в одно изображение (Linux / Python)

#python #linux #image #image-processing #opencsv

#python #linux #изображение #обработка изображений #opencsv

Вопрос:

Я ищу способ объединить только различия изображений в одно изображение. Я ищу команду Linux или способ добиться этого с помощью python.

Пример: Исходные изображения:

введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь

Результат должен быть:

введите описание изображения здесь

Другой вариант использования: http://3.bp.blogspot.com/-h3yuVc0hyvc/ToqQDE0Bf4I/AAAAAAAAGj0/HON-gM_9PhU/s1600/JayBumpOllieStichedFinishedRS.jpg

Спасибо!!

Винс

Комментарии:

1. Может быть, это может вам помочь? github.com/derv82/imgblend

Ответ №1:

Было бы разумно начать с изображения, содержащего только фон, и сравнить с ним каждый кадр. Фон может быть вычислен как медиана по всей последовательности. Если мы предположим, что фоновое среднее изображение было a0.jpg и следующие три кадра с 3 точками будут a1.jpg , a2.jpg и a3.jpg , затем их можно объединить вместе, используя функцию compare_images scikit-image и изменяя значения только в тех пикселях, где было обнаружено изменение. Обратите внимание, что из-за сжатия существует порог допуска (th), установленный на 0,1. Вы можете играть с этим значением (0,1) для большей или меньшей чувствительности. Следующий скрипт должен привести к чему-то подобному:

 import skimage.io as io 
from skimage.util import compare_images
import numpy as np

im0 = io.imread('a0.jpg') # median of source images
im1 = io.imread('a1.jpg') # source image 1
im2 = io.imread('a2.jpg') # source image 2
im3 = io.imread('a3.jpg') # source image 3

im_all = np.copy(im0)
th = 0.1

# d = np.max(np.abs(im2 - im0), -1)
d = compare_images(im1, im0, method='diff')
d= np.max(np.abs(d), -1)
im_all[d>th] = im1[d>th]
io.imsave("d1.jpg", d>th)

d = compare_images(im2, im0, method='diff')
d= np.max(np.abs(d), -1)
im_all[d>th] = im2[d>th]
io.imsave("d2.jpg", d>th)

d = compare_images(im3, im0, method='diff')
d= np.max(np.abs(d), -1)
im_all[d>th] = im3[d>th]
io.imsave("d3.jpg", d>th)

io.imsave("im_all.jpg", im_all)
  

img_all.jpg

Ответ №2:

Это не совсем то, что я просил, но оно делает работу достаточно хорошо для моих нужд:

 convert 1.jpg 2.jpg 3.jpg -evaluate-sequence max evalresult.png
  

С примером изображения с облаками это работает не очень хорошо (потому что облака белые), но в другом контексте это здорово (когда различия ярче фона)

введите описание изображения здесь

Комментарии:

1. Если вы с удовольствием используете ImageMagick , а не Python , который вы отметили, вы можете лучше работать с convert [12].jpg -compose DarkenIntensity -composite 3.jpg -composite result.png