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