2015-04-30 3 views
1

Недавно мне было очень весело с алгоритмом лапласианской пирамиды (http://persci.mit.edu/pub_pdfs/pyramid83.pdf). Но одна большая проблема заключается в том, что исходная бумага ограничена 2^m + 1 * 2^n + 1 изображениями. Мой вопрос: каков наилучший способ справиться с произвольным w * h вместо этого? Я могу думать о нескольких вариантов:Как справиться с произвольным размером для пирамиды Лапласа?

  • Up образец вклад в последующие 2^т + 1,2^п + 1 до передних
  • Pad даже линии. Как именно? Разве это не изменит сигнал?
  • Сдвинуть ровные линии на половину образца? Разве это не потеряло бы половину выборки?

Есть ли у кого-нибудь опыт? Каков наиболее практичный и эффективный подход? Также приветствуются любые указатели на документы, касающиеся этого.

ответ

2

Один из подходов состоит в том, чтобы создать изображение с шириной и высотой, равным следующим 2^m + 1,2^n + 1, но вместо того, чтобы отбирать изображение для заполнения расширенных измерений, просто поместите его в в верхнем левом углу и заполнить пустое пространство справа и внизу с постоянным значением (для этого хорошим является среднее значение для изображения). Затем кодируйте обычным способом, сохраняя исходные размеры изображения вместе с пирамидой. При декодировании, декодировании, а затем обрезке до исходного размера.

Это не приведет к появлению каких-либо визуальных артефактов или деградации, поскольку вы не растягиваете или не компенсируете изображение каким-либо образом.

Поскольку пустое пространство справа и ниже исходного изображения является постоянным значением, полосы высоких частот на каждом уровне пирамиды изображения будут равны нулю в этой области. Поэтому, если вы используете схему сжатия, такую ​​как кодирование длины прогона для хранения каждого уровня, это автоматически будет устранено, и эти области будут сжаты почти до нуля. Если нет, вы можете просто сохранить верхнюю левую (потенциально ненулевую) область каждого уровня, а затем заполнить остальные нулями при декодировании.

Вы можете найти ограничивающий прямоугольник min и max x и y ненулевых значений для каждого уровня и сохранить это вместе с уровнем, обрезанным для включения только ненулевых значений. Декодер также может быть оптимизирован так, что области изображения, которые будут обрезаны, на самом деле фактически не декодируются, обрабатывая только левый верхний уровень каждого уровня.

Вот иллюстрация техники:

enter image description here

Вместо того, чтобы просто заполняя нижний правый уголок с плоским цветом, вы можете заполнить его по горизонтали и по вертикали зеркальных копии изображений справа и ниже, и копия отражается в обоих направлениях в нижнем правом углу, как это:

enter image description here

Это позволит избежать разрывов первого техники, хотя будет разрыв в dx (например, если бы значение постепенно увеличивалось слева направо, оно внезапно уменьшалось). Выбор зеркала, поддерживающего постоянную dx и нуля ddx, позволит избежать этого разрыва второго порядка путем линейной экстраполяции значений.

Другая методика, аналогичная тому, что делают некоторые кодировщики JPEG для разбиения изображения на целое число блоков MCU, заключается в том, чтобы взять последнее значение пикселя каждой строки и повторить его, а также для столбцов с снизу самый правый пиксель изображения, используемое для заполнения нижней правой площади:

enter image description here

Этого последний метод может быть легко модифицирован для экстраполяции градиент значений или даже градиента градиентов, а не просто повторять то же значение для остальной части строки или столбца.

+0

Спасибо за проницательный ответ. На самом деле я не заинтересован в сжатии - это была просто самая простая бесплатная статья по алгоритму. Смешивание - настоящее приложение! Одна вещь, которая беспокоит меня дополнением, заключается в том, что она создает довольно суровый разрыв на каждой частоте выше самой низкой? Бумага выбирает зеркало, которое поддерживает постоянную dx и ddx ноль, как и на краях. Не зря? Как я вижу, единственным требованием является сохранение свойства sum. Интуитивно это возможно при округлении размера? Но как сохранить его в центре? – starmole

+0

Зеркалирование или размазывание вместо заполнения плоским цветом позволит избежать разрыва (см. Обновленный ответ). Я не мог найти, где в документе упоминается выбор зеркала, поэтому я не уверен, как ответить на все ваши вопросы, но я бы предположил, что причиной такого прерывания является причина. Единственное, что я хотел бы сказать, заключается в том, что такая экстраполяция может приводить к значениям вне допустимого диапазона, например. отрицательные значения. В основном вы просто пытаетесь синтезировать правдоподобные значения пикселей с края изображения, самый простой метод, который позволяет избежать видимых артефактов, вероятно, лучший. – samgak

+0

Я принял ваш ответ, поскольку он очень тщательно! Благодаря! Я также нашел эту статью от тех же авторов, что прямо говорит о граничных условиях в 2.4: http://persci.mit.edu/pub_pdfs/spline83.pdf. Они рекомендуют зеркалирование, которое вы также предлагаете. Я все еще немного борюсь с тем, как правильно обрабатывать смешивание между двумя изображениями с разным размером или смещением. Еще раз спасибо за ответ, это помогло мне много подумать о проблеме. – starmole