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


56

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

По суті, це проблема обміну даними та проблема зворотної візуалізації даних.


2
Про одне рішення див. Коментарі до цієї відповіді . Рішення з відкритим кодом включатимуть обробку зображень або растрове програмне забезпечення GIS ( GRASS - вірогідний кандидат) або, можливо, GNU Octave . Я згадую їх як коментар, тому що я не використовував ні для цієї конкретної мети, тому, будь ласка, сприймайте їх як можливості, а не як певні рішення.
whuber

Я сподіваюся на код / ​​програмне забезпечення спеціально для скребкування графіків, і я пам’ятаю, що такі пакети існували, принаймні, вони робили 10 років тому, але я не можу згадати їх імена зараз, і не знаю, чи працюють вони в поточних операційних системах .
Алекс Холкомб

@Alex, спробуйте гуглінг "Graph Digitizer Open Source"
David LeBauer

Коротка програма Mathematica для отримання даних зі сканувань тут .
Шьорд К. де Вріс

1
Дивіться також ресурс, на який я вказую у своїй відповіді на те, яке відношення між Y та X у цьому сюжеті? .
Олексій

Відповіді:



42

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

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

  1. завантажити зображення
  2. встановіть шкали x і y, вказавши значення у двох точках на кожній осі
  3. вкажіть, чи масштаб лінійний, журнал тощо
  4. натисніть на точки.
    • Деякі програми автоматично розпізнають лінії або точки. У мене зазвичай після балів, і я вважаю їх занадто непослідовними, щоб бути корисними навіть зі 100 балами. Я не знайшов жодної, яка б розпізнавала різні символи. Ця особливість могла б коштувати клопоту для оцифрування ліній, але мені цього ніколи не доводилося робити.

Програма повертає кожну точку як матрицю xy.

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

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

Усі ті, кого я використав, добре працюють. За винятком контекстів, де похибка вимірювання дуже мала, помилка скребки графіка незначна (наприклад, помилка від оцифрування << розмір барів помилок або невизначеність в оцінці). Якщо ви не перевірили точність жодної з цих програм, але було б цікаво порівняти між користувачами, серед програм і на основі результатів відтворених статистичних аналізів.

Програми, які я використав:

  • Digitizer (вільне програмне забезпечення, GPL) автоматичне розпізнавання точок / ліній. Доступний у сховищі Ubuntu (digitizer-enuge)
  • Отримати дані (умовно-безкоштовне) має вікно масштабування, автоматичне розпізнавання точки / лінії
  • DigitizeIt (умовно-безкоштовне) автоматичне розпізнавання точок / ліній
  • ImageJ (відкритий код, найбільш розширюваний після оцифрування R)
  • R оцифруйте (безкоштовно, з відкритим кодом), оскільки це спрощує процеси отримання даних з графіка в аналіз, зберігаючи всі етапи в Р. Див. Підручник у R-Journal
  • Схопити його! (безкоштовна демонстрація, $ 69) Плагін Excel
  • WebPlotDigitzer (безкоштовно, онлайн). На основі браузера, витягує дані з зображень. Розглянуто тут .

Програми, які я не використовував:

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

TL; DR: WebPlotDigitizer доступний як веб-додаток, так і хромований плагін


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
David LeBauer

1
@Masi, що конкретно ви маєте на увазі під «систематично»? Чи можете ви зв’язатись із відповідною фігурою Коли ви говорите "перетинатися", ви маєте на увазі, що точка міститься в межах осі, і, таким чином, вона не з'являється?
David LeBauer

16

Інші відповіді припускають, що ви маєте справу з растровим зображенням графіка. Але на сьогодні гарною практикою є публікація графіків у векторній формі. У цьому випадку ви можете досягти набагато більшої точності відновлених даних і навіть оцінити похибку відновлення, якщо працювати безпосередньо з кодом векторного графіка, не перетворюючи його на растрове зображення.

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

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

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

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

Деякі інші способи описані тут і тут .

Створений outfile.pdf може відкрити текстовий редактор. Тепер вам потрібен PDF-довідник посібника 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
@ Алексис Я посилаюся на рекомендації сучасного журналу щодо надання графіків у векторній формі. У різних журналах приймаються різні підмножини векторних форматів. Взагалі я очікую кращої якості, коли є менші перетворення від одного формату до іншого.
Олексій Попков

@ Алексис В основному я очікую, що найкращим варіантом має бути надання графіків в одному з форматів PostScript (EPS або PDF). Але точна відповідь залежить від програмного забезпечення, яке використовує видавець. Зауважте також, що журнали зазвичай рекомендують не перетворювати графіки, створені вашим графічним програмним забезпеченням. Тож якщо ви можете експортувати як EPS, це, мабуть, найкращий варіант. Якщо ви можете експортувати SVG, тоді надайте SVG, якщо журнал приймає його, не конвертуйте себе в інший формат.
Олексій Попков

Сильно пов'язана відповідь з детальним описом процедури Mathematica .
Олексій Попков






2

'g3data' - це програмне забезпечення, яке можна використовувати для задоволення ваших цілей. Це безкоштовне програмне забезпечення, і я ним користувався. Завантажити його можна звідси: http://www.frantz.fi/software/g3data.php


2

Мені довелося це робити стільки разів у своїй кар’єрі, я врешті-решт склав програму javascript, яка доступна тут:

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

Вибачте, але вам все одно потрібно буде натискати кожну точку. Хоча ви можете використовувати клавіші зі стрілками, що врятує деяке напруження зап'ястя.



1

Для Rкористувачів пакет grImport(на CRAN ) може імпортувати векторну графіку та перетворювати їх в об'єкти, які R може інтерпретувати. Передбачається, що можна конвертувати PDF (або інший цікавий векторний формат) у формат PostScript. Це можна зробити, наприклад, за допомогою Inkscape : імпортуйте ( 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 при спробі вловити координати цікавлять вас елементів графіку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.