|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
У меня есть набор фотографий, сделанных с определенным интервалом в течение суток (например каждые 5 минут, всего 288 фотографий). Мне нужно сделать из них что-то вроде фотографии со сверхдлинной выдержкой, на которой неподвижные объекты будут отображены почти нормально, а движущиеся объекты будут малозаметны или незаметны. Для реализации я предполагаю взять изначально черный фон, а затем последовательно наложить на него все 288 фотографий серии, с прозрачностью примерно 0,3472% каждая. Но такая реализация будет генерировать очень большую вычислительную нагрузку на сервер. Я бы хотел не накладывать все 288 фотографий каждый раз, а при каждой итерации накладывать только текущую фотографию. Чем-то нужное мне поведение похоже на вычисление скользящего среднего — будь это числа, я бы между вызовами просто суммировал бы значения рядов и считал количество рядов, а для получения среднего значения просто бы делил текущую сумму на текущее количество. Но к изображениям такой подход не применить, у них конечная разрядность для каждого пиксела. Как черновой вариант я попробую на каждой итерации «затемнять» итоговое изображение на 0,3472%, а затем накладывать на него текущее изображение с прозрачностью 0,3472%. Теоретически следы суточной давностью полностью сойдут на нет и должно получится что-то более-менее похожее на сверхдолгую выдержку. Но может быть есть другие способы решения такой задачи? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2019, 23:45 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Alibek B.Но к изображениям такой подход не применить, у них конечная разрядность для каждого пиксела.Вполне можно применить. Можно увеличить разрядность целых чисел для каждого субпикселя или использовать тип с плавающей запятой. Alibek B.следы суточной давностью полностью сойдут на нетОни не будут никак отличаться от следов полусуточной или получасовой давности. Сходить на нет они будут если использовать взвешенное среднее с разными весами, чем старее картинка, тем ниже вес. Впрочем, нужно ли это в данной задаче - неизвестно, т.к. неизвестна сама задача. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2019, 23:53 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Если от 24х битного цвета (RGB 8:8:8) перейти к 48 битному то и скользящее среднее будет работать. И точность будет абсолютная. Пикселы будут просто счетчиками. Головная картинка - прибавляет. Хвосотвая - вычитает. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 01:12 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Может я что-то не понял. Если перейти на 48-битную глубину цвета, то разрядности хватит только на 256 сложений, на 288 уже не хватит. А про использование float я не понял. Это в каком формате файлов такое возможно? Или речь о том, чтобы не использовать графические файлы, а сохранять значения пикселов в своем файле данных? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 07:10 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Не хватит только если все картинки в выборке будут заполнены системным белым цветом к примеру. Причем в одной координате. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 08:53 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
То есть предлагается просто суммировать значения, то есть new = old+current, а не new = old + 256*i*current? По-моему это неверно и будет искажать итоговое изображение, нарушать баланс цветов. Но даже если так сделать, то переполнение будет событием высокой вероятности. Во-первых это будет OSD (наложенные на кадр дата/время, обычно белого цвета). Во-вторых, летом светлое время суток составляет почти 20 часов и в кадре будет много светлых областей, которые переполнят разрядность пиксела. Ну и в третьих, это в принципе ограничивает применимость этого способа 5-минутным интервалом. Если я захочу делать фотографии каждую минуту (1440 фотографий), то 48-битная глубина цвета уже не поможет. Пока что я пришел к тому, чтобы из текущего суммированного изображения вначале вычитать хвостовую картинку, а затем накладывать текущую. То есть в виде формулы это получится выражение: mix = mix - old/288 + new/288. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 09:58 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Сделай буферную картинку с разрядностью канала 32 бита. Все будет работать, чьорт тебя побери. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 10:06 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
32 бита на каждый компонент? То есть 128 бит на пиксел? Я бы с радостью, если подскажите формат файла, который это предусматривает, и утилиту, которая с таким файлом может работать. Сейчас я использую ImageMagick, 48-битный PNG он теоретически умеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 11:52 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Напиши код! Вообще. Друг. Ты в форуме Программирование. Это означает что здесь нет ничего невозможного. Здесь есть просто незнание или лень. По image-magic можно было сразу поднимать в Вопрос-Ответ или Unix. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2019, 11:59 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Alibek B.подскажите формат файла tiff Alibek B.и утилиту Gimp ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2019, 08:40 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Alibek B., Достаточно мутно. Написал на бумажке, представляю вариант как понял сам начальный пост с затемнением. За ошибки прош. изв. Имеем послед-сть вектор-функций, каждая от 2-х переменных {f1(x,y) f2(x,y) f3(x,y) ... fn(x,y)} ,где n= 24*60/5=288, это наши рисунки. Кол-во измерений вектора, к-рый является значением fi(x,y), ничего не меняет. Хоть 1, хоть (rgb), хоть (cmyk) ... Задаём долю p=const (напр p= 1/n ) Для примера выполняем рекуррентное преобразование Si= Si-1(x,y)*p + fi(x,y)*(1-p) для i= 1...n Не понял, зачем здесь нужно удвоение градации? Неск первых итераций Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Что видим? видим взвешенную сумму f1...fk, только сумма весов ~1, но чуть меньше. С небольшой натяжкой её можно назвать взвешенной. Видим также, что чем свежее картинка, тем больший у неё вес в общей сумме. Ретроспективное убывание весов почти экспоненциальное. Для полной однородности формул можно взять S1= f1*(p-1). Если нужна не вся серия, а т.ск. плавающее окно размером w, то заменить границы суммирования например так Sk= Sum(i=k-w+1..k, .......) и p= 1/w , но усреднение всё равно экспоненциальное. И эта формула не устойчива к выбросам (к т.н. движущимся точкам и титрам в терминологии ТСа), а про робастные веса, надо подумать, может и не имеют регулярной рекуррентной формы. Из них мне помнится когда веса типа перевёрнутой параболы. Но и вычисления тогда лучше производиь в double . Да, конечно, сумма значений - это более устойчивый сглаживатель. Но нужно тогда брать ср.арифметич-е, дабы веса в сумме ==1. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2019, 22:40 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
exp98Видим также, что чем свежее картинка, тем больший у неё вес в общей сумме. Э... Нет. Если алгоритм объединения (преобразования) записать в виде формулы (где img0 это текущий скриншот, img1 предыдущий скриншот, img2 это скриншот 10 минут назад и т.д.), то нужный мне вариант выглядит так: Код: plaintext
Код: plaintext
Указанная выше формула mix = (img0+img1+...+img287)/288 гарантированно его получает, но требует значительного объема вычислений на каждой итерации (на каждой итерации нужно выполнять 288 операций наложения). Моя оптимизация заключается в том, чтобы использовать такую формулу: Код: plaintext
Можно промежуточное изображение (mix) привести к 48-битной глубине цвета (по 16 бит на каждую компоненту, например в формате PNG48), тогда этот алгоритм можно будет использовать. Правда на каждой операции будет теряться 1-2 значащих бита, но думаю, что в итоговом изображении это будет незаметно. И кроме того точность этого способа будет сильно падать в увеличением количества изображений в серии (например для 1440 поминутных фотографий на каждой итерации будет теряться до 4-5 значащих битов). Еще более правильным было бы использовать такую формулу: Код: plaintext 1.
Но кроме таких "лобовых" алгоритмов мне подсказали довольно интересный альтернативный способ. Для него я использую буфер промежуточных вычислений/изображений. В виде формулы его можно записать как: Код: plaintext 1. 2. 3. 4.
Код: plaintext 1. 2.
Этот способ не очень удобен в применении и его сложно оптимизировать, а кроме того количество операций наложения в худшем случае будет log2(288), но зато в нем нет погрешности вычислений и его можно применять с любым количеством изображений в серии. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2019, 23:38 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Alibek B., Ты слишком много написал (а у меня сегодня что-то глаза резко просели ((, даже очки не помогают на обычном расстоянии), так я порассуждаю по частям, а местами независимо. 1) авторЭ... Нет. Sk= Sum(i=1..k, fi*p^(k-i)*(1-p)^{i != 1} ), У нас индексация противонапраправлена, так что всё в порядке i==k есть самый свежий кадр. И p очень мало, а не 1/2. На как сказано выше, эта регрессия не робастна. 2) авторЕще более правильным было бы использовать такую формулу: mix' = mix' - img287 + img0 mix = mix'/288 Это был бы идеальный вариант, Не очень ясно, скорее всего речь о ср.арифметическом. Пусть даже и в скользящем варианте. Идеально что? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 14:16 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Alibek B., 3) Ты уж определись, что более важно и насколько. Скорость вычислений, формат операндов, математ-кая корректность, или красота(вкл. исчезающую улыбку Чеширского кота) ? Я не понимаю, что за мазохизм, когда жалеют железную машину (типа перетрудится, болезная) путём собственных извращений с градациями 128б, 513б, 2048б и т.д. Double обеспечит нужную красоту без мазохизма. 4) Насчёт ср.арифм-кого. Ну плавающее ср. оно и есть плавающее. Меня ночью Муза посетила в одном из нарядов от Закона больших чисел. И мне показалось, что ср.арифм будет давать эффект (на длинных последовательностях) в виде Гауссова размытия. Интересно убедиться в этом. (мож я и сам выберу время когда-нить) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 14:27 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
А есть обучающая выборка картинок? Для тренировки ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 14:32 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Alibek B., 5) Гауссово размытие может случиться, если в самом деле кадры будут достаточно "стационарны" в статистическом смысле (З-н Б-х Ч-л). Видеонаблюдение в помещении, камера неподвижна, освещение вкл-выкл не каждый час, достататочное разрешение камеры ... Те же условия, похоже, нужны и для достижения той самой идеи о красоте суммы кадров. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 14:33 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
mayton, привинти смартфон к спинке стула на 1 час. Потом снимешь показания каждые 5 сек - вот тебе и выборка ... В качестве редклго движения иногда махни ладонью в его поле зрения. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 14:36 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Alibek B., ах да, блин! 6) Муза ещё что-то бормотала про скользящую медиану)) Правда с рекуррентностью тут ... видимо, для оптимизации придётся неск. буферных матриц хранить (пояление сэра Мэйтона напомнило). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 14:39 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
exp98mayton, привинти смартфон к спинке стула на 1 час. Потом снимешь показания каждые 5 сек - вот тебе и выборка ... В качестве редклго движения иногда махни ладонью в его поле зрения. Да я лучше возьму красивое цветное видео в FullHD. Потом утилиту типа ffmeg и получу набор картинок *.bmp. P.S. Надеялся что участники топика заготовили тестовые данные. Но... не вышло... :( Всегда так. С тестовыми данными. Мдя. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 14:43 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
exp98Ты уж определись, что более важно и насколько. Как обычно, нужен разумный баланс. Обрабатываться будет на более-менее производительном сервере, так что даже если я буду тупо каждый раз обрабатывать все изображения, он наверное будет успевать это делать. Но зачем вхолостую греть воздух, если можно оптимизировать процесс без ухудшения качества? maytonА есть обучающая выборка картинок? Для тренировки Есть, если пережать в 720p, то примерно 30 МБ за сутки. Если интересно, могу выложить минут через 20. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 14:58 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Alibek B....без ухудшения качества авторDouble обеспечит нужную красоту без мазохизма. , об этом ещё до меня написали ... Возможно, правда, где-то что-то всё же придётся округлять вверх, чтобы совсем в 0 не встало. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 15:14 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Пробую материализовывать авторские мыслеформы далее. Начальный пост (а...ё) содержит некоторые пожелания, что из этого оставляем? а) ("красота")Мне нужно сделать из них что-то вроде фотографии со сверхдлинной выдержкой, на которой неподвижные объекты будут отображены почти нормально, а движущиеся объекты будут малозаметны или незаметны б) ("птичку жалко")Но такая реализация будет генерировать очень большую вычислительную нагрузку на сервер. в) ("рекуррентность") Я бы хотел не накладывать все 288 фотографий каждый раз, а при каждой итерации накладывать только текущую г) ("скользящее среднее") Чем-то нужное мне поведение похоже на вычисление скользящего среднего д) ("пикселов жалко") Но к изображениям такой подход не применить, у них конечная разрядность для каждого пиксела. е) ("черновой вариант") "затемнять" итоговое изображение, а затем накладывать на него текущее изображение с прозрачностью. Теоретически следы суточной давностью полностью сойдут на нет и должно получится что-то более-менее похожее на сверхдолгую выдержку. (Видимо, эту мыслеформу я уже материализовал формулой.) ё) ("такая задача") может быть есть другие способы решения такой задачи? Какова, всё же, задача,особенно учитывая последующее ср.арифметическое: ж) ("полное ср.арифм") Пока что я пришел к тому, чтобы ...: mix = mix - old/288 + new/288. (ИМХО, в этом варианте для общего случая равные веса не обеспечивают робастность, например к титрам) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 15:16 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Alibek B., вот ещё забыл вариант от Музы: вариант скользящего ср., взвеш. с "ядром Епанечникова". Полноценный робастный вариант. В теории это ф-ция y= 3/4(1-x^2) &&(x in [-1; 1]) Перевёрнутая парабола. Рекомендую, сам МНОГО раз пользовал. Правда, чтобы сумма весов==1, надо бы поделить на 2, кажется. Пример 7 весов(ну ... тут из экса взял, нужно округлить среднее число): 0,00000 0,12054 0,14286 0,15625 0,16071 0,15625 0,14286 0,12054 0,00000 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 15:29 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
Нужно только A — усреднение всех изображений за сутки. Ограничения реализации: обработка изображений будет выполняться bash+ImageMagick, поэтому реализация должна быть манипуляциями с изображениями (а не сохранение значений пикселов в CSV и работа с dword/float). Пожелания: разумная оптимизация, чтобы не пересчитывать заново то, что можно не пересчитывать. > е) ("черновой вариант") "затемнять" итоговое изображение, а затем накладывать на него текущее изображение с прозрачностью. Теоретически следы суточной давностью полностью сойдут на нет и должно получится что-то более-менее похожее на сверхдолгую выдержку. Не совсем так. Под затемнением и наложением я имел ввиду не blend с определенным коэффициентом прозрачности (тогда чем изображение свежее, тем у него будет больший вес), а арифметические операции вычитания и сложения над изображениями, умноженными на константу (тогда у всех изображений будет равный вес). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 15:35 |
|
Наложение серии изображений
|
|||
---|---|---|---|
#18+
maytonНадеялся что участники топика заготовили тестовые данные. Но... не вышло... Принцип минимального действия в действии, www. halyave. net. А вообще, яписал выше, что мне и самому интересно результаты увидеть воочию на разных моделях. Но неспеша. М.б.дней через 10-15(если ТС сам раньше не покажет рез-ты). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2019, 15:41 |
|
|
start [/forum/topic.php?fid=16&msg=39883361&tid=1339866]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
176ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 298ms |
0 / 0 |