|
|
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Джентльмены, возник небольшой вопрос. Имеется условно прямоугольная сетка кадров, снятых с перекрытием, далее они попарно совмещаются. Для совмещения кадры нужно загрузить. Кадров может быть до нескольких тысяч, в памяти их всех разместить невозможно, поэтому приходится делать вытесняющий кэш заданного объема. Необходимо составить алгоритм обхода пар так, чтобы минимизировать количество загрузок. Наверняка есть похожие стандартные задачи, но я о них ничего не знаю. Подскажите, куда копать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 09:38 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, А две строки/столбца в сетке возможно в памяти разместить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 09:49 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
miksoft, Сейчас так и делается, но при большом числе кадров уже не получается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 09:56 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Думаю, можно сократить расход до одной строки/столбца плюс 1-2 кадра на перехлест. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 10:03 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, не уверен, но м.б. фрактальная нумерация кадров как точек плоскости поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 12:28 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
miksoftДумаю, можно сократить расход до одной строки/столбца плюс 1-2 кадра на перехлест.Если и так будет слишком много, то резать исходную сетку на полосы перпендикулярно направлению "сканирования". Ширину полос выбирать исходя из доступной памяти. Правда, пограничные изображения придется грузить дважды. Поэтому полосы желательно не делать слишком узкими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 12:41 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
ИМХУ просто построчно обходить меняя направление обхода. Т.е. в таком порядке 1 2 3 4 8 7 6 5 9 ... Тут если кэша хватит на одну строку, то повторного считывания в кэш не потребуется. В худшем случае надо будет пересчитать крайние элементы последней законченной строки. Если проблема в потери времени на загрузку в кэш, то задача легко распараллеливается: строить план на 5-10 шагов вперед и пока считается текущий кадр скачивать необходимые для следующего рассчета. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 13:02 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Dima TТут если кэша хватит на одну строку, то повторного считывания в кэш не потребуется.Увы, нужно на две. При обработке 8-ого кадра, 1-ый все еще нужен. А вот если не менять направление, то нужно хранить одну строку плюс 2 кадра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 13:07 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
miksoftПри обработке 8-ого кадра, 1-ый все еще нужен. А вот если не менять направление, то нужно хранить одну строку плюс 2 кадра. Согласен, так меньше кэша надо. Но если в кэш влезет меньше одной + 2 кадра, то без смены направления надо будет повторно считывать каждый кадр, а при смене направлений - только часть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 13:17 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, можно для всех картинок сделать MipMapping И решив данную задачу для маленьких фотоснимков (64x64) pix к примеру перенести ту-же конфигурацию нахлёстов и накладок к большим картинкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.01.2015, 14:41 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Dima TИМХУ просто построчно обходить меняя направление обхода. Т.е. в таком порядке 1 2 3 4 8 7 6 5 9 ... Тут если кэша хватит на одну строку, то повторного считывания в кэш не потребуется. В худшем случае надо будет пересчитать крайние элементы последней законченной строки. Сейчас делается именно так - обход построчно по меандру. На больших размерах предыдущую строчку приходится перегружать. Число лишних загрузок получается порядка (Y-1)*P, где P - (0..X-1) в зависимости от размера кэша. Я думал, возможно существуют алгоритмы с меньшей накладкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 14:55 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисЯ думал, возможно существуют алгоритмы с меньшей накладкой. Еще вопрос по одработке: допустим есть картинки: 1 2 3 4 5 6 7 8 9 для обработки 5-й какие нужны? 2 4 6 8 ? или 2 4 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 15:13 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Dima TЕще вопрос по одработке: Сейчас пока 8-связный алгоритм (все соседи, в т.ч. диагональные). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 15:36 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисЯ думал, возможно существуют алгоритмы с меньшей накладкой.Пару более выгодных вариантов я уже предложил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:06 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
miksoftСоколинский БорисЯ думал, возможно существуют алгоритмы с меньшей накладкой.Пару более выгодных вариантов я уже предложил. Я прочитал, спасибо. Идея с полосками, наверное, лучше всего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 16:56 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Можно Кривую Гильберта попробовать. Или Z-order. Последний используется в пространственных DBMS где есть задача консолидировать секторы или блоки гео-базы данных рядышком при условии что мы запрашиваем bounding volume который накрывает собой несколько блоков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:37 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
maytonМожно Кривую Гильберта попробовать.Имхо, это будет еще хуже текущего положения дел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:44 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борис, если я правильно понял, что Вы хотите, оптимальным, пожалуй, будет вариант на рисунке. Но мне кажется, основная алгоритмическая сложность не в порядке обхода, а в формировании результата... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:48 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
softwarer, miksoft, насколько я понял, именно такой вариант предложил. С результатами - отдельная история, не для этой темы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 17:59 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
miksoftmaytonМожно Кривую Гильберта попробовать.Имхо, это будет еще хуже текущего положения дел. Этот вопрос не такой простой как кажется. Я вот из топика не понимаю каким образом Борис делает выравнивание границ и проверки на то что мозаика складывается верно. Если я это пойму - то посоветую order или файловый формат при котором взаимодействие с источниками будет минимально. В некотором вырожденном варианте можно вообще решать задачу "поточно" без привлечения кешей и буферов. Но я должен понять как Борис делает сшивание фоток. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 18:07 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борисmiksoft, насколько я понял, именно такой вариант предложил.Нет, не такой. В вертикальной ориентации это будет так: 1234567891011121314151617181920..... Правда, ошибся с подсчетом занимаемой памяти. Нужны будет не одна строка + 2 кадра, а 2 строки + 2 кадра. Например, в момент обработки кадра №13 будут храниться кадры с 7 по 19. Но все кадры будут загружаться ровно по одному разу. Если сетка широкая и ее нужно резать на полосы, то так: 1234510110210310410567891010610710810911011121314151111121131141151617181920116117118119120.......... Повторно будут загружаться кадры, граничащие с полосой разреза. Для минимизации их количества нужно максимально увеличивать ширину полос насколько позволяет память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 18:18 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Соколинский Борисmiksoft, насколько я понял, именно такой вариант предложил. Возможно, я не понял или неудачно нарисовал. Основная идея - не пытаться обработать всю строку или весь столбец, а брать такой размер "до перехода", чтобы влезть в кеш, а незатронутые (белые ниже) обрабатывать аналогичным образом потом. Тогда оверхед получится довольно незначительным, порядка 1/N блоков, где N - размер кеша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 18:19 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
maytonЭтот вопрос не такой простой как кажется. Я вот из топика не понимаю каким образом Борис делает выравнивание границ и проверки на то что мозаика складывается верно. Если я это пойму - то посоветую order или файловый формат при котором взаимодействие с источниками будет минимально. В некотором вырожденном варианте можно вообще решать задачу "поточно" без привлечения кешей и буферов. Но я должен понять как Борис делает сшивание фоток. Мне казалось, это к теме не относится, но могу рассказать, большого секрета тут нет. 1. "Грубая" сетка кадров получается при создании карты просто по координатам "сканера" (запись кадров идет в "нахлест"). По этой сетке вычисляются перекрывающиеся пары и для каждой пары - предполагаемая область перекрытия. 2. Делается совмещение всех выбранных пар, процедура выдернута из OpenCV. Собственно здесь возникает задача оптимизации порядка совмещения. 3. В результате получается система линейных уравнений, большая, разреженная и переопределенная. Решается методом наименьших квадратов, есть достаточно эффективный и качественный алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 19:00 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
miksoftНет, не такой. Тут разница только в порядке обхода строк/столбцов - не по меандру, а от меньшего к большему. Принципиальной разницы не вижу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 19:02 |
|
||
|
Панорамирование - оптимизация загрузки
|
|||
|---|---|---|---|
|
#18+
Соколинский БорисmiksoftНет, не такой. Тут разница только в порядке обхода строк/столбцов - не по меандру, а от меньшего к большему. Принципиальной разницы не вижу.Мда, порисовал клеточки, действительно. Прошу прощения, что сбил с толку. Но зато у меня алгоритм учета загрузок/выкидываний проще получается - обычный FIFO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2015, 19:18 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=32&tid=1340855]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
38ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 384ms |

| 0 / 0 |
