Software

Plot Digitizer v.1.0.0

Digitalizacija grafika sa slike

Program je besplatan

Glavni prozor aplikacije Plot Digitizer sa kalibrisanim osama i automatski praćenom krivom
Glavni prozor aplikacije — kalibrisane ose i automatski praćena kriva

Namjena

Plot Digitizer je besplatan program koji iz slike grafika — skeniranog dijagrama, snimka ekrana ili slike iz rada — vraća numeričke vrijednosti tačaka u koordinatama samog grafika. Tipična upotreba je poređenje sopstvenog proračuna sa objavljenim mjerenjima ili rezultatima drugih autora, kada su ti podaci dostupni samo kao slika.

Program je nastao upravo iz takve potrebe: rezultati simulacije hidrauličkog udara trebalo je uporediti sa eksperimentalnim krivama iz literature, koje postoje samo kao dijagrami. Rezultat digitalizacije je CSV fajl sa parovima (x, y) koji se direktno učitava u Excel, MATLAB ili Python.

Princip rada

Svaka tačka na slici određena je pikselom (u, v). Da bi se iz piksela dobile stvarne koordinate, potrebna je veza između slike i osa grafika — kalibracija. Zadaju se četiri referentne tačke: X1 i X2 na x-osi, Y1 i Y2 na y-osi, i za svaku njena stvarna vrijednost.

Stvarna koordinata tačke P računa se ortogonalnom projekcijom vektora od prve referentne tačke na pravac ose:

s = (P − P1)·d / |d|2,   d = P2 − P1,   x = x1 + s·(x2 − x1)

i analogno za y. Kako se koristi pravac ose, a ne pretpostavka da su ose paralelne ivicama slike, rezultat je tačan i kod blago zarotiranog skena. Za logaritamsku osu ista interpolacija se radi nad log10 vrijednostima. Program odbija kalibraciju kod koje se referentne tačke poklapaju, kod koje su vrijednosti jednake, ili kod koje su ose praktično paralelne (ugao manji od oko 6°).

Isto preslikavanje radi i u obrnutom smjeru: kada se u tabeli upiše nova X ili Y vrijednost tačke, rješava se sistem od dvije linearne jednačine po pikselu i tačka se pomjera na slici.

Napomena o izboru referentnih tačaka

X1, X2, Y1 i Y2 treba postaviti na podioke čija se vrijednost čita sa ose, a ne na ugao koordinatnog sistema. Ugao je ispravan izbor samo kada je i on označen vrijednošću. Na grafiku čija y-osa počinje od −20, a označena je tek od 0, ugao sa upisanom vrijednošću 0 pomjera i skalira sve očitane y vrijednosti. Greška je sistematska i ne vidi se na samoj slici — vidi se tek kada se očitana vrijednost uporedi sa poznatom tačkom grafika.

Za tačnost je bolje da su referentne tačke što dalje jedna od druge: greška klika od jednog piksela dijeli se rasponom ose u pikselima.

Ručna digitalizacija

  • Lupa 4× sa nišanom — prikazuje okolinu kursora sa vidljivim pojedinačnim pikselima, uz koordinate u pikselima i u jedinicama grafika
  • Dodavanje i brisanje — lijevi klik dodaje tačku, desni klik briše najbližu; postavljene tačke i markeri kalibracije se mogu prevući mišem
  • Označavanje pravougaonikom — više tačaka se označava povlačenjem pravougaonika i briše jednom komandom
  • Poništavanje — Ctrl+Z vraća i dodavanje i brisanje, uključujući i cijelo automatsko praćenje kao jednu radnju
  • Više serija — npr. „Eksperiment“ i „Proračun“ na istom grafiku, svaka sa svojom bojom
  • Tabela tačaka — vrijednosti se mogu mijenjati direktno u tabeli; sortiranje po X

Automatsko praćenje krive

Kod gustih krivih ručno klikanje stotina tačaka je sporo i unosi slučajnu grešku. Automatsko praćenje pronalazi tačke krive po boji:

  1. boja krive se preuzima klikom na krivu na slici;
  2. izdvajaju se pikseli čija je Euklidska udaljenost od te boje u RGB prostoru manja od zadane tolerancije, samo unutar izabrane pravougaone oblasti — podrazumijevano pravougaonik između tačaka kalibracije, uvučen tri piksela od linija osa;
  3. pikseli se dijele u vertikalne trake širine Δx;
  4. u svakoj traci pikseli se grupišu po vertikali — nova grupa počinje kad je razmak veći od Δy;
  5. svaka grupa daje jednu tačku u svom težištu.

Algoritam „jedna tačka po traci“ zadržava samo najveću grupu u traci i namijenjen je krivoj oblika y = f(x); time se odbacuju izolovani pikseli iste boje (tekst, oznake). Algoritam „sve grupe“ zadržava svaku grupu i koristi se kada u istoj traci ima više grana. Prepoznati pikseli se mogu prikazati kao zelena maska preko slike, pa se tolerancija podešava vizuelno, prije samog praćenja. Cijeli postupak je vektorizovan u NumPy-u.

