Страница 1 из 3

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

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

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

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

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

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

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

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

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

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

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

Добавлено: Вт апр 07, 2009 1:07 am
Ledmaster
OlegPr писал(а):последний кадр (10) !!! а тут опять идет ненужное размытие как в первом примере.
Изображение

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

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

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

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

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

Добавлено: Вт апр 07, 2009 12:02 pm
Алексей Поляков
Здравствуйте, Олег

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



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

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

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

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

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

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


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

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

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


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

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

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

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

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

Добавлено: Вт апр 07, 2009 5:51 pm
Алексей Поляков
OlegPr писал(а):Можно ли говорить о сроках?


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

Алексей.

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

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

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

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

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

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

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

Добавлено: Ср апр 08, 2009 2:03 pm
Anastasiya
OlegPr писал(а):
Ledmaster писал(а):Если ракурс совпадает с исходным, то да, а на десятом ракурсе, когда объект далековато уехал от своего "родного" положения?

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

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

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

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

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

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

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

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

Добавлено: Ср апр 08, 2009 11:08 pm
Anastasiya
Классно! Умеете удивлять! :shock: