Имя: Пароль:
IT
 
Экстремум двумерной функции
,
0 megabax
 
16.09.16
10:12
Добрый день. Подскажите пожалуйста алгоритм поиска экстремума двумерной функции (с двумя аргументами, например, f(x,y)) с дискретным шагом аргументов (аргументы координаты пикселов), таким образом, чтобы этот экстремум был единственный в окне заданного размера.
1 Irbis
 
16.09.16
10:14
(0) Вышку прогуливал?
2 RomanYS
 
16.09.16
10:21
Тупой перебор не предлагать? Что за функция?
3 jsmith
 
16.09.16
10:22
Найти частные производные первого порядка
Решить систему уравнений (частные первого порядка = 0). Определить стационарную точку
Вычислить частные производные второго порядка в стационарной точке. Если <> 0, то стационарная точка - экстремум. Если > 0, то минимум, сели < 0, то максимум.
4 megabax
 
16.09.16
10:29
(2) Результат свертки изображения с фильтром гаусса и корреляционной функцией, функция нормированная, значения от -1 до 1.
Пробовал искать экстремум тупым перебором с использованием скользящего окна, но у меня все равно получаться куча экстремумов рядом.
Вот функция (зеленый +1, красный -1)
https://yadi.sk/i/G0iVdgoZvEHS7
Вот результат:
https://yadi.sk/i/mZUYQwYhvEHXz
Вот алгоритм:
       private void tsmiFeatures_Click(object sender, EventArgs e)
        {
            double[,] matrix = Preprocessing.create_gauss(7, 3);
            double[,] skl = core.data.rgb_frame.get_gray().singularities_skeleton(matrix, 7);

            RGBFrame res = new RGBFrame(core.data.rgb_frame.width, core.data.rgb_frame.height);

            int delta = 7;
            int count = 0;
            bool[,] matr=new bool[core.data.rgb_frame.width, core.data.rgb_frame.height];
            for (int i = delta; i < core.data.rgb_frame.width-delta; i++)
            {
                for (int j = delta; j < core.data.rgb_frame.height-delta; j++)
                {
                    int xmax=-1;
                    int ymax = -1;
                    int xmin = -1;
                    int ymin = -1;
                    double max = -2;
                    double min = 2;
                    for (int x = i - delta; x <= i + delta; x++)
                    {
                        for (int y = j - delta; y <= j + delta; y++)
                        {
                            double light = skl[x, y];
                            if (light > max && light>=0 )
                            {
                                max = light;
                                xmax = x;
                                ymax = y;
                            }
                            if (light < min && light < 0 )
                            {
                                min = light;
                                xmin = x;
                                ymin = y;

                            }
                        }
                    }

                    if (max > -1.5 && !matr[xmax, ymax])
                    {
                        res.matrix[xmax, ymax] = new RGBPoint(0, Convert.ToInt32(max * 255.0), 0);
                        count++;
                        matr[xmax, ymax] = true;
                    }
                    if (min < 1.5 && !matr[xmin, ymin])
                    {
                        res.matrix[xmin, ymin] = new RGBPoint(Convert.ToInt32(min * -255.0), 0, 0);
                        count++;
                        matr[xmin, ymin] = true;
                    }
                }

            }
            MessageBox.Show(count.ToString());

            res.create_picture();
            pbShow.Image = res.picture;
        }
5 Irbis
 
16.09.16
10:30
(3)+ Можешь ещё прочитать про градиент и искать методом истинно научного тыка, смещаясь в направлении наибольшего роста/убывания функции.
6 Loky9
 
16.09.16
10:46
НЧ фильтр по "окну заданного размера"?
7 Йохохо
 
16.09.16
10:47
(4) а ничего что у Вас экстремум размерности 1?
8 varyag
 
16.09.16
10:52
офигеть вы умные посоны
9 megabax
 
16.09.16
10:53
(7) В смысле экстремум размерности 1? Значение функции как раз и одномерное, это аргумент двумерный
10 Йохохо
 
16.09.16
10:54
(9) в смысле попробуй вручную отметить экстремум, это линия
11 megabax
 
16.09.16
10:55
(10) Как линия?
12 Йохохо
 
16.09.16
10:55
или хз, напиши лучше смысл задачи, а не способ решения. по картинке из (4) цель не понятна
13 Йохохо
 
16.09.16
10:56
лейкоциты считаешь на 1с?)
14 megabax
 
16.09.16
11:00
(12) Смысл задачи - найти особые точки на картинке типа такой:
https://yadi.sk/i/kGIh5OLrvEMis
Для этого считаем некую функцию, представляющую собой свертку изображения с гауссианом и корреляцией, которая принимает значения от -1 до +1, получается вот такая красно зеленая картинка, как в (4), а потом каким то макаром надо найти экстремумы в плюсахх и в минусах, это ибудут искомые особые точки. По этим особым будет происходить навигация беспилотного летательного аппарата, то есть по снимкам на камере определять, в какюу сторону он успел улететь и на какое расстояние.
15 Loky9
 
16.09.16
11:03
16 Irbis
 
16.09.16
11:05
(14) Я понимаю основная проблема много локальных экстремумов в заданной области, а нужен один глобальный, и численные методы начинают расходиться?
17 В тылу врага
 
16.09.16
11:06
(14) зачем это все?
18 Loky9
 
16.09.16
11:07
(17) Конкурс у него)
19 megabax
 
16.09.16
11:11
(16) Проблема в том, что экстремумы совсем рядом, то есть в результате обработки должны получиться раскиданные по всей картинке точки, а не пятна, как получилось у меня.
(17) Магистерская диссертация
20 Loky9
 
16.09.16
11:13
http://cyberleninka.ru/article/n/obnurazhenie-i-soprovozhdenie-dvizhuschihsya-obektov-metodom-sopostavleniya-blokov
И можно по MPEG что-нибудь ещё.
(19) До чего дожили.
21 Хоменко Валерий
 
16.09.16
11:15
Сколько лет назад это было... Метод скользящего допуска в книжке Химмельблау.
22 Irbis
 
16.09.16
11:18
(19) А я как написал? Придётся сужать область поиска. При попадании в окрестность локального экстремума числовой метод начинает сходиться.
23 megabax
 
16.09.16
11:22
(15) (20) Спасибо за ссылки, почитаю.
В общем спасибо всем, оказывается ларчик просто открывался - надо проверять, совпадает ли найденный экстремум в центром скользящего окна.
Закон Брукера: Даже маленькая практика стоит большой теории.