0

Привязка изображений JPEG

Oleg 6 years ago updated by Stepan (Moderator (RUS)) 9 months ago 38

Добрый день! В наличии имеется изображение в формате JPEG, с привязкой в формате rgf. 

Судя по всему привязка выполнена в другом программном продукте. 

Каким образом можно преобразовать привязку в формат данных ММ? (за исключением повторной ручной привязки)

Answer

+2
Answer

Олег, добрый день!


Для решения вашей задачи был написан небольшой Python скрипт (rgf_to_grf_converter_v_1_0.py), который необходимо запустить в Micromine. В качестве входных данных вы указываете путь к папке, где находятся файлы *.jpg и *.rgf (строка 15 в скрипте), а на выходе вы получите файлы *.grf. Скрипт обрабатывает все файлы в указанной и вложенных папках. Стоит отметить, что файлы *.jpg и *.rgf должны иметь одинаковые имена, иначе появится сообщение об ошибке.


Скрипт работает следующим образом. Сначала скрипт отфильтровывает координаты точек из файла *.rgf и записывает их во временный файл данных Micromine. Затем используется функция Micromine Файл – Изображение – Импорт контрольных точек привязки, в результате которой создается .grf файл. В конце работы скрипта удаляется временный файл Micromine.


Перед запуском скрипта убедитесь, что на компьютере установлен Python, соответствующий версии Micromine:

  • Micromine 2014 – Python 3.3
  • Micromine 2016, 2018 – Python 3.5

Разрядность Python должна соответствовать разрядности Micromine.

Скрипт использует стороннюю библиотеку pillow для работы с изображениями, поэтому ее необходимо установить перед запуском скрипта. Скачайте себе на компьютер один из файлов в зависимости от установленной у вас версии Micromine:


Затем в Проводнике откройте папку, в которую вы скачали файл. Зажав клавишу Shift, нажмите на пустое место окна правой кнопкой мыши, и выберите опцию «Открыть окно команд». Откроется окно командной строки. Введите следующую команду: pip install имя файла. Например, pip install Pillow-5.0.0-cp35-cp35m-win_amd64.whl. Чтобы вставить скопированную команду, воспользуйтесь правой кнопкой мыши. Нажмите Enter. В случае успешной установки появится сообщение «Successfully installed Pillow».

Чтобы запустить скрипт, откройте в Micromine Редактор скриптов через комбинацию клавиш Ctrl+F11 или через меню Написание скриптов - Открыть редактор скриптов. В появившемся окне нажмите на кнопку "Загрузить существующий скрипт" и выберите в проводнике файл скрипта, который необходимо выполнить.


Обращайтесь, если будут вопросы, буду рад помочь!

Олег Николаевич, здравствуйте!

Пришлите пожалуйста примеры файлов (JPEG и rgf), попробуем с помощью скрипта конвертировать в читаемый формат привязки.

Хорошо, отправлю на почту.

Если это план, то самый простой вариант открыть в Global Mapper и пересохранить в любом формате который поддерживает Micromine (tab, map, grf и др.). Если это разрез, то сложнее. 

Алексей Спасибо за совет, там кроме планов очень много разрезов в них в основном проблема, главная. 

Олег, попробуйте открыть файл привязки в блокноте и найти там что-то похожее на это

30048.245615916145
30287.624617419835
-688.60598745996583

Если найдёте, то есть шанс не привязывать разрезы по новой. 

Алексей доброго времени суток. В файле привязки следующая инф. 


triobject=1,1
image file=14.jpg
transmission colour=black
ambient colour=silver
filter colour=
drape method=edit registration points
registration point=ximage=4607, yimage=4411, xdata=17744.855, ydata = 28850.000, zdata=255.000
registration point=ximage=4598, yimage=6070, xdata=17744.855, ydata = 28850.000, zdata=325.000
registration point=ximage=5846, yimage=4413, xdata=17727.937, ydata = 28900.000, zdata=255.000

Самый простой и понятный вариант это формат привязки MapInfo c расширением .tab который поддерживает MM


!table
!version 300
!charset WindowsLatin1

