Penjawab lain menganggap bahwa Anda berurusan dengan gambar raster grafik. Namun saat ini praktik terbaiknya adalah menerbitkan grafik dalam bentuk vektor. Dalam hal ini Anda dapat mencapai ketepatan yang jauh lebih tinggi dari data yang dipulihkan dan bahkan memperkirakan kesalahan pemulihan jika Anda bekerja dengan kode grafik vektor secara langsung, tanpa mengubahnya menjadi gambar raster.
Karena makalah diterbitkan secara online sebagai file PDF, saya berasumsi bahwa Anda memiliki file PDF yang berisi plot vektor dengan data yang ingin Anda pulihkan darinya (dapatkan dalam bentuk numerik) dan perkirakan kesalahan pemulihan yang diperkenalkan.
Pertama-tama, PDF adalah format vektor yang pada dasarnya bersifat tekstual (dapat dibaca oleh editor teks). Masalahnya adalah ia dapat (dan hampir selalu) berisi aliran data terkompresi yang perlu dikompresi untuk membacanya oleh editor teks. Aliran data terkompresi ini biasanya berisi informasi yang kita butuhkan.
Ada beberapa cara untuk mengompres aliran data untuk mengonversi file PDF ke dokumen teks dengan kode PDF yang dapat dibaca. Mungkin cara paling sederhana adalah dengan menggunakan utilitas QPDF gratis dengan --stream-data=uncompress
opsi :
qpdf infile.pdf --stream-data=uncompress -- outfile.pdf
Beberapa cara lain dijelaskan di sini dan di sini .
File outfile.pdf yang dihasilkan dapat dibuka oleh editor teks. Sekarang Anda membutuhkan Manual Referensi PDF 1.7 untuk memahami apa yang Anda lihat. Jangan panik saat ini! Anda hanya perlu mengetahui beberapa operator yang dijelaskan dalam "TABEL 4.9 Operator konstruksi jalur" pada halaman 226 - 227. Operator yang paling penting adalah (kolom pertama berisi spesifikasi koordinat untuk operator, yang kedua berisi operator dan yang ketiga adalah nama operator ):
x y m moveto
x y l lineto
x y width height re rectangle
h closepath
Dalam kebanyakan kasus cukup mengetahui empat operator ini untuk memulihkan data.
Sekarang Anda perlu mengimpor file outfile.pdf sebagai teks ke dalam beberapa program di mana Anda dapat memanipulasi data. Saya akan menunjukkan bagaimana melakukannya dengan Mathematica .
Mengimpor file:
pdfCode = Import["outfile.pdf", "Text"];
Sekarang saya menganggap kasus paling sederhana: grafik berisi garis yang terdiri dari banyak segmen dua titik. Dalam hal ini setiap segmen garis dikodekan seperti ini:
268.79999 408.92975 m
272.39999 408.92975 l
Mengekstrak semua segmen tersebut dari kode PDF:
lines = StringCases[pdfCode,
StartOfLine ~~ x1 : NumberString ~~ " " ~~ y1 : NumberString ~~ " m\n" ~~
x2 : NumberString ~~ " " ~~ y2 : NumberString ~~ " l\n"
:> ToExpression@{{x1, y1}, {x2, y2}}];
Visualisasikan mereka:
Graphics[{Line[lines]}]
Anda mendapatkan sesuatu seperti ini (makalah yang saya kerjakan berisi empat grafik):
Setiap dua segmen yang berdekatan berbagi satu titik. Jadi dalam hal ini Anda dapat mengubah urutan segmen yang berdekatan menjadi jalur:
paths = Split[lines, #1[[2]] == #2[[1]] &];
Sekarang Anda dapat memvisualisasikan semua jalur secara terpisah:
Graphics[{Line /@ paths}]
Dari gambar ini Anda dapat memilih (dengan mengklik dua kali) jalur yang Anda cari, menyalin pemilihan grafik dan menempelkannya sebagai baru Graphics
. Untuk mengubahnya mundur ke daftar poin Anda mengambil elemen {1, 1, 1}
. Sekarang kita memiliki poin tidak dalam sistem koordinat grafik tetapi dalam sistem koordinat file PDF. Kita perlu membangun hubungan di antara mereka.
Dari plot di atas, Anda memilih kutu dengan tangan (tahan Shift
untuk beberapa pilihan), lalu salin dan tempel sebagai yang baru Graphics
. Berikut ini cara mengekstrak koordinat kutu horizontal:
Sekarang periksa perbedaan antara kutu:
Differences[reHorTicks]
Dari perbedaan-perbedaan ini, Anda dapat melihat seberapa tepat posisi kutu dalam file PDF. Ini memberikan perkiraan kesalahan yang diperkenalkan dengan mengubah datapoint asli menjadi grafik vektor yang termasuk dalam file PDF. Jika ada kesalahan yang cukup besar dalam posisi kutu, Anda dapat mengurangi kesalahan dengan menyesuaikan koordinat kutu ke model linier. Fungsi linier ini sekarang dapat digunakan untuk mendapatkan koordinat asli titik jalan (yang ada di sistem koordinat plot).