Возможно, это немного странный вопрос, но позвольте мне дать вам краткое объяснение истории вопроса перед моими фактическими вопросами:
Атомно-силовая микроскопия (АСМ) - это метод, который, вкратце (и насколько мне известно), позволяет исследователям сканировать области на микро- и наноразмерном уровне. Он работает путем «сканирования» области с помощью своего рода зонда. Мне сложно объяснить еще кое-что, поскольку я не понимаю этого по-настоящему. Что я действительно знаю, и что вызвало мое любопытство, так это то, что в результате получается «сетка» значений «высоты» (матрица, скажем, значений 512x512, описывающая высоту зонда в этой точке).
Затем я подумал: ну, кроме масштаба, это на самом деле цифровая модель рельефа! И это означает, что если мне удастся создать файл DEM, как это понимают ГИС-инструменты, я смогу применить к нему ГИС-анализ!
Как бы то ни было, моя другая работа в лаборатории, где есть АСМ-машина, и использует ее в одном из своих проектов. Я получил от нее несколько файлов сканирования, и мне удалось, используя Python (struct и numpy), проанализировать эти двоичные файлы, и теперь у меня есть пустой массив размером 512x512, заполненный значениями int16.
То, что я планирую дальше, и в чем мне нужна некоторая помощь, это «отображение на правильную матрицу высот». У меня есть некоторые знания о DEMS, но когда дело доходит до их фактического поколения, я совершенно новый.
Я думаю, что мне нужно как-то привязать мои данные, и для этого мне нужна пользовательская (плоская) система координат. Я предполагаю, что моя система координат будет использовать микро- или нанометры в качестве единиц измерения. Тогда нужно просто определить размер области, отсканированной с помощью AFM (я полагаю, это где-то в двоичном файле, предположим, что это известно).
обновление : у меня также есть несколько сканов в разных разрешениях, но одной и той же области. Например, у меня есть эта информация о двух сканированиях:
увеличенное изображение:
Scan Size: 51443.5 nm
X Offset: 0 nm
Y Offset: 0 nm
уменьшенное (детальное) изображение:
Scan Size: 5907.44 nm
X Offset: 8776.47 nm
Y Offset: 1486.78 nm
Я имею в виду, что моя пользовательская система координат должна иметь начало в 0,0, а для большего изображения я могу назначить пикселю 0,0 значение координаты (0,0), а пикселю 512,512 значение координаты (51443.5, 51443.5 ) (Думаю, вы получите картину для других необходимых точек).
Затем большее изображение будет отображать пиксели (0,0) в (8776,47, 1486,78) и (512,512) в (8776,47 + 5907,44, 1486,78 + 5907,44)
Первый вопрос : как мне создать proj4 def для такой системы координат? То есть: как я могу назначить эти «координаты реального мира» моей пользовательской системе координат (или, если я последую совету Уубера и использую локальную систему координат и лгу о единицах (т.е. рассматриваю мои нанометры как километры)
Затем я должен перенести свой массив 2-мерного массива в формат файлов с географической привязкой DEM. Я думал об использовании GDAL (или, скорее, привязки Python).
Второй вопрос : как мне создать DEM с географической привязкой из «произвольных» данных, таких как мои? Желательно в Python и с использованием библиотек с открытым исходным кодом.
Остальное должно быть достаточно легким делом, просто вопрос использования правильных инструментов анализа. Проблема в том, что эта задача обусловлена моим собственным любопытством, поэтому я не совсем уверен, что мне на самом деле нужно делать с наноразмерной ЦМР. Это напрашивается на
Третий вопрос : что делать с наноразмерной ЦМР? Какого рода анализ может быть выполнен, каковы подходящие инструменты для анализа матрицы высот и, наконец: возможно ли сделать карту с отмывками и контурными линиями из этих данных? :)
Я приветствую все предложения и указания, но имейте в виду, что я ищу бесплатные альтернативы, так как это строго основанный на хобби проект без бюджета или финансирования (и у меня нет доступа к любым лицензированным ГИС-приложениям). Кроме того, я знаю, что Bruker, компания, которая продает эти машины AFM, поставляет некоторое программное обеспечение, но использовать его было бы неинтересно.
источник
Ответы:
Ну, похоже, я решил проблемы 1 и 2, по крайней мере. Полный исходный код на github , но некоторые пояснения здесь:
Для пользовательского CRS я решил (согласно предложению Whubers) «обмануть» и использовать счетчики в качестве единицы измерения. Я нашел «локальные crs» на apatialreference.org ( SR-ORG: 6707 ):
Используя Python и GDAL, это довольно легко прочитать:
Кроме того, написание DEM с помощью GDAL было на самом деле довольно простым (я закончил с однополосным геотиффом). Строка parser.read_layer (0) возвращает мою ранее описанную матрицу 512x512.
Самая трикотажная часть заключалась в том, чтобы выяснить, как правильно «привязать» мой файл, в итоге я использовал SetGeoTransform , получив параметры следующим образом:
Эта последняя часть, пожалуй, та, в которой я больше всего не уверен, что я действительно искал, это что-то вроде строки * gdal_transform -ullr *, но я не мог найти способ сделать это программно.
Я могу открыть свой GeoTIFF в Qgis и просмотреть его (и визуально сравнивая его с результатом программы Bruker, он выглядит правильно), но я на самом деле не ответил на мой вопрос 3; что делать с этими данными. Итак, я открыт для предложений!
источник