Программное обеспечение, необходимое для очистки данных от графика [закрыто]

56

У кого-нибудь есть опыт работы с программным обеспечением (желательно бесплатным, предпочтительно с открытым исходным кодом), которое будет снимать данные, нанесенные на декартовы координаты (стандартный, повседневный график), и извлекать координаты точек, нанесенных на график?

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

Алекс Холкомб
источник
2
Для одного решения см. Комментарии к этому ответу . Решения с открытым исходным кодом будут включать программное обеспечение для обработки изображений или растровую ГИС ( вероятным кандидатом является GRASS ) или, возможно, GNU Octave . Я упоминаю их как комментарий, потому что я не использовал их ни для какой конкретной цели, поэтому, пожалуйста, воспринимайте их как возможности, а не как конкретные решения.
whuber
Я надеюсь на код / ​​программное обеспечение специально для очистки графиков, и я помню, что такие пакеты существовали, по крайней мере, 10 лет назад, но я не могу вспомнить их имена сейчас и не знаю, работают ли они в текущих операционных системах. ,
Алекс Холкомб
@ Алекс
Короткая программа Mathematica для получения данных со сканов здесь .
Sjoerd C. de Vries
1
См. Также ресурс, на который я указываю в своем ответе на Каковы отношения между Y и X на этом графике? ,
Алексис

Ответы:

42

программное обеспечение для оцифровки графиков

Есть много разных вариантов, но все они в основном используют один и тот же рабочий процесс:

  1. загрузить изображение
  2. установить шкалы x и y, указав значения в двух точках на каждой оси
  3. указать, является ли шкала линейной, логарифм и т. д.,
  4. нажмите на точки.
    • Некоторые из программ автоматически распознают линии или точки. Я обычно набираю очки и считаю их слишком непоследовательными, чтобы быть полезными даже с сотнями очков. Я не нашел тот, который распознает разные символы. Эта функция может стоить усилий для оцифровки строк, но мне никогда не приходилось делать это.

Программа возвращает каждую точку в виде матрицы xy.

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

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

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

Программы, которые я использовал:

  • Digitizer (бесплатное программное обеспечение, GPL), автоматическое распознавание точек / линий. Доступно в репозитории Ubuntu (engauge-digitizer)
  • Get Data (shareware) имеет окно масштабирования, автоматическое распознавание точек / линий
  • DigitizeIt (shareware) автоматическое распознавание точек / линий
  • ImageJ (с открытым исходным кодом, наиболее расширяемый после оцифровки R)
  • R digitize (бесплатный, с открытым исходным кодом), потому что он упрощает процессы получения данных из графика в анализ, сохраняя все этапы в R. См. Учебное пособие в R-Journal.
  • GrabIt! (бесплатная демонстрация, $ 69) Плагин Excel
  • WebPlotDigitzer (бесплатно, онлайн). На основе браузера, извлекает данные из изображений. Отзыв здесь .

Программы, которые я не использовал:

  • GraphClick (Mac, 8 долларов)
  • g3data (с открытым исходным кодом - GNU GPL) Имеет окно масштабирования, нет автоматического распознавания. Доступно в репозитории Ubuntu.
  • Плагин GRABIT OpenSource (BSD), работающий на проприетарной платформе Matlab

TL; DR: WebPlotDigitizer доступен как веб-приложение, а также как подключаемый модуль Chrome.

David LeBauer
источник
g3data (с открытым исходным кодом - GNU GPL) имеет окно масштабирования, нет автоматического распознавания. Доступно в репозитории Ubuntu. Я не могу сравнить, потому что это единственный, который я пробовал; но я нашел это очень простым в использовании.
Scortchi - Восстановить Монику
Почему R оцифровка была удалена из CRAN?
Лео Леопольд Герц 준영
1
@Masi большинство из них не работают с pdf, с pdf файлами я делаю рисунок большим, а затем использую снимок экрана (например, cmd-shift-4 на Mac), чтобы сохранить рисунок в формате jpg или png.
Дэвид Лебауэр
1
@Masi Поддержание пакета в CRAN может быть большой дополнительной работой. Пакет доступен на GitHub github.com/tpoisot/digitize
Дэвид Лебауэр,
1
@ Маси, что конкретно вы подразумеваете под «систематически»? Можете ли вы дать ссылку на фигуры (ы) в вопросе? Когда вы говорите «пересечь», вы подразумеваете, что точка содержится внутри оси и, следовательно, не появляется?
Дэвид Лебауэр
16

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

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

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

Существует несколько способов распаковать потоки данных, чтобы преобразовать файл PDF в текстовый документ с читаемым кодом PDF. Вероятно, самый простой способ - использовать бесплатную утилиту QPDF с --stream-data=uncompressопцией :

qpdf infile.pdf --stream-data=uncompress -- outfile.pdf

Некоторые другие способы описаны здесь и здесь .

Сгенерированный файл outfile.pdf может быть открыт текстовым редактором. Теперь вам нужно PDF Reference Manual 1.7, чтобы понять, что вы видите. Не паникуйте в этот момент! Вам нужно знать только несколько операторов, описанных в «ТАБЛИЦЕ 4.9 Операторы построения пути» на страницах 226 - 227. Наиболее важными являются операторы (первый столбец содержит спецификацию координат для оператора, второй - оператор, а третий - имя оператора ):

x y               m   moveto 

x y               l   lineto 

x y width height  re  rectangle

                  h   closepath

В большинстве случаев достаточно знать эти четыре оператора для восстановления данных.

