Как заполнить «дыры» в нерегулярной разнесенной сетке или массиве с отсутствующими данными? - PullRequest
3 голосов
/ 12 февраля 2011

У кого-нибудь есть прямой пример Delphi по заполнению сетки с использованием Делоне Треугольники или кригинг? Любой метод может заполнить сетку путем «интерполяции».

Что я хочу сделать? У меня есть сетка, похожая на:

22  23  xx  17  19  18 05  
21  xx  xx  xx  17  18 07  
22  24  xx  xx  18  21 20  
30  22  25  xx  22  20 19  
28  xx  23  24  22  20 18  
22  23  xx  17  23  15 08  
21  29  30  22  22  17 09 

, где xx представляют ячейки сетки без данных, а координаты x, y каждой ячейки известен. И треугольники Кригена, и треугольники Делоне могут предоставить «недостающие» точки (которые, конечно, являются вымышленными, но разумными значениями).

Кригинг - это статистический метод для заполнения «отсутствующих» или недоступных данных в сетка с «разумными» значениями. Зачем вам это нужно? Принципиально «очертить» данные. Алгоритмы контурирования (например, CONREC для Delphi http://local.wasp.uwa.edu.au/~pbourke/papers/conrec/index.html) могут создавать контурные данные с регулярными интервалами. Поищите вокруг «kriging» и «Delphi», и вы в конечном итоге увидите проект GEOBLOCK в Source Forge (http://geoblock.sourceforge.net/). Geoblock имеет множество единиц Delphi pas для кригинга, основанных на GSLIB (статистический пакет Fortran, разработанный в Стэнфорде), однако все единицы кригинга / делейни зависят от единиц, на которые есть ссылка в разделе «Использование Delphi». К сожалению, эти «вспомогательные» единицы не публикуются. с остальным исходным кодом. Похоже, что ни один из модулей кригинга не может работать в одиночку или работать без вспомогательных модулей, которые не размещены или, в некоторых случаях, с неопределенными типами данных.

Триангуляция Делоне описана в http://local.wasp.uwa.edu.au/~pbourke/papers/triangulate/index.html. Опубликовано пример Delphi, довольно аккуратный, который генерирует «треугольники». К сожалению, Я понятия не имею, как использовать устройство со статической сеткой. Пример «генерирует» поле данных на лету.

Кто-нибудь заставил любой из этих блоков работать, чтобы заполнить нерегулярную сетку данных? Будем благодарны за любой код или подсказки, как использовать существующий код для создания простой сетки или использовать Делоне для заполнения дыр.

Ответы [ 2 ]

1 голос
/ 28 октября 2013

Код, опубликованный Ричардом Уинстоном на Embarcadero Developer Newwork Code Central с названием

Код триангуляции и контура Делоне

(ID: 29365) демонстрирует процедуры для генерации ограниченного Делонетриангуляции и для построения контурных линий на основе точек данных в произвольных местах. код Ричарда .Эти алгоритмы не манипулируют и не заполняют дыры в сетке.Они предоставляют метод для контурирования произвольных данных и не требуют сетки без пропущенных значений.

enter image description here

Я до сих пор не нашел приемлемый алгоритм кригинга в Паскале для фактического fill-in the holesв сетке.

1 голос
/ 12 февраля 2011

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

Если предположить, что ваша сетка действительно нерегулярна (вы не приводите примеров типичного шаблона координат сетки), то триангуляция помогает только частично. После того, как вы сделали триангуляцию, вы могли бы использовать эту триангуляцию для интерполяции, и есть разные варианты выбора.

Но вы ничего не сказали о том, как вы хотите интерполировать, что вы хотите делать с этой интерполяцией.

Мне кажется, что вы попросили какой-то код, но не ясно, знаете ли вы, какой алгоритм вы хотите. Это действительно вопрос, который вы должны были задать.

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

На самом деле, я думаю, вам нужно потратить еще немного времени на объяснение того, какие свойства вы хотите иметь для этой интерполяции, что вы собираетесь делать с ней и т. Д. Я также думаю, что вам следует прекратить сейчас думать о коде и думать об алгоритмах. Так как вы упомянули статистику, вы должны задать вопрос на https://stats.stackexchange.com/.

...