Ошибки в алгоритме расчета?

Вопросы создания 3D изображений методом "карты глубины", работа с программой StereoTracer

Модераторы: Vlad Sidash, Ledmaster, Anastasiya

OlegPr
Сообщений: 17
Зарегистрирован: Ср фев 04, 2009 6:12 pm

Ошибки в алгоритме расчета?

Сообщение OlegPr » Пн апр 06, 2009 8:51 pm

Приветствую.
Изучая StereoTracer, заметил, что в ряде случаев происходит появление артефактных пикселов, портящих картинку.
Попытался на простейшем примере продемонстрировать данный эффект. Ниже привожу изображения (фрагменты).
Маска глубины точно совпадает с изображением.
Пример 1:
черный квадрат на белом фоне.
Изображение

маска глубины:
- фон черный,
- квадрат серый (50 %)
Изображение

результат (10 кадров, установки по умолчании):
первый кадр (1) все в порядке.
Изображение
последний кадр (10) !!! идет размытие объекта, хотя это совершенно не нужно - по идее должен размываться фон (в нашем случае белый)
Изображение

Пример 2:
черный квадрат на белом фоне.
Изображение

маска глубины:
- фон черный,
- квадрат градиент (от 30 % до 70 %)
Изображение

результат (10 кадров, установки по умолчании):
первый кадр (1) !!! вот тут совсем непонятно - зачем и откуда взялись белые точки??? я понимаю, что градиент диктует точкам разбегаться с разной скоростью, поэтому образуются незаполненные пикселы, но их нужно заполнять изображением квадрата, а не как не фона!!!
Изображение

последний кадр (10) !!! а тут опять идет ненужное размытие как в первом примере.
Изображение

Что это? Ошибки в алгоритме расчета?
Вопрос к разработчикам.

С уважением, Олег.

Ledmaster
Сообщений: 317
Зарегистрирован: Пн май 05, 2008 11:23 pm

Re: Ошибки в алгоритме расчета?

Сообщение Ledmaster » Вт апр 07, 2009 1:07 am

OlegPr писал(а):последний кадр (10) !!! а тут опять идет ненужное размытие как в первом примере.
Изображение

Что это? Ошибки в алгоритме расчета?
Вопрос к разработчикам.

Да, да, пусть разработчики отдуваются! :lol:
У меня только один дилетантский вопрос. Олег, а как Вы различаете размытие фона и размытие объекта переднего плана, когда видите размытую границу между ними?

OlegPr
Сообщений: 17
Зарегистрирован: Ср фев 04, 2009 6:12 pm

Сообщение OlegPr » Вт апр 07, 2009 1:43 am

Объект - черный, фон - белый.
маска глубины на фоне - черная, т.е. фон - самый дальний объект.
вне зависимости от номера кадра вся фоновая часть должна быть белая - откуда там взяться другому цвету?
Кадр 10 - это обзор справа, т.е. мы как-бы заглядываем за объект с правой стороны. При этом мы ожидаем увидеть участок ФОНА, скрытый этим объектом. Он нам неизвестен, но мы можем предположить, что он совпадает с крайними известными нам участками (пикселами) фона. И уж никак не с самим объектом!!!
А после расчета программой мы видим смесь пикселов объекта и фона... С чего бы это?
Вот эта мазня от объекта очень раздражает. Избавиться от неё можно, увеличивая маску (так что-бы она захватывала фон), но это на мой взгляд неверно!
Надеюсь понятно объяснил.

С уважением, Олег.

Ledmaster
Сообщений: 317
Зарегистрирован: Пн май 05, 2008 11:23 pm

Сообщение Ledmaster » Вт апр 07, 2009 9:29 am

А какова ширина зоны размытия в пикселях?
Вообще, на "живых" изображениях граница тоже всегда размыта из-за дифракции, и если этого не делать на синтезированных изображениях, то они будут выглядеть как коллаж с передними объектами "наклеенными" на фон.

Алексей Поляков
Site Admin
Сообщений: 771
Зарегистрирован: Ср авг 23, 2006 1:08 pm
Контактная информация:

Сообщение Алексей Поляков » Вт апр 07, 2009 12:02 pm

Здравствуйте, Олег

OlegPr писал(а):... Кадр 10 - это обзор справа, т.е. мы как-бы заглядываем за объект с правой стороны. При этом мы ожидаем увидеть участок ФОНА, скрытый этим объектом. Он нам неизвестен, но мы можем предположить, что он совпадает с крайними известными нам участками (пикселами) фона. И уж никак не с самим объектом!!!
А после расчета программой мы видим смесь пикселов объекта и фона...



Согласен, вполне резонное рассуждение. Что касается размытия на краях объектов, действительно, в текущей реализации оно есть. Как Вы верно заметели невидимую часть скрытого ранее объекта надо заполнять. Алгоритм, конечно, будем улучшать, но без некоторого размытия, вероятно, не обойтись. Сохранять по возможности границы объектов переднего плана - хорошая идея.

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

С уважением,
Алексей.

Ledmaster писал(а):... У меня только один дилетантский вопрос.

- да уж, таких "дилетантов" еще поискать надо :-)

OlegPr
Сообщений: 17
Зарегистрирован: Ср фев 04, 2009 6:12 pm

Сообщение OlegPr » Вт апр 07, 2009 2:52 pm

Ledmaster писал(а):А какова ширина зоны размытия в пикселях?
Вообще, на "живых" изображениях граница тоже всегда размыта из-за дифракции, и если этого не делать на синтезированных изображениях, то они будут выглядеть как коллаж с передними объектами "наклеенными" на фон.


Ширина размытия в кадре 10 - 10 пикселов.
Это никак нельзя списать на эмуляцию "дифракции".
В конце концов на реальном "живом" изображении (не на моем примере) дифракционное размытие уже присутствует, и соответственно его не надо дополнительно создавать.
Нужно работать с клонированием фона, а не размазыванием объекта.

Если кому-то надо размазывать нраницу объекта, эмулируя "объем", то это должно достигается градиентом в маске глубины по краю объекта.
Последний раз редактировалось OlegPr Вт апр 07, 2009 3:15 pm, всего редактировалось 1 раз.

OlegPr
Сообщений: 17
Зарегистрирован: Ср фев 04, 2009 6:12 pm

Сообщение OlegPr » Вт апр 07, 2009 3:11 pm

Алексей Поляков писал(а):Согласен, вполне резонное рассуждение. Что касается размытия на краях объектов, действительно, в текущей реализации оно есть. Как Вы верно заметели невидимую часть скрытого ранее объекта надо заполнять. Алгоритм, конечно, будем улучшать, но без некоторого размытия, вероятно, не обойтись. Сохранять по возможности границы объектов переднего плана - хорошая идея.


Можно ли говорить о сроках?

Алексей Поляков писал(а):Практика показывает, что при использовании текущей версии программы, более хорошие результаты получаются, если на карте глубины не задавать резких границ. Для этого можно использовать функцию размытия карты глубины с радиусом 6-9-12 пикселов (в зависимости от разрешения карты).

Да, я в курсе, при этом пропадают артефакты из первого кадра второго примера, размытие в последних кадрах становится маленьким - 2 пиксела. Но при этом углы квадрата в первом кадре начинают срезаться, а в последнем выпячиваться (что и следовало ожидать по вине размытой маски).
Мне кажется, что в первую очередь расчет должен правильно работать в условиях четких границ.

Прошу обратить отдельное внимание на артефактные пикселы в кадре 1 второго примера.

С уважением, Олег.

Алексей Поляков
Site Admin
Сообщений: 771
Зарегистрирован: Ср авг 23, 2006 1:08 pm
Контактная информация:

Сообщение Алексей Поляков » Вт апр 07, 2009 5:51 pm

OlegPr писал(а):Можно ли говорить о сроках?


Сроки могу сказать только ориентировочные - конец мая.

Алексей.

Ledmaster
Сообщений: 317
Зарегистрирован: Пн май 05, 2008 11:23 pm

Сообщение Ledmaster » Вт апр 07, 2009 9:38 pm

OlegPr писал(а):
Ledmaster писал(а):В конце концов на реальном "живом" изображении (не на моем примере) дифракционное размытие уже присутствует, и соответственно его не надо дополнительно создавать.
Если ракурс совпадает с исходным, то да, а на десятом ракурсе, когда объект далековато уехал от своего "родного" положения?
Нужно работать с клонированием фона, а не размазыванием объекта.
Предполагается, что программа должна точно знать, что есть "фон", а что есть "объект" :?:
Если кому-то надо размазывать нраницу объекта, эмулируя "объем", то это должно достигается градиентом в маске глубины по краю объекта.
Градиент в карте глубины размажет границы объекта в глубину, но никак не способен размыть их.

OlegPr
Сообщений: 17
Зарегистрирован: Ср фев 04, 2009 6:12 pm

Сообщение OlegPr » Ср апр 08, 2009 2:46 am

Ledmaster писал(а):Если ракурс совпадает с исходным, то да, а на десятом ракурсе, когда объект далековато уехал от своего "родного" положения?

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

Ledmaster писал(а):Предполагается, что программа должна точно знать, что есть "фон", а что есть "объект" :?:

И тут не вижу проблемы: объект и фон понятия относительные - из двух соседних по горизонтали пикселов, обладающих разной глубиной ближний к нам пиксел считаем объектом, более дальний -фоном.

Ledmaster писал(а): Градиент в карте глубины размажет границы объекта в глубину, но никак не способен размыть их.

Да вобщем-то и я об этом. Большего и не нужно.

Anastasiya
Сообщений: 159
Зарегистрирован: Ср авг 23, 2006 11:51 pm

