|   |   | 
| 
 | Экстремум двумерной функции | ☑ | ||
|---|---|---|---|---|
| 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) Спасибо за ссылки, почитаю.
 В общем спасибо всем, оказывается ларчик просто открывался - надо проверять, совпадает ли найденный экстремум в центром скользящего окна. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |