|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.06.2009, 22:53 | #1 |
New Delphi Coder
Форумчанин Подтвердите свой е-майл
Регистрация: 20.07.2008
Сообщений: 874
|
Алгоритм подсчета числа вершин синусоиды?
Вот например у меня есть такой график, подскажите хотя бы названия алгоритмов с помощью которых можно привести его к сглаженному виду(если надо для подсчета вершин) А также отфильтровать мини возвышенности, а учесть только крупные вершины? Заранее благодарен.
Страх это слабость и потому, кто испугался уже побежден.
|
07.06.2009, 13:18 | #2 |
New Delphi Coder
Форумчанин Подтвердите свой е-майл
Регистрация: 20.07.2008
Сообщений: 874
|
Есть хотя бы какие-нибудь советы или предположения?
Страх это слабость и потому, кто испугался уже побежден.
|
07.06.2009, 13:49 | #3 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Если у тебя только рисунок то по цвету. Т.е. проходи по верхнему ряду пикселей и ищем точки графика. (предпологается, что мы знаем его цвет). Затем по следующему ряду. и так далее. Если встречаем точку, значит она вершина, при условии, что ее координата (x,y) а точка с координатами (x,y-1) не является точкой грачика (не забываем, о том, что ось OY направленна вниз, а не вверх!). (или наоборот, (x,y+1) если это точка находится внизу).
Убедились, что это вершина? запомминаем ее коордианту. (Думаю,ч то важна будет только коордианата по y). Как только прошли весь график, сверху донизу, смотрим полученнные результаты. Вычисляем среднее значение. Все вершины, которые сильно (насколько сильно, решать вам) отличаются от среднего значения отбрасываем. Подсчитываем кол-во неотброшенных вершин. P.S. Никогда не пытался ничего подобного делать. Не уверен, что предпложенный мною способ является хорошим, но я бы именно так попытался решить эту задачу.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
07.06.2009, 14:23 | #4 |
New Delphi Coder
Форумчанин Подтвердите свой е-майл
Регистрация: 20.07.2008
Сообщений: 874
|
ROD, нет у меня не рисунок, а точки то есть значения x и y а по этим данным построен рисунок. Я думал считать? что вершина это переход с возрастания на убывания, а впадина наоборот, только вот как убрать весь этот шум с рисунка, то есть не нужные мини вершины? Видимо надо интерполировать то есть все эти зазубринки убрать с помощью проведения средней линии, но как это сделать? Для идеальных вершин алгорим считает нормально, также нормально если при рассчете установить макс амлитуду шума и считать расстояние от вершины до впадины и если оно меньше чем у шума, то не считать как вершину. Но опять же пользователь должен вмешаться, а это не есть хорошо - надо полностью автоматизировать.
Страх это слабость и потому, кто испугался уже побежден.
|
07.06.2009, 15:32 | #5 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
А что вы подразумеваете под ненужными минивершинами? маленькие перепады высоты на верху графика? Если да, то можно попробовать определить на какой области (от x0, до x1) эти вершинки находятся. И усреднить их высоту. А затем смотреть как ведет себя функция в окрестности этой области. Т.е. если при любом x<x0 y<y0 и при любом x>x1 y<y1, то это максимум, если ровно наоборот, то мимнимум.
Вобщем надо определить область, которую можно считать как вершину. и значение функции в ней считать равным среднему значению всех "шумов" Правда судя по графику, там помимо вершин, есть просто точки экстремума.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
07.06.2009, 15:59 | #6 |
New Delphi Coder
Форумчанин Подтвердите свой е-майл
Регистрация: 20.07.2008
Сообщений: 874
|
Да я понимаю под ними маленьки перепады. Но как определить на каком участке они находятся? Ведь они могут быть в любом месте абсолютно.
Это, например переход на первую нижнюю вершину(то есть впадину)
Страх это слабость и потому, кто испугался уже побежден.
|
07.06.2009, 18:22 | #7 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
хм... ну думаю, что их надо сравнить с другими перепадами. Скажем, если у вас точки (0,1)(1,4)(2,3.5)(3,3)(4,1), то весьма вероятно, что точка (2,3.5) и енсть маленький перепадик, т.к. она не сильно отличается от окружающих ее вершин.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс |
07.06.2009, 18:28 | #8 |
New Delphi Coder
Форумчанин Подтвердите свой е-майл
Регистрация: 20.07.2008
Сообщений: 874
|
Можно и так, но это ведь не даст 100% результат исключения ошибки? Вот все таки склоняюсь к режиму интерполяции, чтобы эти маленьки перепадики вообще убрать, но не знаю каким методом лучше интерполировать, насколько это быстро и где бы найти алгоритмы интерполяции.Одно дело когда есть микровершиныотносительно оси графика, но другое, когда эти микровершины на самой возвышенности и вот их мне не удается вычислить точно.(((
Страх это слабость и потому, кто испугался уже побежден.
|
07.06.2009, 18:39 | #9 |
Linux C++ Qt ARM
Старожил
Регистрация: 30.11.2008
Сообщений: 3,030
|
Вот гугл выдал сайт с алгоритмами интерполяций на разных языках http://alglib.sources.ru/interpolation/
А если попробовать так сгладить график: Берем 3 соседние вершины. если средняя больше или равна левой, но меньше или равна правой, при условии, что |x1-x2|<E1 |x2-x3|<E1; (где E1 - некторое максимальное расстояние между двумя рассматриваемыми вершинами) и что бы |y1-y2|<E2 и |y2-y3|<E2, где E2 - максимальный "скачек" который мы будем сглаживать. Т.е. Если скачек слишком маленький или расстояние между точками слишком большое то мы среднюю точку удаляем.
Дилетант широкого профиля.
"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс Последний раз редактировалось ROD; 07.06.2009 в 18:44. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Процедура подсчета суммы | heavenly | Общие вопросы по Java, Java SE, Kotlin | 2 | 17.05.2010 21:09 |
составить программу подсчета числа элементов одномерного массива, превосходящих СРЕДНЕЕ ГЕОМЕТРИЧЕСКОЕ | Fatality | Помощь студентам | 4 | 05.02.2009 07:53 |
Алгоритм перевода числа в hex text. | Ivan_32 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 4 | 02.12.2008 21:36 |
Алгоритм перевода двоичного числа в десятичное и обратно | strab | Общие вопросы Delphi | 5 | 17.06.2008 21:33 |
Помогите с заданием подсчета! | werser | Microsoft Office Excel | 6 | 08.12.2007 18:58 |