Grafikteki verileri kazımak için gereken yazılım [kapalı]


56

Kartezyen koordinatlarda (standart, günlük bir çizimde) çizilen verilerin görüntüsünü alacak ve grafikte çizilen noktaların koordinatlarını çıkaracak herhangi bir yazılımı (tercihen ücretsiz, tercihen açık kaynaklı) deneyime sahip olan var mı?

Temel olarak, bu bir veri madenciliği problemi ve ters bir veri görselleştirme problemidir.


2
Bir çözüm için bu cevabın yorumlarına bakınız . Açık kaynaklı çözümler arasında görüntü işleme veya raster GIS yazılımı ( GRASS olası bir adaydır) veya belki de GNU Octave bulunur . Bunlardan bir yorum olarak bahsediyorum çünkü bu amaç için ikisini de kullanmadım, bu yüzden lütfen kesin çözümler olarak değil, olasılık olarak kabul edin.
whuber

Özellikle grafikleri kazımak için kod / yazılım umuyorum ve bu tür paketlerin var olduğunu hatırlıyorum, en azından 10 yıl önce yaptıklarını, ancak isimlerini şimdi hatırlayamıyorum ve mevcut işletim sistemlerinde çalışıp çalışmadıklarını bilmiyorum .
Alex Holcombe


Burada taramalardan veri almak için kısa bir Mathematica programı .
Sjoerd C. de Vries

1
Ayrıca ben cevabım işaret kaynağı Bkz arasındaki ilişki nedir Y ve X bu komplosuna? .
Alexis,

Yanıtlar:



42

grafik sayısallaştırma yazılımı

Birçok farklı seçenek var, ancak hepsi temelde aynı iş akışını kullanıyor:

  1. bir görüntü yükle
  2. Her eksendeki iki noktadaki değerleri belirterek x ve y ölçeklerini ayarlayın
  3. ölçeğin doğrusal olup olmadığını belirtin, log, vb.
  4. noktalara tıklayın.
    • Programların bazıları, çizgileri veya noktaları otomatik olarak tanır. Genelde puanların peşindeyim ve bunları 100'lü puanlarda bile yardımcı olamayacak kadar tutarsız buluyorum. Farklı semboller tanıyan birini bulamadım. Bu özellik, çizgileri sayısallaştırmak için sorun olabilir, ancak bunu yapmak zorunda kalmamıştım.

Program her noktayı xy matrisi olarak döndürür.

Genellikle, görüntünün yakınlaştırılmış bir sürümünü yükleyerek ya da bazı programlarda bulunan yakınlaştırma özelliğini kullanarak görüntünün yakınlaştırılıp yakınlaştırılmadığını seçmeye yardımcı olur.

Pek çok program var ve bunlar ekstra özellikler, kullanılabilirlik, lisanslama ve maliyet açısından farklılık gösteriyor. Onları aşağıda listeledik.

Benim kullandıklarımın hepsi iyi çalışıyor. Ölçüm hatasının çok küçük olduğu durumlar dışında, grafik kazıma hatası önemli değildir (örneğin, sayısallaştırma << hata çubuğunun boyutu veya tahmindeki belirsizlik). Bu programlardan herhangi birinin doğruluğunu test etmediyseniz, ancak kullanıcılar arasında, programlar arasında ve yeniden üretilmiş istatistiksel analizlerin sonuçlarıyla karşılaştırmak ilginç olacaktır.

Kullandığım programlar:

  • Sayısallaştırıcı (ücretsiz yazılım, GPL) otomatik nokta / çizgi tanıma. Ubuntu deposunda bulunmaktadır (engauge-digitizer)
  • Veri Al (shareware) yakınlaştır penceresi, otomatik nokta / çizgi tanıma özelliği vardır
  • DigitizeIt (shareware) otomatik nokta / çizgi tanıma
  • ImageJ (açık kaynak, R sayısallaştırmasından sonra en fazla genişletilebilir)
  • R sayısallaştır (serbest, açık kaynak), çünkü R'deki tüm adımları koruyarak grafikten veri alma sürecini basitleştirir çünkü R-Journal'daki öğreticiye bakın.
  • Yakala! (ücretsiz demo, $ 69) Excel eklentisi
  • WebPlotDigitzer (ücretsiz, çevrimiçi). Tarayıcı tabanlı, görüntülerden veri ayıklar. Burada incelendi .

Kullanmadığım programlar:

  • GraphClick (Mac, 8 $)
  • g3data (açık kaynak - GNU GPL) Yakınlaştırma penceresi var, otomatik tanıma yok. Ubuntu deposunda mevcuttur.
  • Özel bir platform olan Matlab'da çalışan GRABIT OpenSource (BSD) eklentisi