Definition Table
  File "Приложение 1 ГЕОЛОГИЧЕСКИЙ РАЗРЕЗ ПО ЛИНИИ 1-1.jpg"
  Type "RASTER"
  (-165780.2300000000,125572.8500000000)  (6763.62,796.46) Label "Pt 1",
  (-165795.0700000000,124069.5800000000)  (4987.68,787.12) Label "Pt 2",
  (-165824.4600000000,126961.8900000000)  (8408.04,780.74) Label "Pt 3",
  (-165771.0800000000,122443.0600000000)  (3109.91,2729.29) Label "Pt 4",
  (-165802.3100000000,122478.5100000000)  (3111.99,784.05) Label "Pt 5",
  CoordSys NonEarth Units "m"
  Units "m"


Сответственно,первые три столбца (первые скобки) это координаты фактические (xdata=17744.855, ydata = 28850.000, zdata=255.000), а вторые скобки координаты на растре (ximage=4607, yimage=4411)
То есть надо привязать один разрез в ММ и сохранить привзку с расширением .tab, а все остальные разрезы скопировать данные по шаблону. 


Посмотрел ещё раз, всё таки получается .tab это только планы. 

Вот так выглядит .grf

 

1499713.153858632262
-35446.5433741780112
740.48731339740527
0.63930054847627693
0.63547661187659354
0.0039205688605356307
-0.99999227251652612
-0.00028990868133008026
0.0019220003495085654
0.011422069215666159
0.99993291887480584

1363.42 562.56 1499713.7000000000 -45335.2800000000 382.9100000000 1 
2150.31 511.09 1499719.2300000000 -45817.3300000000 415.2400000000 1 
260.08 636.98 1499713.9000000000 -35612.0100000000 335.6200000000 1 
1363.47 2351.66 14713.7000000000 -45335.2800000000 -754.0900000000 1 


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

Ошибки можно попробовать прописать 0 или 1, но как-то всё равно мороки многовато получается, видимо проще перепривязать. 


+3

Здравствуйте, Алексей!

Хотел бы немного добавить по структуре файла *grf:

1- Это координаты верхнего левого угла изображения

2- Размер пикселя

3- Пространственное расположение изображения 

4- Точность привязки

5- Координата пикселя точки (x,y)

6- Координаты точки (x,y,z)

5-6 это именно те точки по которым привязано изображение, если их будет пять значит будет 5 строк.

Далее распишу как можно рассчитать первые  7 строк, если нам известны только 5 и 6 пункт:

  1. Найдём координату Z верхнего левого угла изображения, для этого решим систему уравнений:

 pixel1 = k*z1+b

 pixel2 = k*z2+b , по моему файлу получается 


1405.16 = k*30+b

3817.98 = k*(-10)+b, получаем


k = -60.3205

b = 3214.775

т.к координаты пикселя в верхнем левом углу равна(0,0),получаем

0 = -603245*z+3214.735 - от сюда находим z верхнего левого угла:

z0_верх = 53.29489974386817 


По аналогии Найдём координату Y и X верхнего левого угла изображения:

2530.03 = k*86.22+b

6247.99 = k*50.22+b

y0_верх = 110.71759545557237


2530.03 = k*(-870)+b

6247.99 = k*(-920)+b

x0_верх = -835.97556186726054


2.Определяем размер пикселя

размер пикселя по Y = |z1-z2|/|Py1-Py2| = |30-(-10)|/|1405.16-3818.98|= 0.0165781119188335640


т.к это разрез то с размером пиксела по x не много сложнее:

размер пикселя по  X =√(y1-y2)**2+(x1-x2)**2)/||Py1-Py2| = √(86.22-50.22)**2+(-870+920)**2)/|(2530.03-6247.99)| = 0.01657136903113467


3. Определим направление нашего разреза

При значения 1 и 1 в троках 6 и 7 ,получаем разрез от левого верхнего угла в направлении северо-востока по азимутом 45 градусам. Ниже на картинке приведено распределение направлений в зависимости от знака + или -  

