Гладкая локальная функция отшелушивания - PullRequest
2 голосов
/ 25 декабря 2009

У меня есть серое изображение, и я хочу сделать функцию, которая

  1. внимательно следит за изображением
  2. всегда больше чем изображение
  3. сглаживание по некоторой заданной шкале.

Другими словами, мне нужна гладкая функция, которая аппроксимирует максимум другой функции в локальной области, переоценивая эту функцию во всех точках.

Есть идеи?


Мой первый проход при этом сводился к выбору «верхних точек» (путем сравнения изображения с подборкой наименьших квадратов двумерного многочлена высокого порядка) и сопоставления двумерного многочлена с ними и их наклонами. Поскольку для первой подгонки потребовалось больше рабочего пространства, чем у меня было адресное пространство, я думаю, что это не сработает, и мне придется придумать что-то еще ...


Что я сделал

Моей конечной целью было выполнить плавную настройку изображения, чтобы каждая локальная область использовала полный диапазон значений. Основная идея заключалась в том, что «почти идеальная» функция вполне подойдет мне.

Следующей процедурой (которая никогда не имеет явно функции max) является то, что я закончил:

  • Найдите локальное среднее значение и стандартное отклонение в каждой точке, используя функцию типа размытия.
  • смещение изображения, чтобы получить нулевое среднее. (image -= mean;)
  • разделите каждый пиксель на его стандартное значение. (image /= stdev;)
  • самое большое изображение теперь должно быть в [-1,1] (как ни странно, большинство моих тестовых изображений имеют лучше, чем 99% в этом диапазоне, а не 67%, которые можно было бы ожидать)
  • найдите стандартное отклонение всего изображения.
  • сопоставить некоторый диапазон +/- n * сигма с вашим выходным диапазоном.

С небольшими манипуляциями, которые можно преобразовать, чтобы найти функцию Макс, о которой я спрашивал.

Ответы [ 4 ]

2 голосов
/ 27 декабря 2009

Вот кое-что, что легко; Я не знаю, насколько это хорошо.

  1. Чтобы получить smooth , используйте ваш любимый алгоритм размытия. Например, средние точки в радиусе 5. Космическая стоимость - это порядок размера изображения, а время - произведение размера изображения на квадрат радиуса размытия.

  2. Возьмите разницу каждого отдельного пикселя с исходным изображением, найдите максимальное значение (original[i][j] - blurred[i][j]) и добавьте это значение к каждому пикселю размытого изображения. Сумма гарантированно приведет к чрезмерной окраске исходного изображения. Стоимость времени пропорциональна размеру изображения с постоянным дополнительным пространством (если перезаписать размытое изображение после вычисления макс.

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

1 голос
/ 25 декабря 2009

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

  1. Если слишком большая разница в значении между этим пикселем и его соседями может быть разрешена путем увеличения значения пикселя, сделайте это.
  2. Если изменение наклона большого пикселя вокруг этого пикселя и его соседей можно разрешить путем увеличения значения пикселя, сделайте это.

2D-версия будет выглядеть примерно так:

for all x:
    d = img[x-1] - img[x]
    if d > DMAX:
        img[x] += d - DMAX
    d = img[x+1] - img[x]
    if d > DMAX:
        img[x] += d - DMAX

    dleft = img[x-1] - img[x]
    dright = img[x] - img[x+1]
    d = dright - dleft
    if d > SLOPEMAX:
        img[x] += d - SLOPEMAX
1 голос
/ 25 декабря 2009

Максимально отфильтруйте изображение с помощью фильтра RxR, затем используйте порядок R-1 B-сплайнового сглаживания для максимально отфильтрованного изображения. Свойства выпуклой оболочки B-сплайна гарантируют, что он будет выше исходного изображения.

0 голосов
/ 25 декабря 2009

Можете ли вы уточнить, что вы подразумеваете под своим желанием, чтобы оно было "гладким" в некотором масштабе? Кроме того, насколько велика «локальная область», чтобы вы приблизились к максимуму?

Быстрый и грязный ответ: средневзвешенное значение исходного изображения и оконный максимум.

...