powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Кусочно линейная интерполяция с ограничениями
25 сообщений из 65, страница 2 из 3
Кусочно линейная интерполяция с ограничениями
    #40089204
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про SVG я сразу поверил. Только не могу понять, как это связано с Ф.
Или речь идёт о восстановлении средствами обработчика изображений? Тогда ой!

Ну хорошо, пятна-кластеры,полученныеобратным Ф, заменить эллипсами. Мелкие почикать. Эллипсы -->SVG.
Ф - обратимое преобразование. При любых искажениях в спектре обратное Ф всегда что-то да выдаст. Если мало исказить, то и результат мало исказится. Мало по амплитуде, но конечно может по всему пространству рябь пойти.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089213
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Смотри.
1) Дана двумерная картинка.
2) Фильтруем ФНЧ по горизонтали с нулевой частотой. Получаем рябь в виде коротких градиентов или полосок как в ссылочном топике.
3) Далее - оптимизируем по размеру (нам ведь не нужно каждый пиксел делать градиентом). Из 200 градиентов делаем 10 (ну
в комбинации 3х каналов можем получить 30 штук).
4) Отрисовываем с помощью SVG или javaScrip/Canvas.
5) Получаем визуальный объект который достоверно отражает эту смазанную картинку вектором.

А где здесь мне полезно Фурье?
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089226
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще интересный кейс. Здесь горизонт не завален. Но есть ярко выраженный
наклон низких частот на фоне.

...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089236
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
А где здесь мне полезно Фурье?
Так бы сразу и сказал(с)
И всё равно, фильтрация через Ф. гораздо гибче.
А с сохранением градиентов ещё прощебез "регрессий". Наложить 2Д-сетку и для каждой клетки подсчитать разницу суммы или среднего с 8-ю соседками. Дублирование встречным направлением исключить. И сетку можно ИТшную: 8х8 16х16 ...

Для просто узнаваемости даже достаточно из соседок выбрать максимальную. Цвета не сохранятся, но перпады контрастов отрисуют узнаваемый образ. Правда, я думаю, на тех снимках, где есть полутени от освещения, с мультиками может не прокатить. Да у меня и узнаваемый пример есть для 8х8. Если мня не погонят с форума, могу приложить, я заранее все персональные данные на рисунке отсёк. Ну что?
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089250
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное твой сеточный метод - это моя "мутация" в ГА
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089251
exp98
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он не мой, он очевидный из простых. Вот сделал для снежного бугра, что был выше. 8х8, для монохрома.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089966
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит так. Где я застрял.

Есть 2 библиотеки. Jenetic и JGAP. Они - в состоянии решить мою задачу. Проблема - как всегда
в мелочах. А именно в следующем.

1) Мой искомый график == полилиния. С координатами вида (x1,y1),....(xn,yn).
2) Полилиния == Хромосома в терминилогии ГА. Ген - координата или цвет.
3) Фитнесс - функция == близость полилинии к исходному графику. А именно standard deviation.
4) Мутация. Здесь я завис. Мутацией может быть случайное смещение любой из координат в любую
сторону. А также случайное изменение цвета (яркость-насыщщеность-тон) в цветовой модели YUV.
Почему YUV лучше чем RGB в данной задаче - он лучше поддается человеческому визуальному восприятию
изменений. И я могу задать скажем мутацию в цветовом тоне в 10% а в яркости в 5%. За 1 шаг. В модели
RGB это было-бы невозможно.
Вобщем с мутацией сложно. +Цветовой тон завернут в кольцо.
Этим тоже можно воспользоватся в мутациях чтобы не было мертвых зон или таких областей в измерениях
где есть искажение распределения.

5) Крооссовером - или смешиванием хромосом-полилиний может быть просто заимстввание координат (или цветов).
Что именно или как - обобщенные библиотеки на которые я ссылаюсь просто умалчивают. В их
учебных tutorials они оперируют либо списком double / int / boolean а мне нужно более сложные
и более комплексные типы. Это самый сложный пункт по которому я ищу совета.

6) Поврежденные или запрещенные комбинации - это например когда x(n) > x(n + 1). На графике
это перекрученные 2 точки. Такого не бывает и я пока не знаю что с тамими делать? Делать их фитнесс
равным нулю ? Может быть. Подтвердите кто знает ГА.

7) Прочие вопросы. Как быстро сходится? Сколько ждать эпох? Итераций? Какой размер популяции?
Где можно срезать поворот? Подкинуть хромосому близкую к изначальному графику? Как близко?