в нашем случаи первое значение  -1
а второе рассчитаем k = |(z1-z2)|/|(x1-x2)|= (86.22-50.22)/(-870+920) =0.72
Получаем -1 и -0.72
4.В строки 8,9,10 можно поставить 0, а в строку 11 поставить 1 (у плана будет 0) 
 
Думаю вы правы намного быстрее будет привязать изображении заново чем в ручную это все считать, тем более возрастает вероятность ошибиться. Если у вас есть вопросы или замечания с удовольствие выслушаю. 


+2
Answer

Олег, добрый день!


Для решения вашей задачи был написан небольшой Python скрипт (rgf_to_grf_converter_v_1_0.py), который необходимо запустить в Micromine. В качестве входных данных вы указываете путь к папке, где находятся файлы *.jpg и *.rgf (строка 15 в скрипте), а на выходе вы получите файлы *.grf. Скрипт обрабатывает все файлы в указанной и вложенных папках. Стоит отметить, что файлы *.jpg и *.rgf должны иметь одинаковые имена, иначе появится сообщение об ошибке.


Скрипт работает следующим образом. Сначала скрипт отфильтровывает координаты точек из файла *.rgf и записывает их во временный файл данных Micromine. Затем используется функция Micromine Файл – Изображение – Импорт контрольных точек привязки, в результате которой создается .grf файл. В конце работы скрипта удаляется временный файл Micromine.


Перед запуском скрипта убедитесь, что на компьютере установлен Python, соответствующий версии Micromine:

  • Micromine 2014 – Python 3.3
  • Micromine 2016, 2018 – Python 3.5

Разрядность Python должна соответствовать разрядности Micromine.

Скрипт использует стороннюю библиотеку pillow для работы с изображениями, поэтому ее необходимо установить перед запуском скрипта. Скачайте себе на компьютер один из файлов в зависимости от установленной у вас версии Micromine:


Затем в Проводнике откройте папку, в которую вы скачали файл. Зажав клавишу Shift, нажмите на пустое место окна правой кнопкой мыши, и выберите опцию «Открыть окно команд». Откроется окно командной строки. Введите следующую команду: pip install имя файла. Например, pip install Pillow-5.0.0-cp35-cp35m-win_amd64.whl. Чтобы вставить скопированную команду, воспользуйтесь правой кнопкой мыши. Нажмите Enter. В случае успешной установки появится сообщение «Successfully installed Pillow».

Чтобы запустить скрипт, откройте в Micromine Редактор скриптов через комбинацию клавиш Ctrl+F11 или через меню Написание скриптов - Открыть редактор скриптов. В появившемся окне нажмите на кнопку "Загрузить существующий скрипт" и выберите в проводнике файл скрипта, который необходимо выполнить.


Обращайтесь, если будут вопросы, буду рад помочь!

Добрый день.
Актуализировали скрипт для работы в Micromine Origin & Beyond 2022.5 и 2023:

rgf_to_grf_converter_v_1_1.7z

Максим спасибо за помощь в разрешении совместимости файла привязки от "иного" ПО. Полагаю что все возникшие обстоятельства в будущем позволят выйти из ситуации многим пользователям которые могут столкнуться с аналогичной задачей. К сожалению требования к версии ММ, изложенные Вами не могут быть выполнены в нашей версии ПО, поскольку мы "постаринке" используем по мере возможности лицензию 10.0... поэтому буду знать что нет неразрешимых вопросов и все в будущем получится с приобретением актуальной на текущий момент времени версии.