Tačnost

Tačnost digitalizacije ograničena je rezolucijom slike, a ne brojem decimala. Na snimku iznad x-osa od 0 do 0,5 zauzima oko 1095 piksela, a y-osa od −20 do 70 oko 780 piksela, pa jedan piksel odgovara:

OsaRasponDužina [px]Vrijednost jednog piksela
x0 … 0,5 s≈ 1095≈ 0,00046 s
y−20 … 70 m≈ 780≈ 0,12 m

Uz debljinu linije od dva do tri piksela, nesigurnost očitavanja je reda veličine ±1 piksel, odnosno ±0,1 m po y. Slika veće rezolucije, ili isti grafik uvećan prije snimanja ekrana, smanjuje grešku proporcionalno. Broj decimala u CSV fajlu (0 do 12) je stvar formata zapisa — sedam decimala ne znači sedam tačnih cifara.

Izvoz i projekat

  • CSV — sve serije u jednom fajlu, jedna pored druge (X, Y kolone sa nazivom serije); bira se broj decimala, separator kolona (; , ili Tab) i decimalni znak (zarez ili tačka). Kodiranje UTF-8 sa BOM-om, pa Excel ispravno prikazuje naša slova
  • Projekat (.pdig) — čuva putanju slike, kalibraciju, sve serije i podešavanja praćenja. Tačke se čuvaju u pikselima slike, pa ispravka kalibracije automatski preračunava sve postojeće tačke, bez ponovne digitalizacije

Verifikacija

Proračunski dio programa je odvojen od interfejsa i pokriven automatskim testovima:

  • Linearne ose — tačke sa poznatim pikselima daju tačne vrijednosti, uključujući sredinu raspona
  • Rotacija — cijela kalibracija i mjerna tačka zarotirani za 5° daju iste stvarne koordinate, sa odstupanjem ispod 10−12
  • Logaritamska osa — sredina ose između 1 i 100 daje 10
  • Inverzno preslikavanje — piksel → stvarne koordinate → piksel vraća polaznu tačku, za linearne i logaritamske ose
  • Automatsko praćenje — na sintetičkoj slici sa sinusoidom debljine 3 piksela, poznatom analitički, praćene tačke odstupaju od tačne krive manje od 1,5 piksela; izolovani pikseli iste boje se odbacuju
  • Neispravni ulazi — poklopljene referentne tačke, jednake vrijednosti, paralelne ose i negativne vrijednosti na logaritamskoj osi se odbijaju sa porukom

Ograničenja

  • Kalibracija je linearna ili logaritamska po svakoj osi; polarni dijagrami, trougaoni (ternarni) dijagrami i perspektivno izobličene slike (fotografija papira pod uglom) nisu podržani
  • Automatsko praćenje razlikuje krive samo po boji — dvije krive iste boje (npr. dvije crne, puna i isprekidana) ne razdvaja; za njih se koristi ograničena oblast ili ručna digitalizacija
  • Kod krivih sa naglim vertikalnim oscilacijama „jedna tačka po traci“ daje težište oscilacije u traci, pa se vrhovi gube; za takve signale treba smanjiti Δx ili vrhove dopuniti ručno
  • Kod mrežnih linija i teksta iste boje kao kriva potrebno je izabrati oblast koja ih isključuje

Tehnologije

Program je pisan u Pythonu, sa otvorenim i široko korištenim bibliotekama:

Python 3.11 · PySide6 · NumPy

Grafički interfejs koristi Qt preko biblioteke PySide6, pod licencom GNU LGPL v3. Qt biblioteke se isporučuju kao zasebni fajlovi, pa ih korisnik može zamijeniti vlastitom verzijom, kako LGPL i zahtijeva. NumPy je pod BSD licencom.

Interfejs je dvojezičan — crnogorski i engleski, sa izborom u meniju. Korisnički interfejs se uređuje u Qt Designeru, a proračun je zaseban modul bez zavisnosti od interfejsa.

Cijena i sugestije

Plot Digitizer je potpuno besplatan, bez ograničenja u funkcionalnosti i bez naknadnih verzija koje se plaćaju.

Sve sugestije su dobrodošle — predlozi za nove mogućnosti, primjedbe, prijave grešaka.

Kontakt

Za pitanja, prijedloge ili prijave grešaka — direktno na mkozica@outlook.com.

Preuzimanje

Instalacioni program za Windows (64-bitni), veličine 31 MB. Sve potrebne biblioteke su uključene — Python se ne mora posebno instalirati. Program se može instalirati i bez administratorskih prava, samo za tekućeg korisnika. Instalacija opciono povezuje .pdig projekte sa programom.

Preuzmi Plot Digitizer v.1.0.0  ↓

← Nazad na Software