8) Технические вопросы. Jenetic - полее новый и более продвинутый. Набит генериками. Но
не прост в осознании. JGAP - более старый. Но я пока не осилил реализовать мою полилинию ни там не там.

Линки на ресурсы:

Jenetic - https://jenetics.io/manual/manual-6.2.0.pdf
JGAP - https://sourceforge.net/projects/jgap/

Не будучи специалистом в ГА я просто надеюсь что эти библиотеки помогут решить задачу элегантно.
С "налёта и с нахрапа" не получилось. Буду рад вашим советам.

Линки на документы я чуть позже приаттачу если интересно. Хотя докумнетация по Jenetic достаточно хороша
и как теория.

2 Модераторы - прошу всё таки перенести этот топик в Java, поскольку я буду ссылаться на Java-specific
библиотечки. Спасибо.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089967
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Форк от другого топика Определить основной цвет фона.

Даны 3 серии чисел. По сути это цвета (RGB) одномерной картинки. Необходимо найти точки кусочно-линейной интерполяции
при условии что самих точек будет не много. Например не более 10 штук. Критерий - ... ну минимизация среднего кв.
отклонения.
Как-то это не производит впечатление удачного решения поставленной задачи.
Для сегментации обычно другие алгоритмы используются - кластеризация, анализ гистограмм...
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089968
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То всё - узкие задачи. Не особо интересно.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089969
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
.... Критерий - ... ну минимизация среднего кв. отклонения....

Ну так и берем метод наименьших квадратов =)
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089970
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Он не описывает получение поли-линии.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089972
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Он не описывает получение поли-линии.
Как раз и описывает.
Может в вики это размыто написано
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40089998
Иван FXS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Необходимо найти точки кусочно-линейной интерполяции
при условии что самих точек будет не много. Например не более 10 штук.


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

Модератор: Тема перенесена из форума "Программирование".
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090021
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это внешний параметр (N). Я его задаю. Если задам 2 точки - будет регрессия всей функции
как предложил один господин выше.

Если точек больше - то алгоритм поиска приближения становится неоднозначным. Будет много
способов как расставить промежуточные точки. Линейная регрессия-же однозначна.

Я допускаю что мой метод не имеет единого
решения. Решений может быть бесконечное множество. Или решений не будет, если допуск
отклонения слишком мал и 10 точек недостаточно.

Итого.

Input:
Код: java
1.
2.
3.
N = 10
Standard Deviation = 1.0; //  (подбирается экспериментом)
F = [0.0029, 0.0027..... ] 



Output:
Код: java
1.
Polyline = [ (0.0, 0.002), (33.0, 0.002) ...... ]
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090068
mayton, мне кажется я уже писал об этом, но повторюсь - по-моему это неправильно называть интерполяцией. В моем понимании интерполяция находит точки между двумя известными точками. А ты же хочешь и известные точки заменить на что-то другое. В моем словаре это называется сглаживанием. Возможно если погуглить это как сглаживание, то и вариантов больше найдется.

И судя по твоем рисунку задача сводится к нахождению пиков:
1. Рисуем отрезок от начала пика до вершины
2. Рисует отрезок от вершины к окончанию пика
3. Рисуем отрезок до начала след пика

И если это так, то всю задачу можно переформулировать как:
1. Сгладить сигнал (чем больше сгладили - тем меньше пиков найдем)
2. Построить отрезки между вершинами и границами пиков

Не уверен правда что это облегчает тебе задачу, потому как нахождение пиков - это тоже не просто и опять же есть много вариантов :) Но если этот вариант подходит, то могу подсказать парочку алгоритмов которые использую в своей сфере.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090126
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да. Я думал про ФНЧ как про способ генерации первого приближения для этих точек.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090133
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

Т.е. нужно что-то вроде этого ?
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090211
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квадратные и кубические кривые тоже не решаеют моей проблемы. Т.к. рендеринг
изображения я буду делать все равно через градиенты. А это - линейные зависимости.

Тоесть любого вида кривые могут помочь мне сделать первые шаги алгоритма. А потом все
равно надо на этих кривых указать мои искомые 10 точек.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090642
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот удачный вариант. Кот сидит на фоне имеющем вид горизона.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090645
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справа - оригинальное изображение. Слева я сделал последовательность 10 Rectangles и залил их градиентом
с фиксированным шагом. Здесь не было никаких аппроксимаций и не было претензий на численные методы
или генетический поиск удачной комбинации прямоугольников.