TL; DR: WebPlotDigitizer , bir web uygulaması ve bir krom eklentisi olarak kullanılabilir


g3data (açık kaynak kodlu - GNU GPL) zoom penceresi var, otomatik tanıma yok. Ubuntu deposunda mevcuttur. Karşılaştıramadım, çünkü tek denedim; ama kullanımı çok kolay buldum.
Scortchi

Neden R sayısallaştırması CRAN'dan kaldırıldı?
Léo Léopold Hertz 준영

1
@Masi bunların çoğu pdf ile çalışmaz, pdf dosyaları ile figürü büyütürüm ve sonra bir jpg veya png olarak kaydetmek için bir ekran görüntüsü (örn. Mac'te cmd-shift-4) kullanırım.
David LeBauer

1
@Masi CRAN'da bir paketin bakımı ek bir iş olabilir. Paket GitHub'da bulunabilir github.com/tpoisot/digitize
David LeBauer

1
@Masi özel olarak 'sistematik' derken ne demek istiyorsun? Söz konusu rakamlara bağlantı verebilir misiniz? 'Kesişir' derken, noktanın eksen içinde bulunduğunu ve bu yüzden görünmediğini mi kastediyorsunuz?
David LeBauer

16

Diğer cevaplayıcılar, grafiğin raster görüntüsüyle ilgilendiğinizi varsayar. Ancak günümüzde iyi uygulama grafiklerin vektör şeklinde yayınlanmasıdır. Bu durumda, kurtarılan verinin çok daha yüksek kesinliğini elde edebilir ve hatta vektör grafiğinin koduyla raster görüntüye dönüştürmeden çalışırsanız kurtarma hatasını tahmin edebilirsiniz.

Makaleler çevrimiçi olarak PDF dosyaları olarak yayınlandığından, ondan kurtarmak istediğiniz verilerle vektör arsa içeren (sayısal biçimde olsun) ve ortaya konan kurtarma hatasını tahmin eden bir PDF dosyanız olduğunu varsayalım.

Öncelikle, PDF temel olarak metinsel olan bir metin formatıdır (bir metin editörü tarafından okunabilir). Buradaki sorun, (ve hemen hemen her zaman) bir metin editörü tarafından okunması için sıkıştırılmaması gereken sıkıştırılmış veri akışları içermesidir. Bu sıkıştırılmış veri akışları genellikle ihtiyacımız olan bilgileri içerir.

PDF dosyasını okunabilir PDF koduna sahip bir metin belgesine dönüştürmek için veri akışlarını açmanın birkaç yolu vardır. Muhtemelen basit yolu özgür kullanmaktır QPDF programı ile --stream-data=uncompressseçeneği :

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

Diğer bazı yollar burada ve burada açıklanmaktadır .

Oluşturulan outfile.pdf bir metin editörü tarafından açılabilir. Şimdi ne gördüğünüzü anlamak için PDF Referans Kılavuzu 1.7'ye ihtiyacınız var . Şu an panik yapmayın! Sayfa 226 - 227'deki "TABLO 4.9 Yolu inşaat operatörleri" bölümünde açıklanan yalnızca birkaç operatör bilmeniz gerekir. ):

x y               m   moveto 

x y               l   lineto 

x y width height  re  rectangle

                  h   closepath

Çoğu durumda, verileri kurtarmak için bu dört operatörü bilmek yeterlidir.

Şimdi outfile.pdf dosyasını, verileri değiştirebileceğiniz bir programa metin olarak almanız gerekir. Mathematica ile nasıl yapıldığını göstereceğim .

Dosyayı içe aktarma:

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

Şimdi en basit örneği kabul ediyorum: Grafik, birçok iki noktadan oluşan bir çizgi içeriyor. Bu durumda, çizginin her bir parçası şöyle kodlanır:

268.79999 408.92975 m
272.39999 408.92975 l

Tüm bu bölümleri PDF kodundan çıkarmak:

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

Onları görselleştirmek:

Graphics[{Line[lines]}]

Böyle bir şey elde edersiniz (çalıştığım makale dört grafik içermektedir):

arsa

Her iki bitişik segment bir noktayı paylaşır. Yani bu durumda, bitişik bölümlerin dizilerini yollara dönüştürebilirsiniz:

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

Artık tüm yolları ayrı ayrı görselleştirebilirsiniz:

Graphics[{Line /@ paths}]

