Идентификация пика гистограммы и подгонка Гаусса с минимальной суммой разницы в высоте в c ++ - PullRequest
3 голосов
/ 05 апреля 2011

Я уже задавал подобный вопрос некоторое время назад в следующей теме: предыдущая тема .До сих пор я, к сожалению, не мог полностью решить эту проблему и только работал вокруг.Поскольку трудно включить всю новую информацию в предыдущую ветку, я выкладываю здесь уточненный и расширенный вопрос с отчетливым контекстом и связываю его со старой веткой.

В настоящее время я реализую алгоритм из paper , который извлекает определенные области трехмерного набора данных путем динамической идентификации диапазонов значений в гистограмме наборов данных.В упрощенном виде метод может быть описан следующим образом:

  1. Найти самый высокий пик на гистограмме
  2. Установить гауссиану на пик
  3. Используя диапазон значенийопределяется по гауссианскому среднему значению (µ) +/- отклонение (ϭ), определенные области гистограммы идентифицируются, и воксели (= 3D пиксели) этих областей удаляются из исходной гистограммы.
  4. В результатепредыдущего шага должен быть выявлен новый наивысший пик, на основании которого могут повторяться шаги 1-3.Шаги повторяются до тех пор, пока гистограмма набора данных не станет пустой.

Мои вопросы относятся к шагам 1 и 2 приведенного выше описания, которое описано в документе следующим образом: «Определен самый высокий пик иГауссова кривая соответствует своей форме. Гауссова описывается его средней точкой µ, высотой h и отклонением process. Процесс подгонки сводит к минимуму накопленную разницу в высоте между гистограммой и средней частью гауссовой кривой. Диапазон суммирования ошибок равен µ + /101? " 1

Далее я задам свои вопросы и добавлю свои размышления о них:

  1. Как мне определить эти ячейки общей гистограммыкоторые описывают самый высокий пик?Чтобы идентифицировать его вершину, я просто пробегаю гистограмму и сохраняю индекс корзины с самой высокой частотой.Но как далеко должен простираться пик влево и вправо от самого высокого мусорного ведра.В данный момент я просто иду влево и вправо от самого высокого бина до тех пор, пока следующий бин меньше, чем предыдущий.Однако обычно это очень маленький диапазон, поскольку на гистограмме возникают складки (мини-пики).Я уже думал о сглаживании гистограммы.Но мне придется это делать после каждой итерации, поскольку вычитание вокселей (шаг 3 в приведенном выше описании) может привести к тому, что гистограмма снова будет содержать складки.И меня также беспокоит, что повторное сглаживание искажает результаты.Поэтому я хотел бы спросить, существует ли эффективный способ определения длины пика, который лучше моего нынешнего подхода.Были предложения о моделях смесей и деконволюции в предыдущей теме .Однако являются ли эти методы действительно разумными, если форма гистограммы постоянно меняется после каждой итерации?
  2. Как я могу подогнать кривую Гаусса к идентифицированному пику, чтобы накопленная разница высот между гистограммой и средней частью гауссовминимизировано?В соответствии с первым вопросом из предыдущего потока я подгонял кривую к заданному диапазону столбцов гистограммы, вычисляя их среднее значение и отклонение (надеюсь, это правильно ?!).Но как мне минимизировать накопленную разницу в высоте между гистограммой и средней частью гауссианы из этой точки?

Спасибо за вашу помощь!С уважением Марк

1 Ответ

1 голос
/ 09 апреля 2011

Добавляйте значения гистограммы влево и вправо, пока качество посадки не начнет уменьшаться.

...