Но даже здесь видно насколько близко к оригиналу 10 плиток транслируют образ исходной фотографии.

Вот эти градиенты в текстовом представлении.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
(x,y,color) = (0,0,#878377)
(x,y,color) = (0,108,#868475)
(x,y,color) = (0,216,#858273)
(x,y,color) = (0,324,#7E7B6C)
(x,y,color) = (0,432,#8496AA)
(x,y,color) = (0,540,#BFC7D4)
(x,y,color) = (0,648,#E2D7C3)
(x,y,color) = (0,756,#C8B998)
(x,y,color) = (0,864,#F2E3CC)
(x,y,color) = (0,972,#E4D9BD)
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090648
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По традиции. Сорц.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
        BufferedImage source = ImageIO.read(new FileInputStream("......."));

        int SRCX = source.getWidth();
        int SRCY = source.getHeight();

        int FHDX = Resolutions.FULL_HD.x;
        int FHDY = Resolutions.FULL_HD.y;

        long t = System.currentTimeMillis();

        BufferedImage dest = new BufferedImage(FHDX, FHDY , BufferedImage.TYPE_INT_RGB);

        Graphics graphics = dest.getGraphics();
        Graphics2D g2 = (Graphics2D) graphics;

        int STEPS = 10;

        int srcStep = SRCY / STEPS;
        int srcY = 0;

        int step = FHDY / STEPS;
        int destY = 0;

        for(int i = 0; i < STEPS; i++) {
            srcY = (i * SRCY) / STEPS;
            destY = (i * FHDY) / STEPS;
            Color color = new Color(source.getRGB(0, srcY));
            GradientPaint blackToGray = new GradientPaint(
                    0, destY,        color,
                    0, destY + step, new Color(source.getRGB(0, Math.min(srcY + srcStep + 1, SRCY - 1))));

            g2.setPaint(blackToGray);
            g2.fill(new Rectangle2D.Double(0, destY, FHDX, step + 1));
            System.out.printf("(x,y,color) = (%d,%d,%s)\n", 0, destY, colorToWeb(color));
        }

        ImageIO.write(dest, "PNG", new FileOutputStream(".........."));

...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090650
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пипеткой были взяты цвета с левого бордюра фотографии с котом. Это - не совсем правильно.
Но в обобщённом варианте у меня будет взвешенное произведение поверхности имеющей
вид горки (Гаусс) на исходно изображение. Это даст больше весов границам и подавит центр.

На второй итерации я попробую поискать аппроксимацию картинки центра набором полу-прозрачных
цветных эллипсов. С учотом того что фон уже существует.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090651
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вот удачный вариант. Кот сидит на фоне имеющем вид горизона.

хм.. Прикольно. Походит на фильтр Размытие примененное к фото.
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090654
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из проблем. Для ГА алгоритма над которым я пока еще думаю будет большая проблема.
Это фитнес-функция для "эллипсов".

Если с градиентами я еще "пропетлял" свернув размерность от декартовой плоскости к вектору
то с эллипсами такой вариант - вообще не прокатит. Мне придется умножать картинку на картинку.
Это и будет фитнесс-величина.

Есть варианты - просто уменьшить разрешение картинки например в 4х или 8х раз для самых ранних
популяций хромосом но в самых последних решающих итерациях мне все равно придется
умножать FULL-HD (в пикселах) на такой-же эталон. Я вот думаю что если я развалю
картинку на 3 вектора типа

Код: java
1.
2.
3.
double[] r;
double[] g;
double[] b;


или даже проще на один вектор вещественных значений и попробую воспользоваться модной векторизацией JVM
то тогда есть шанс перенести тяжелые расчеты из JVM-кода в нативный который будет более приспособлен для этого.

Василий анонсировал нам векторизацию в последних релизах JDK но как ее активировать и как ей
воспользоваться - ХЗ.

PetroNotC Sharp - ты слышал что нибудь про реализацию векторизации в JVM ?
...
Рейтинг: 0 / 0
Кусочно линейная интерполяция с ограничениями
    #40090661
Я пробовал векторное API на своем проекте, очень надеялся что будет летать, но.. никакого прироста не было :) Видать автовекторизация в моем случае и так хорошо срабатывала.

Как вариант еще переход на float вместо double (если это допустимо) может ускорить работу.
...
Рейтинг: 0 / 0
25 сообщений из 65, страница 2 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Кусочно линейная интерполяция с ограничениями
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]