Теперь вам нужно импортировать файл outfile.pdf в виде текста в некоторую программу, где вы можете манипулировать данными. Я покажу, как это сделать с Mathematica .

Импорт файла:

pdfCode = Import["outfile.pdf", "Text"];

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

268.79999 408.92975 m
272.39999 408.92975 l

Извлечение всех таких сегментов из кода PDF:

lines = StringCases[pdfCode, 
   StartOfLine ~~ x1 : NumberString ~~ " " ~~ y1 : NumberString ~~ " m\n" ~~ 
                  x2 : NumberString ~~ " " ~~ y2 : NumberString ~~ " l\n" 
                                        :> ToExpression@{{x1, y1}, {x2, y2}}]; 

Визуализация их:

Graphics[{Line[lines]}]

Вы получите что-то вроде этого (статья, с которой я работаю, содержит четыре графика):

участок

Каждые два соседних сегмента имеют одну точку. Так что в этом случае вы можете превратить последовательности соседних сегментов в пути:

paths = Split[lines, #1[[2]] == #2[[1]] &];

Теперь вы можете визуализировать все пути отдельно:

Graphics[{Line /@ paths}]

На этом рисунке вы можете выбрать (двойным щелчком) путь, который вы ищете, скопировать графику и вставить как новый Graphics. Для преобразования его обратно в список точек вы берете элемент {1, 1, 1}. Теперь у нас есть точки не в системе координат графика, а в системе координат PDF-файла. Нам нужно установить отношения между ними.

На приведенном выше графике вы выбираете галочки вручную (удерживая Shiftдля многократного выбора), затем копируете их и вставляете как новые Graphics. Вот как вы можете извлечь координаты горизонтальных отметок:

Скриншот

Теперь проверьте разницу между галочками:

Differences[reHorTicks]

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

Алексей Попков
источник
2
Алексей, ты написал, но в настоящее время хорошей практикой является публикация графиков в векторном виде. Есть ли у вас хороший справочник по передовым методам, в отношении которых используются векторные форматы? (То есть я должен использовать инкапсуляцию eps файла svg в своих рукописях LaTeX, или я должен выводить граф непосредственно в LaTeX?) Приветствия.
Алексис
1
@Alexis Я ссылаюсь на рекомендации современного журнала, чтобы предоставить графики в векторном виде. Разные журналы принимают разные подмножества векторных форматов. В целом, я ожидаю лучшего качества при меньших преобразованиях из одного формата в другой.
Алексей Попков
@Alexis В общем, я ожидаю, что лучшим вариантом будет предоставление графиков в одном из форматов PostScript (EPS или PDF). Но точный ответ зависит от программного обеспечения, используемого издателем. Обратите внимание, что обычно журналы рекомендуют против любых преобразований графиков, созданных вашим графическим программным обеспечением. Так что, если вы можете экспортировать как EPS, это, вероятно, лучший вариант. Если вы можете экспортировать только SVG, предоставьте SVG, если журнал примет это, не конвертируйте себя в другой формат.
Алексей Попков
Сильно связанный ответ с подробным описанием процедуры для Mathematica .
Алексей Попков
2

Вы также можете попробовать im2graph ( http://www.im2graph.co.il ) конвертировать графики в данные. Работает в Linux и Windows.

Шай Вайнгаст
источник
2

«g3data» - это программное обеспечение, которое может использоваться для ваших целей. Это бесплатное программное обеспечение, и я использовал его. Вы можете скачать его здесь: http://www.frantz.fi/software/g3data.php

Прашант Танки
источник
2

Мне приходилось делать это так много раз за свою карьеру, что в итоге я создал программу javascript, которая доступна здесь:

http://kdusling.github.io/projects/DataGrab/index.html

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

Кевин Доуслинг
источник
1

Для Rпользователей пакет grImportCRAN ) может импортировать векторную графику и преобразовывать ее в объекты, которые R может интерпретировать. Предполагается, что можно конвертировать PDF (или другой интересующий векторный формат) в формат PostScript. Это можно сделать, например, с помощью Inkscape : import ( File > Import) вашей страницы PDF с вашей фигурой в Inkspace и File > Save As > Save as type: > PostScript *.ps. После того, как у вас есть *.psфайл, используйте grImportвиньетку « Импорт векторной графики» , более актуальным является раздел «4.1. Соскоб данных с изображений ».

Вам понадобится ghostscript в вашей операционной системе - попробуйте скачать его отсюда .

Обратите внимание, если вы бежите как - то в Ghostscript ошибка «статус 127» при вызове grImport::PostScriptTrace, то паром рекомендации от здесь , который говорит вручную прописать путь к Ghostscript на вашей машине.

Вот пример кода R для импорта файла PostScript в R:

install.packages("grImport")
require(grImport)
# if you get the ghostscript error 'status 127' then set the path to ghostscript, e.g.:
Sys.setenv(R_GSCMD = normalizePath("C:/Program Files/gs/gs9.22/bin/gswin64c.exe")) 
PostScriptTrace(file = "graph.ps", outfilename = "graph.ps.xml")
my_fig <- readPicture(rgmlFile = "graph.ps.xml")
grid.picture(my_fig)

Обратите внимание: если ваш график находится на странице в многостраничном PDF-файле, вы можете разделить многостраничный документ с помощью PDFTK builder. Импортируйте одностраничный PDF-файл в Ikscape и удалите все дополнительные элементы (дополнительный текст, дополнительные элементы графика). Это облегчит вашу работу в R при попытке поймать координаты интересующих вас элементов графика.

Валентина
источник