Сообщение Anastasiya » Ср апр 08, 2009 2:03 pm

OlegPr писал(а):
Ledmaster писал(а):Если ракурс совпадает с исходным, то да, а на десятом ракурсе, когда объект далековато уехал от своего "родного" положения?

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

Откуда программе знать, как выглядит узор ковра, за спиной объекта, окуда ей знать про формы растений и проч...?
Человек, не всегда легко дорисовывает сложный фон. Нельзя требовать такого "автомата" от однослойного конвектора. Есть же многослойные. Фон надо дорисовывать человеку вручную, или применять какой-либо другой, цельный. Для однослойного конвектора Stereotraser работает хорошо. Файл можно подобрать, смонтировать с однообразным, монотонным, или размытым фоном, маску сделать точной, контуры маски размыть уже на самом фоне. Надо же просто попрактиковать в точности попадания границы маски объекта с самой границей объект - фон , и артефакты заметны не станут.

OlegPr
Сообщений: 17
Зарегистрирован: Ср фев 04, 2009 6:12 pm

Сообщение OlegPr » Ср апр 08, 2009 3:19 pm

Anastasiya писал(а): Откуда программе знать, как выглядит узор ковра, за спиной объекта, окуда ей знать про формы растений и проч...?
Человек, не всегда легко дорисовывает сложный фон. Нельзя требовать такого "автомата" от однослойного конвектора. Есть же многослойные. Фон надо дорисовывать человеку вручную, или применять какой-либо другой, цельный. Для однослойного конвектора Stereotraser работает хорошо. Файл можно подобрать, смонтировать с однообразным, монотонным, или размытым фоном, маску сделать точной, контуры маски размыть уже на самом фоне. Надо же просто попрактиковать в точности попадания границы маски объекта с самой границей объект - фон , и артефакты заметны не станут.

1. Естественно программа не может знать, что скрыто объектом. Она может только ПОВТОРИТЬ крайние видимые пикселы "фона". Большего от неё не требуется. А проблема как раз в том, что она занимается самодеятельностью и использует пикселы "объекта", не взирая на "точную" маску, определяющую "объект".
2. Я столкнулся с появлением "артефактов" именно при попытке использовать точное определения объекта маской.
В принципе я довольно быстро добился приемлимых результатов преобразования в 3d с помощью StereoTracer. Мне не понравились две вещи: появление артефактов на "объекте" (можно избежать размытием маски) и размазывание "фона", скрытого в изначальном изображении (от этого никуда не деться, просто не хочется, что-бы туда попадали пикселы "объекта").
Я задумался, а нельзя ли разбив изображение на несколько уровней-изображений, сделать просчет каждого из них отдельно (при этом на фоновых изображениях дорисовать скрытые участки, которые должны появляться на сгенерированных кадрах), а результат совместить?
Работа не маленькая, но в теории результат должен бы был быть шикарным.
Я попробовал... И все бы ничего, но неожиданно для меня вылезли проблемы, которые я описал в первом посте. В результате полученные после расчета изображения совмещать уже не было смысла...
Я уже не говорю, что в идеале в развитии StereoTracer можно было-бы сразу предусмотреть входную многослойность :)
В результате я настолько загорелся идеей, что сейчас сам пишу программу (благо с этим сложностей нет) для преобразования фото в 3d с учетом моих потребностей. О результатах обещаю отчитаться.

Anastasiya
Сообщений: 159
Зарегистрирован: Ср авг 23, 2006 11:51 pm

Сообщение Anastasiya » Ср апр 08, 2009 8:32 pm

OlegPr писал(а):1. Естественно программа не может знать, что скрыто объектом. Она может только ПОВТОРИТЬ крайние видимые пикселы "фона".

Это как бы не совсем правильно.
OlegPr писал(а):В результате я настолько загорелся идеей, что сейчас сам пишу программу (благо с этим сложностей нет) для преобразования фото в 3d с учетом моих потребностей. О результатах обещаю отчитаться.

Многослойную? Очень даже будет интересно. Очень нужное дело.

OlegPr
Сообщений: 17
Зарегистрирован: Ср фев 04, 2009 6:12 pm

Сообщение OlegPr » Ср апр 08, 2009 10:48 pm

Отчитываюсь предварительно:
написал расчет, дающий результат практически идентичный StereoTracer.
Даже артефакты есть :).
Разберусь с причиной их появления, займусь многослойностью.
На самом деле основная проблема - определение принадлежности участков изображения, оставшихся пустыми после расчета. Не всегда однозначно можно отнести их к конкретной глубине... С этим пропарился большую часть дня, но так удовлетворительного решения и не нашел...

Anastasiya
Сообщений: 159
Зарегистрирован: Ср авг 23, 2006 11:51 pm

Сообщение Anastasiya » Ср апр 08, 2009 11:08 pm

Классно! Умеете удивлять! :shock:


Вернуться в «StereoTracer/3D с помощью карты глубины»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 4 гостей