Bu şekilde, aradığınız yolu (çift tıklatarak) seçebilir, grafik seçimini kopyalayabilir ve yeni olarak yapıştırabilirsiniz Graphics. Onu geriye doğru dönüştürmek için elementi aldığınız noktaların listesine {1, 1, 1}. Şimdi, grafiğin koordinat sisteminde değil, PDF dosyasının koordinat sisteminde puanlarımız var. Aralarında bir ilişki kurmalıyız.

Yukarıdaki çizimden elle keneleri seçersiniz ( Shiftçoklu seçim için basılı tutunuz ), sonra kopyalayınız ve yeni yapıştırınız Graphics. Yatay kenelerin koordinatlarını şu şekilde çıkarabilirsiniz:

ekran görüntüsü

Şimdi keneler arasındaki farkları kontrol edin:

Differences[reHorTicks]

Bu farklılıklardan, kenelerin PDF dosyasındaki konumunun ne kadar kesin olduğunu görebilirsiniz. Orijinal veri noktalarının PDF dosyasına dahil edilen vektör grafiğine dönüştürülmesi sonucu ortaya çıkan bir hata tahmini verir. Kenelerin konumlandırılmasında kayda değer hatalar varsa, kenelerin koordinatlarını doğrusal bir modele takarak hatayı azaltabilirsiniz. Bu doğrusal işlev şimdi, yolun noktalarının orijinal koordinatlarını (arsanın koordinat sisteminde bulunan) elde etmek için kullanılabilir.


2
Alexey, sen yazdın Ama günümüzde iyi uygulama grafiklerin vektör şeklinde yayınlanmasıdır. Hangi vektör biçimlerinin etrafındaki en iyi uygulamalar için iyi bir referansınız var mı? (LaTeX yazılarımda bir svg dosyasının eps kapsüllemesi kullanmalı mıyım, yoksa grafiği doğrudan LaTeX'e göndermem mi gerekiyor?) Şerefe.
Alexis

1
@Alexis Vektör formatında grafikler sunmak için modern derginin tavsiyelerine atıfta bulunuyorum. Farklı dergiler, farklı vektör format alt kümelerini kabul eder. Genel olarak, bir formattan diğerine daha az dönüşüm olduğunda daha iyi kalite beklerim.
Alexey Popkov

@Alexis Temel olarak, PostScript formatlarından birinde (EPS veya PDF) grafik sunmanın en iyi seçenek olması gerektiğini umuyorum. Ancak kesin cevap, yayıncı tarafından kullanılan yazılıma bağlıdır. Ayrıca, genellikle dergilerin, grafik yazılımınız tarafından üretilen grafiklerin herhangi bir dönüşümüne karşı önermediklerini unutmayın. Yani EPS olarak dışa aktarabilirseniz, muhtemelen en iyi seçenektir. Yalnızca SVG'yi dışa aktarabilirseniz, dergi kabul ederse SVG'yi sağlayın, kendinizi başka biçime dönüştürmeyin.
Alexey Popkov

Mathematica prosedürünün ayrıntılı açıklaması ile kesinlikle ilgili cevap .
Alexey Popkov,









1

İçin Rkullanıcılar, paket grImport(on CRAN ) vektör grafik alabilirsiniz ve R yorumlayabilir nesnelere dönüştürmek. Birinin PDF'yi (veya ilgilenilen diğer vektör formatlarını) PostScript formatına dönüştürebileceğini varsayar. Bu, örneğin Inkscape ile yapılabilir : File > Importfigürünle PDF sayfanızı Inkspace'e içe aktarın ( ) File > Save As > Save as type: > PostScript *.ps. Bir kez sizin *.psdosya nadas grImportvinyet Vector Graphics İthalat , daha ilgili varlık bölümü '4.1. Görüntülerdeki verilerin kazınması.

İşletim Sisteminizde ghostscript'e ihtiyacınız olacak - buradan indirmeyi deneyin .

Bir şekilde, aradığınızda “durum 127” ghostscript hatasıyla karşılaşırsanız grImport::PostScriptTrace, buradan makinenizde ghostscript yolunu elle ayarlamak için verilen tavsiyeye uyun .

PostScript dosyasını R'ye içe aktarmak için bazı örnek R kodları:

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)

Grafiğiniz çok sayfalı bir PDF dosyasındaki bir sayfadaysa, çok sayfalı belgeyi ile bölebilirsiniz PDFTK builder. Bir sayfa PDF dosyanızı Ikscape'e içe aktarın ve fazladan öğeleri (ekstra metin, ekstra grafik öğeleri) silin. Bu, ilgilendiğiniz grafik öğelerinin koordinatlarını yakalamaya çalışırken R'deki çalışmanızı kolaylaştırır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.