симулятор фрактального микроскопа - PullRequest
1 голос
/ 09 марта 2011

Я выполнил работу над программным обеспечением, используемым для управления аппаратными средствами обработки изображений, такими как микроскопы, на которые иногда трудно получить время. Это означает, что трудно протестировать новые / другие алгоритмы, которые требуют доступа к инструменту. Я хотел бы создать синтетический инструмент, который можно было бы использовать для некоторых из этих целей тестирования, и я подумывал об использовании какого-то рода фрактальных изображений для создания синтетических изображений. Ключевым моментом будет способность генерировать объекты с разными «увеличениями» и местоположениями каким-то детерминированным способом. Это связано с тем, что некоторым из тестируемых алгоритмов может потребоваться панорамирование / масштабирование и перемещение ранее отображенных областей. На эти базовые изображения я могу затем применить любые «дефекты» инструмента (фокус, шум, насыщенность и т. Д.).

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

  1. Быстро выполняйте рендеринг новых областей изображения.
  2. Достаточно широкое покрытие с «характеристиками» в максимально возможном количестве мест и масштабов.
  3. Быть детерминированным (но инициализированным из случайных параметров запуска).
  4. Возможность настройки, чтобы изображения выглядели как настоящие.

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

До сих пор я думал об использовании чего-то вроде мандельброта, но с произвольным смещением / вращением / масштабированием и объединением двух или более фрактальных наборов, чтобы получить более полное покрытие «объектов».

Я также видел изображения алгоритмов фрактального пламени, и они, кажется, генерируют изображения, которые могут быть полезны (и приятно смотреть).

Наконец, я подумал об использовании какого-то запуска симуляции приостановленных частиц для создания изображений, более похожих на ячейки (моя текущая цель визуализации), но я не уверен, что этот подход можно использовать для работы с другие требования.

Edit: @Джеффри - Похоже, что какое-то поколение ландшафтов могло бы стать идеей, если я полностью контролирую PSRNG. Возможно, я могу использовать некоторые сохраненные начальные начальные числа + x position + y position для генерации моих случайных чисел? Но тогда я не уверен, как последовательно генерировать ландшафты по масштабам, за исключением, как вы упомянули, создания базового ландшафта в масштабах курса и при определенных заранее определенных «увеличениях» добавлять новые детерминированные псевдослучайные вариации к этой базе , Я также должен был бы быть осторожным с тем, когда генерировать следующий уровень ландшафта, так как, если я слишком агрессивен, мне придется генерировать и интегрировать результаты соответствующим образом для отображения на более грубом уровне ... Вот почему я изначально склонялся к более «традиционному» фракталу, поскольку эта интеграция из более тонких шкал будет обрабатываться более неявно (я думаю).

1 Ответ

0 голосов
/ 09 марта 2011

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

Эти проблемы не являются непреодолимыми.

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

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

На некотором уровнеПри увеличении случайные значения переходят от плотности типов частиц к расположению частиц.Тогда для каждой частицы есть свои особенности.Затем функции на этих функциях.

Хотя произвольная прокрутка влево / вправо и вверх / вниз будет желательна, изображение при всех уровнях увеличения выше текущей сцены нужно будет вычислять каждый раз, когда кадр смещается, чтобы обеспечитьчто все необходимые функции включены.Таким образом, изображение можно прокручивать из одной ячейки в другую без потери постоянства.Частичное моделирование может использоваться для обеспечения того, чтобы ячейки или элементы ячеек не перекрывались.Это можно сделать повторяющимся, детерминированным способом.

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

Этот ответ несколько беспорядочный и, вероятно, сбивает с толку, но лучше всего объяснить это прямо сейчас.Надеюсь, это поможет!

...