У меня есть серое изображение, и я хочу сделать функцию, которая
- внимательно следит за изображением
- всегда больше чем изображение
- сглаживание по некоторой заданной шкале.
Другими словами, мне нужна гладкая функция, которая аппроксимирует максимум другой функции в локальной области, переоценивая эту функцию во всех точках.
Есть идеи?
Мой первый проход при этом сводился к выбору «верхних точек» (путем сравнения изображения с подборкой наименьших квадратов двумерного многочлена высокого порядка) и сопоставления двумерного многочлена с ними и их наклонами. Поскольку для первой подгонки потребовалось больше рабочего пространства, чем у меня было адресное пространство, я думаю, что это не сработает, и мне придется придумать что-то еще ...
Что я сделал
Моей конечной целью было выполнить плавную настройку изображения, чтобы каждая локальная область использовала полный диапазон значений. Основная идея заключалась в том, что «почти идеальная» функция вполне подойдет мне.
Следующей процедурой (которая никогда не имеет явно функции max) является то, что я закончил:
- Найдите локальное среднее значение и стандартное отклонение в каждой точке, используя функцию типа размытия.
- смещение изображения, чтобы получить нулевое среднее. (
image -= mean;
)
- разделите каждый пиксель на его стандартное значение. (
image /= stdev;
)
- самое большое изображение теперь должно быть в
[-1,1]
(как ни странно, большинство моих тестовых изображений имеют лучше, чем 99% в этом диапазоне, а не 67%, которые можно было бы ожидать)
- найдите стандартное отклонение всего изображения.
- сопоставить некоторый диапазон +/- n * сигма с вашим выходным диапазоном.
С небольшими манипуляциями, которые можно преобразовать, чтобы найти функцию Макс, о которой я спрашивал.