Добрый день! Когда я ввожу в командной строке pip install Pillow-5.0.0-cp35-cp35m-win32.whl , пишет "pip не является внутренней или внешней командой"(( установлены Мм 2018, 32 бит, Питон 3.7. Но может это не мой случай? Нужно привязать разрезы формата .tab

Так же есть старая графика (разрезы .jpeg) на которых по одной пустой скважине, и высотные отметки, то есть получается для привязки только одна скважина. Можно ли привязать такую графику?

Добрый день, Раса! Не могли бы вы ответить, почему вы решили использовать Скрипт для решения свое задачи? Формат .tab является форматом файла привязки для MapInfo, у вас уже есть эти файлы к растровым изображениям?

Относительно старой графики - в такой ситуации для определения третьей координаты можно использовать план с проложением разведочной линии, или же снять координату самой скважины с плана. 

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


eshulga@micromine.com


Добрый день, Евгения! Скриптом решила воспользоваться, так как этот вопрос когда-то уже обсуждался в разделе Cкриптов https://forum.micromine.com/communities/12/topics/778-zagruzka-rastrov. Да, в том-то и дело, что есть только файлы Mapinfo, ну и .jpeg, которые пока затрудняюсь привязать. 

Вышлю примеры Вам на почту, спасибо.

Отлично, буду ждать.

Скрипт тут больше для автоматизации повторяющихся действий. Тут задача стоит: понять порядок действий для решения конкретно этой задачи, поэтому к скрипту пока не будем обращаться.

Коллеги, а как привязать растр на разрезе, если этот разрез имеет в плане вид ломанной кривой?

Пока только идея с нарезкой растра на каждый сегмент...

Добрый день, Вам в помощь ММ20, для этого там отдельный функционал. В стандартной форме отображения и привязки растра появился режим Диаграмма разреза. 

Вы можете осуществить привязку в обновленном окне, использовать Визекс, чтобы указать точки устьев скважин. Разрез сам будет искривлен по полинии разведочной сети.

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

Никто не сталкивался?

Владимир, если я правильно понял, он ляжет вертикально примерно в плоскость разреза.

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

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

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

+1

Станислав, приветствую!
Такой инструмент есть.

Андрей, приветствую, спасибо, !

У меня подозрение, что этот инструмент давно есть, нет? Мне кажется иконка такая давно болтается ) 

Привязка растров к ломанному разрезу есть с версии ММ20

А кнопочка показать напрвляющие есть уже очень очень давно :)

совершенно верно, направляющие всегда были.


Добрый день, Владимир.
Подскажите, пожалуйста, какой файл привязки Вы используете?
Для отображения растров разреза необходимо использовать файл привязки Micromine (GRF).
Попробуйте это сделать.


Если не получится, то скиньте файлы привязки и сам растр на нашу почту mmsupport_ru@micromine.com , мы обязательно поможем Вам разобраться.

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

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

Станислав, делаю примерно так же - единственное, привязываю по устью и забою скважин.

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

Владимир

Владимир, остальные файлы привязки работают только в 2D пространстве, а Micromine (GRF) учитывает все 3 координаты и корректно располагает растр в пространстве.
Странно, что Вы делаете это вручную, т.к. существуют горячие клавиши:
копировать CTRL+C,
вставить CTRL+V,
дублировать значение выделенной ячейки CTRL+R 
приращение значения выделенной ячейки CTRL+A
все они работают в окне привязки.
Также в ММ20 есть возможность установить точку как на изображении, а затем в окне Визекса (справа) указать её координату, в этом случае у Вас пропадает необходимость заполнять таблицу с Контрольными точками вручную.

Степан, спасибо.

Я скорей про то, что координаты через CTRL+C/CTRL+V вводятся по одной, нет возможности а-ля Эксель, скопировать, как на вашем примере, массив из 3 столбцов и 4 строк и одним CTRL+C/CTRL+V вставить все данные. У меня растры без координатной сетки, поэтому привязка через неортогональные (не регулярно расположенные) координаты устьев и забоя. То есть приращивать нечего, координаты каждый раз уникальные.

Владимир, я Вас понял, CTRL+C/CTRL+V работает не для одной ячейки, а для массива, нет ограничений.

Установил бесплатную апрельскую версию ММ20, но при привязке изображений отсутствует пункт "диаграмма разреза". Обусловлено бесплатной версией?

Доброй ночи, какой модульный набор вы выбрали при заявке на лицензию? 

Выбрал: Ресурсное моделирование

Прощу прощение, что сразу не ответила, пропустила оповещение о Вашем ответе. У Вас должен быть этот инструмент. Посмотрите, пожалуйста, здесь: Файл - Изображение - Привязка изображения по скважинам

Спасибо огромное, уже решил проблему!