Главная страница Visual 2000 · Общий список статей
Пакет Surfer — обработка и визуализация двумерных функцийАндрей Колесов, Ольга Павлова
© 1999, Андрей Колесов, Ольга Павлова
Авторский вариант. Статья была опубликована c незначительной
литературной правкой в журнале "КомпьютерПресс" № 2/99 (компакт-диск).
Загрузить все рисунки, прилагаемые
к статье (архивный файл — 268 Кб)
Версия Surfer 5.0...
А. Построение цифровой модели поверхности
Б. Вспомогательные операции с поверхностями
В. Визуализация изображений поверхности
Макросредства управления пакетом
Новшества Surfer 6.0
Версия Surfer 5.0 для Windows 3.x была выпущена в 1994 г. Год спустя, одновременно с выходом Windows 95, вышел пакет Surfer 6.0, который был представлен двумя вариантами: 32-разрядным для работы в среде Windows NT/95 и 16-разрядным для Windows 3.1. При установке пакета пользователь может выбрать нужную версию программы сам или доверить это инсталляционной программе, которая определит конфигурацию системы и сделает выбор версии автоматически. Описание пакета мы построим таким образом: расскажем сначала о возможностях версии 5.0, а потом — о новшествах Surfer 6.0.
Основным назначением Surfer является обработка и визуализация двумерных наборов данных, описываемых функцией типа z=f(x,y). Логику работы с пакетом можно представить в виде трех основных функциональных блоков:
а) построение цифровой модели поверхности; б) вспомогательные операции с цифровыми моделями поверхности; в) визуализация поверхности.
А. Построение цифровой модели поверхности
При всей эффектности графической визуализации данных изюминкой подобных пакетов, безусловно, является реализованный в них математический аппарат. Дело в том, что не получив ясного ответа на вопрос: "Какой метод заложен в основе преобразования данных и где можно увидеть оценку достоверности всех этих преобразований?", пользователь (в данном случае, скорее всего, научный работник), возможно, уже не будет интересоваться всеми остальными достоинствами программы.
Цифровая модель поверхности традиционно представляется в виде значений в узлах прямоугольной регулярной сетки, дискретность которой определяется в зависимости от конкретной решаемой задачи. Для хранения таких значений Surfer использует собственные файлы типа GRD (двоичного или текстового формата), которые уже давно стали своеобразным стандартом для пакетов математического моделирования.
В принципе возможны три варианта получения значений в узлах сетки, все они реализованы в пакете:
Кроме того, разумеется, можно использовать готовую цифровую модель поверхности, полученную пользователем, к примеру, в результате численного моделирования (это достаточно частый вариант использования пакета Surfer в качестве пост-процессора).
Первый вариант получения сеточной модели чаще всего встречается в практических задачах и именно алгоритмы интерполяции двумерных функций при переходе от нерегулярной сетки к регулярной являются "изюминкой" пакета.
Дело в том, что процедура перехода от значений в дискретных точках к поверхности является нетривиальной и неоднозначной, для различных задач и типов данных требуются разные алгоритмы (вернее, не "требуются", а "лучше подходят", т.к. на 100%, как правило, ни один не годится). Таким образом, эффективность программы интерполяции двумерных функций (это относится и к проблеме одномерных функций, но для двумерных все гораздо сложнее и разнообразнее) определяется следующими элементами:
Пакет Surfer 5.0 предлагает своим пользователям семь алгоритмов интерполяции: Крикинг (Kriging), Инверсные Расстояния (Inverse Distance), Минимизация Кривизны (Minimum Curvature), Радиальные Базовые Функции (Radial Basis Functions), Полиномиальная Регрессия (Polynomial Regression), Метод Шепарда (Shepard's Method, представляющий собой комбинацию метода Инверсных расстояний со сплайнами) и Триангуляция (Triangulation). Расчет регулярной сетки теперь может выполняться для файлов наборов данных X,Y,Z любого размера, а сама сетка может иметь размеры 10000*10000 узлов.
Увеличение числа методов интерполяции позволяет значительно расширить круг решаемых задач. В частности, метод Триангуляции может быть использован для построения поверхности по точным значениям исходных данных (например, поверхность земли по данным геодезической съемки), а алгоритм Полиномиальной Регрессии — для анализа тренда поверхности.
При этом обеспечены широкие возможности по управлению методами интерполяции со стороны пользователя. В частности, наиболее популярный в обработке экспериментальных данных геостатистический метод Крикинга теперь включает возможность применения различных моделей вариограмм, использования разновидности алгоритма со сносом, а также учета анизотропии. При расчете поверхности и ее изображения можно также задавать границу территории произвольной конфигурации (рис. 2).
Кроме того, имеется встроенный графический редактор для ввода и коррекции значений данных сеточной области, при этом пользователь сразу видит результаты своих действий в виде изменения карты изолиний (рис. 3). Для целого класса задач (особенно связанных с описанием природных данных), которые, как правило, невозможно описать точной математической моделью, эта функция является часто просто необходимой.
Ввод данных выполняется из файлов форматов [.DAT] (Golden Software Data), [.SLK] (Microsoft SYLK), [.BNA] (Atlas Boundary) или простого текстового ASCII файла, а также из электронных таблиц Excel [.XLS] и Lotus [.WK1, .WKS]. Исходная информация может также вводится или редактироваться с помощью встроенной электронной таблицы пакета, при этом возможны дополнительные операции с данными, например сортировка, а также преобразование чисел с помощью задаваемых пользователем уравнений.
Б. Вспомогательные операции с поверхностями
В Surfer для Windows реализован большой набор дополнительных средств преобразования поверхностей и различных операций с ними:
Оценку качества интерполяции можно произвести с помощью статистической оценки отклонений исходных точечных значений от результирующей поверхности. Кроме того, для любого подмножества данных можно произвести статистические расчеты или математические преобразования, в том числе с использованием функциональных выражений, задаваемых пользователем.
В. Визуализация изображений поверхности
Поверхность можно графически представить в двух вариантах: в виде карты изолиний или трехмерного изображения поверхности. При этом в основе работы Surfer лежат следующие принципы их построения:
Использование многооконного интерфейса позволяет выбрать наиболее удобный режим работы. В частности, можно одновременно видеть числовые данные в виде электронной таблицы, карту, построенную на базе этих данных, и справочную информацию из текстового файла (рис. 4).
В Surfer 5.0 в качестве основных элементов изображения используются следующие типы карт:
С помощью разнообразных вариантов наложения этих основных видов карт, их различного размещения на одной странице можно получить самые различные варианты представления сложных объектов и процессов. В частности, можно очень просто получить разнообразные варианты комплексных карт с совмещенным изображением распределения сразу нескольких параметров (рис. 8). Все типы карт пользователь может отредактировать с помощью встроенных инструментов рисования самого Surfer.
Очень эффектным и удобным для анализа является также представление нескольких карт виде объемной "этажерки". Причем это может быть как различное представление одних наборов данных, например, трехмерное изображение плюс цветная карта изолиний (рис. 9), так и серия разных наборов, например, площадное распределение одного параметра на разные моменты времени или нескольких различных параметров (рис. 10).
Все эти возможности представления изображений могут быть очень полезны при сравнительном анализе влияния различных методов интерполяции или их отдельных параметров на вид результирующей поверхности (рис. 11).
Отдельно следует затронуть проблему использования русских шрифтов. Дело том, что шрифты SYM, поставляемые с пакетом, естественно, не русифицированы, поэтому приходится пользоваться шрифтами Windows типа TrueType. Но для некоторых режимов вывода изображений они не подходят, например, при выводе текста под углом символы иногда искажаются до неузнаваемости. В этом случае лучше применять векторные шрифты SYM с начертанием одинарной линией (они всегда хорошо видны), а в готовом виде имеются только латинские. Однако существует достаточно простое решение этой проблемы.
В версии Surfer для DOS имелась специальная утилита ALTERSYM для создания собственных наборов шрифтов SYM (к сожалению, она исчезла в версии для Windows, поэтому можно воспользоваться DOS-овской версией). Но она позволяет создавать и редактировать только основной набор символов (ASCII-коды 32-127). Мы в свое время решили эту проблему для версии DOS следующим образом: написали утилиту, которая создает полный набор символов (1-255) из файлов-заготовок, созданных программой ALTERSYM, с которым прекрасно работают модули вывода VIEW и PLOT. Этот подход вполне годится и для Windows-версии Surfer.
Полученные графические изображения можно вывести на любое печатающее устройство, поддерживаемое Windows, или выдать в файл формата AutoCAD [.DXF], Windows Metafile [.WMF], Windows Clipboard [.CLP], а также HP Graphics Language [.HPGL] и Encapsulated PostScript [.EPS]. Двухсторонний обмен данными и графикой с другими Windows-приложениями может выполняться также через Буфер Обмена Windows. Кроме того, графические изображения, подготовленные в Surfer, можно экспортировать в пакет MapViewer, наложить на него карту территории и получить карту распределения этого параметра на конкретной территории (рис. 12 и 13).
Макросредства управления пакетом
В Surfer 5.0, созданном еще в 1994 г., почти одновременно с офисными пакетами Microsoft Office 4.0 была реализована объектная компонентная модель на основе поддержки механизма OLE 2.0 Automation (то, что сегодня называется ActiveX). Это обеспечивает возможность интегрированного применения Surfer в качестве ActiveX-сервера в комплексных системах обработки данных и моделирования.
На любом языке, который также поддерживает этот механизм (например Visual Basic, C++ или Visual Basic for Applications), можно написать управляющий макрофайл для Surfer. В частности, с помощью набора макрофайлов можно выполнять в автоматическом режиме некоторые часто повторяющиеся задания. Или же такой файл может формироваться в процессе выполнения какой-либо прикладной расчетной программы для автоматической обработки и визуализации данных.
Например, следующая функция, написанная на VB, выполняет создание карты изолиний и вставку ее изображения в электронную таблицу с именем "Sheet1":
Function MakeMap()
  ' определение переменной Surf в качестве объекта
  Dim Surf as Object
  ' установка соответствия между переменной Surf
  ' и программой Surfer
  Set Surf = CreatObject("Surfer.App")
  GrdFile$ = "c:\winsurf\demogrid.grd" ' имя входного GRD-файла
  ' выполнение макрокоманд пакетом Surfer
  Surf.MapCountour(GrdFile$) ' построить карту изолиний
  Surf.Select            
                
' выделить изображение
  Surf.EditCopy            
            ' скопировать выделенное
изображение
                         
                      
' в Буфер Обмена
  ' это уже команда Excel — вставить изображение из
  ' Буфера Обмена в текущую позицию таблицы Sheet1
  Worksheets("Sheet1").Picture.Paste
End Function
Смысл этой процедуры достаточно понятен. Сначала переменная Surf определяется как объект и ей ставится в соответствие пакет Surfer (Surfer.App). Далее идут команды, которые VBA уже интерпретирует как обращение к функциям Surfer (их названия соответствуют командам, которые пользователь выбирает в режиме диалога), выполняющимся через механизм ActiveX.
Кроме того, пакет Surfer имеет собственный макроязык, который фактически является разновидностью VBA и который используется для написания управляющих запросов в специальной программе SG Scripter (файл GSMAC.EXE). Например, с помощью такой простой программы можно реализовать макрокоманду, которая автоматически выполняет построение карт изолиний для одного набора исходных данных, используя все семь методов интерполяции:
' создание объекта Surfer
Set Surf = CreateObject("Surfer.App")
' построение карты каждым методом интерполяции
' для файла исходных данных DEMOGRID.DAT
For Method = 0 to 6
  ' открыть новый документ рисования
  Surf.FileNew()
  ' расчет GRD-файла текущим методом интерполяции
  If Surf.GridData("DEMOGRID.DAT", GridMethod=Method,_
        OutGrid="SAMPLE") = 0 Then End
  ' построение карты изолиний
  If Surf.MapContour("SAMPLE") = 0 Then End
Next
Запуск в автоматическом режиме подобных заданий, которые представлены в виде программы, написанной в GS Scripter, можно выполнить либо из командной строки:
c:\winsurf\gsmac.exe /x task.bas
либо из любого приложения командой SHELL:
SHELL ("c:\winsurf\gsmac.exe /x task.bas")
(ключ /x указывает на необходимость автоматического выполнения программы task.bas).
Программа GS Scripter может также использоваться для управления любыми другими программами, поддерживающими ActiveX (например для работы с MS Office).
Как мы уже говорили, Surfer 6.0 представлен 16-разрядной и 32-разрядной версиями. Но кроме этого появилось несколько полезных функциональных расширений. В первую очередь следует отметить возможность использования еще двух типов карт фоновой основы при построении плоских изображений: Image Map (Карта Изображения) и Shaded Relief Map (Затененная Карта Рельефа).
Встроенные средства рисования Image Map делают процедуру создания цветных карт достаточно простой и быстрой. При этом можно использовать многоцветное заполнение изображений, в том числе с помощью цветовых комбинаций, созданных самим пользователем.
Но особенно впечатляют возможности карты Shaded Relief Map, позволяющий получать непосредственно в среде Surfer изображения типа высококачественных фотографий (рис. 14), которые можно применять как для совместного использования с картами изолиний, так и автономно. При этом пользователь может управлять всеми параметрами, необходимыми для создания наиболее выразительных изображений, включая местоположение источника света, относительный градиент наклона, тип затенения и цвет. У пользователя пакета появилось также больше возможностей по визуализации данных и компоновке различных изображений на одном экране (рис. 15 и 16).
Расширен набор вспомогательных операций при обработке цифровой поверхности. Используя новые функции Grid Calculus (Обработка Регулярной Сетки), можно определять наклон, кривизну и линию горизонта обзора в конкретной точке поверхности, а также вычислять первые и вторые производные для функций Фурье и спектрального анализа. А дополнительные средства Grid Utilities позволяют преобразовывать, смещать, масштабировать, вращать и зеркально отображать данные в GRD-файлах (формат для хранения значений в узлах регулярной сетки). После этого можно сделать любую выборку подмножества набора данных по номерам столбцов и колонок или просто произвольных узлов сетки.
С точки зрения математического аппарата построения поверхности очень важным представляется реализация еще одного алгоритма интерполяции — Ближайший Сосед (Nearest Neighbor), а также трех уровней вложения вариограмм, что позволяет создавать более 500 результирующих комбинаций.
Созданные ранее изображения на основе различных типов карт (Contour Map, Shaded Relief Map, Post Map, Image Map) можно использовать в качестве шаблона путем подстановки в уже существующие карты нового GRD-файла. Кроме того, теперь, объединив сначала в одно изображение несколько слоев различных карт, можно разделить их потом на исходные элементы и переделать на основе новых данных.
Из чисто сервисных функций следует выделить возможность занесения данных оцифровки линий границ и произвольных точек с экрана прямо в ASCII-файл, а также автоматическое создание легенды для различных типов точек карты Post Map. В качестве цифровой модели поверхности теперь можно импортировать файлы формата Digital Elevation Model (DEM) прямо из Internet (или любого другого источника информации). И наконец, новые форматы экспорта данных позволяют сохранять изображения карт практически во все растровых форматах (PCX, GIF, TIF, BMP, TGA, JPG и многие другие).