GTDiPS = General Transformation of Discrete Point Sequence
říjen 2008, Petr Frantík
poslední aktualizace: květen 2009
http://www.kitnarf.cz

GTDiPS dokumentace (verze 2.4 a pozdější)
Petr Frantík

 

Obsah

  1. Úvod
  2. Pojmy
  3. Spuštění aplikace z konzoly
  4. Implementované transformace
    1. AffineTransformation
    2. CentroidalTransformation
    3. ConstantWeightTransformation
    4. DerivativeLimitCrossDeletion
    5. DerivativeTransformation
    6. EquidistantTransformation
    7. FlowlineTransformation
    8. PolynomialTransformation
    9. SplineInterpolation
    10. TrackingTransformation
    11. XDuplicityTransformation
  5. Formát datových souborů
  6. Soubor řetězu
  7. Definiční metody
    1. calculateWeight
    2. flowingCircle
    3. ignoreMissingPoints
    4. ignoreUnsolvable
    5. invert
    6. jumpToOldest
    7. rotate
    8. rotateDegrees
    9. scale
    10. setDegree
    11. setDerivativeLimit
    12. setDistance
    13. setMaxXOrigin
    14. setMinXOrigin
    15. setOldestOrigin
    16. setOrigin
    17. setChildsPerSegment
    18. setRatioY
    19. setWeight
    20. shear
    21. translate
  8. Programové výjimky
    1. FileNotFoundException
    2. InterpreterException
    3. MissingOriginException
    4. MissingPointException
    5. MissingWeightException
    6. NumberFormatException
    7. UnsolvableException
    8. WrongDataException
    9. WrongEquidistanceException
    10. WrongRatioException
  9. Poznámky
  10. Literatura

 

Úvod

Aplikace GTDiPS slouží pro provádění transformací diskrétní posloupnosti bodů. Hlavním důvodem pro použití této aplikace je požadavek na snížení počtu bodů, eliminaci šumu a přípravu pro grafický výstup.

 

Pojmy

Diskrétní posloupnost bodů
je posloupnost dvoudimenzionálních bodů (X,Y) respektive třídimenzionálních bodů (X,Y,Z). Třetí dimenze Z je chápana jako nezávislá, tj. neovlivňuje výsledek transfomace. Rozeznáváme počáteční posloupnost bodů (získanou například z měření) a konečnou posloupnost bodů, která je výsledkem použití zvoleného transformačního řetězu na počáteční posloupnost bodů.

Definiční metoda
slouží k nastavení dané transformace. Lze ji nalézt v definici transformačního řetězu.

Subjektivní souřadnicová rovina Xy
je lineárně transformovaná souřadnicová rovina XY. Jedná se o subjektivní změnu měřítka osy Y tak, aby její jednotky odpovídaly jednotkám osy X. Změna se provádí násobením koeficientem ratioY.

Transformace
je implementovaný algoritmus, který transformuje jednu posloupnost bodů do druhé. Počet bodů ve výsledné posloupnosti může být roven nebo může být odlišný od počtu bodů ve zdrojové posloupnosti v závislosti na dané transformaci.

Transformační řetěz
je posloupnost transformací. Předepisuje, jak má aplikace GTDiPS provádět zpracování počáteční posloupnosti bodů. Výstup předchozí transformace je vstupem do následující transformace. Transformační řetěz je definován souborem řetězu.

Výběrová kružnice
je kružnice v subjektivní souřadnicové rovině Xy.

Zdroj
je diskrétní posloupnost bodů vstupující do transformace. Zdrojový bod je bod z této posloupnosti.

 

Spuštění aplikace z konzoly

Aby bylo možno aplikaci GTDiPS spustit, musí být v operačním systému nainstalována Java platforma. Platformu lze stáhnout z adresy http://www.java.com/en/download/manual.jsp. Je-li Java platforma správně nainstalována, lze soubor aplikace gtdips.jar spustit.

Aplikace GTDiPS se spouští z konzoly operačního systému (pokud jí systém disponuje). Tento způsob se velmi dobře hodí pro hromadné zpracování dat, ale je náročnější na přípravu. Spuštění se provede zapsáním následujícího řetězce do konzoly operačního systému (v případě, že jsme přítomni v adresáři, kde je umístěn soubor gtdips.jar):

  java -jar gtdips.jar -inputFile [path][name] -outputFile [path][name] -chainFile [path][name] -columnMap [columnMapString]

kde [path] je cesta k danému souboru a [name] je jeho jméno. Argument [columnMapString] slouží pro volitelné mapování sloupců v datových souborech (více viz Formát datových souborů). Například mějme v adresáři C:/gtdips umístěn soubor gtdips.jar a adresář data, ve kterém jsou umístěny soubory source.txt, target.txt a chain.gtdips. Pak by spouštěcí řetězec z adresáře C:/gtdips vypadal takto:

  java -jar gtdips.jar -inputFile data/source.txt -outputFile data/target.txt -chainFile data/chain.gtdips

Uvedený oddělovač adresářů je závislý na operačním systému.

 

Implementované transformace

V aplikaci GTDiPS jsou implementovány následující transformace (s originálními anglickými názvy v abecedním pořadí). Jejich názvy jsou hypertextové odkazy, které vedou na podrobnější popis včetně příkladu použití.

AffineTransformation
Transformuje bodové pole pomocí afinní transformace, která vznikne složením lineární transformace a posunutí v subjektivní souřadnicové rovině Xy.

CentroidalTransformation
Výsledkem transformace jsou těžiště zdrojových bodů ležících v intervalech ekvidistantně rozdělené souřadnicové osy X. Rozdělení souřadnicové osy X je dáno počáteční souřadnicí X origin a délkou intervalu distance.

ConstantWeightTransformation
Transformace vytváří body v místě těžiště určeného počtu -- weight -- po sobě jdoucích zdrojových bodů. Výsledkem je menší nebo stejný počet bodů s konstantní váhou weight.

DerivativeLimitCrossDeletion
Transformace smaže zdrojové body, v nichž derivace překročí zadanou hodnotu derivativeLimit. Derivace je stanovena aproximací polynomem.

DerivativeTransformation
Transformace aproximuje zdrojové body z intervalu se středem v daném zdrojovém bodě s velikostí rovnou dvojnásobku distance polynomem zvoleného stupně. Y souřadnice daného bodu je po aproximaci nahrazena funkční hodnotou derivace polynomu.

EquidistantTransformation
Transformace vytváří body, jejichž souřadnice X leží ve středu intervalů (ok) ekvidistantní mřížky definované počáteční souřadnicí X origin a šířkou oka mřížky distance. Pro každou souřadnici X středu oka mřížky je vypočten jeden bod, jehož souřadnice Y je průměrem Y souřadnic zdrojových bodů ležících v oku mřížky.

FlowlineTransformation
Transformace odstraňuje úseky zdrojových bodů, které se neodchylují od srovnávací úsečky více, než je vzdálenost distance v subjektivní souřadnicové rovině Xy. Srovnávací úsečka se hledá pomocí aproximace zdrojových bodů metodou nejmenších čtverců. Přímkový úsek je nahrazen počátkem a koncem vypočtené úsečky.

PolynomialTransformation
Transformace aproximuje zdrojové body z intervalu se středem v daném zdrojovém bodě s velikostí rovnou dvojnásobku distance polynomem zvoleného stupně. Y souřadnice daného bodu je po aproximaci nahrazena funkční hodnotou polynomu.

SplineInterpolation
Transformace vytváří body, které vzniknou interpolací zdrojových bodů pomocí parametrického kubického splajnu. Zdrojové body zůstanou zachovány. Umístění nových výsledných bodů mezi danou dvojicí po sobě jdoucích zdrojových bodů, tvořících segment splajnu, je rovnoměrné. Počet nových výsledných bodů je v každém segmentu stejný a je dán parametrem childsPerSegment.

TrackingTransformation
Transformace nahrazuje zdrojové body ležící ve výběrové kružnici o poloměru distance těžištěm těchto bodů. Poloha kružnice je dána posledním vypočteným bodem. Je-li výběrová kružnice prázdná, bude středem kružnice zdrojový bod, který je nalezen jedním ze dvou algoritmů.

XDuplicityTransformation
Transformace nahrazuje po sobě jdoucí zdrojové body s blízkou souřadnicí X, danou tolerancí distance, těžištěm těchto bodů.

 

Formát datových souborů

Aplikace GTDiPS načítá a ukládá diskrétní posloupnosti bodů z datových souborů typu prostý text (soubor obsahuje pouze textové znaky a znaky pro řádkování). Jednotlivé body jsou v těchto souborech uloženy ve formě dvojice resp. trojice souřadnic oddělené tabelátorem na samostatném řádku, viz.

Změnu pořadí sloupců v souboru lze provést při spouštění aplikace. Pomocí návěští -columnMap s argumentem [columnMapString] lze sloupce libovolně namapovat. Implicitně je řetězec [columnMapString] nastaven na xyz. Chceme-li například zaměnit první sloupec za druhý, bude tento řetězec vypadat yx respektive yxz.

 

Soubor řetězu

Aplikace GTDiPS je schopna provádět posloupnost transformací. Tato posloupnost je definována v souboru s doporučeným jménem [projekt].chain.gtdips, kde [projekt] odpovídá zvolenému jménu projektu. V této kapitole je popsán obecný formát tohoto souboru a definiční metody, které lze použít.

Soubor řetězu je typu prostý text.

Aplikace GTDiPS při spuštění načte soubor řetězu a nejprve vytvoří objektovou reprezentaci transformačního řetězu dle uvedených definičních metod. Teprve poté se spustí vlastní výpočet. Z toho vyplývá, že pořadí definičních metod ovlivňuje pouze pořadí vytváření a nastavování jednotlivých transformací (nedochází k interpretaci souboru při výpočtu transformací).

Obsah souboru řetězu může vypadat například takto:

  //odstranění X duplicit
  new XDuplicityTransformation
  setDistance 0.00001 //X tolerance odchylky

  //vyhlazení posloupnosti
  new PolynomialTransformation
  setDistance 0.02 //poloměr okolí
  setDegree 2 //stupeň polynomu

  //snížení počtu bodů
  new TrackingTransformation
  setDistance 0.001 //poloměr výběrové kružnice
  setRatioY 0.1 //koeficient osy Y
  setMinXOrigin

Tento příklad definuje řetěz tří po sobě jdoucích transformací. Nejprve se má provést XDuplicityTransformation poté PolynomialTransformation a nakonec TrackingTransformation. Každá z těchto transformací je nastavena podle bezprostředně za ní uvedených definičních metod.

Obecný tvar souboru řetězu lze zapsat takto:

  //volitelný komentář
  new [TransformationName1] //definice transformace 1
  [DefinitionMethod1] [Argument1] [Argument2] ... //volání definiční metody transformace 1
  [DefinitionMethod2] [Argument1] [Argument2] ... //volání definiční metody transformace 1
  ...

  new [TransformationName2] //definice transformace 2
  [DefinitionMethod1] [Argument1] [Argument2] ... //volání definiční metody transformace 2
  [DefinitionMethod2] [Argument1] [Argument2] ... //volání definiční metody transformace 2
  ...

  ...

U definičních metod v rámci jedné transformace záleží na jejich pořadí pouze tehdy, ovlivňuje-li toto pořadí nastavení transformace. Pro příklad uveďme metody, které se navzájem negují (vyvolání jedné metody zneplatní nastavení při vyvolání druhé). Z těchto metod bude platit ta, která je uvedena jako poslední.

 

Definiční metody

Použitelnost definičních metod závisí na dané transformaci. V následujícím seznamu definičních metod je uvedeno, pro které transformace ji lze použít a s jakým významem:

calculateWeight
Význam:Nastaví váhu výsledného bodu na průměrný počet bodů v intervalu osy X délky distance.
Použitelnost:ConstantWeightTransformation
Viz také:setDistance, setWeight

setDerivativeLimit
Význam:Nastaví limit derivace.
Použitelnost:DerivativeLimitCrossDeletion

flowingCircle
Význam:Umožní přesunutí výběrové kružnice do posledního vypočteného bodu. Pokud není uveden, hledá se nový počátek dle zvoleného algoritmu.
Použitelnost:TrackingTransformation

ignoreMissingPoints
Význam:Zamezí předčasnému ukončení aplikace GTDiPS při vzniku výjimky MissingPointException. Objeví se pouze varování.
Použitelnost:DerivativeTransformation, PolynomialTransformation

ignoreUnsolvable
Význam:Zamezí předčasnému ukončení aplikace GTDiPS při vzniku výjimky UnsolvableException. Objeví se pouze varování.
Použitelnost:DerivativeTransformation, PolynomialTransformation

invert
Význam:Invertuje aktuální afinní transformaci.
Použitelnost:AffineTransformation
Viz také:rotate, rotateDegrees, scale, shear, translate

jumpToOldest
Význam:Změní algoritmus hledání nového počátku. Novým počátkem bude vždy nejstarší zbývající zdrojový bod (nejstarším bodem je bod s nejnižším pořadovým číslem v posloupnosti).
Použitelnost:TrackingTransformation
Viz také:setOldestOrigin

rotate [RealNumber]
Význam:Přidá k afinní transformaci otočení o úhel v radiánech.
Použitelnost:AffineTransformation
Viz také:invert, rotateDegrees, scale, shear, translate

rotateDegrees [RealNumber]
Význam:Přidá k afinní transformaci otočení o úhel ve stupních.
Použitelnost:AffineTransformation
Viz také:invert, rotate, scale, shear, translate

scale [RealNumber] [RealNumber]
Význam:Přidá k afinní transformaci zvětšení/zmenšení.
Použitelnost:AffineTransformation
Viz také:invert, rotate, rotateDegrees, shear, translate

setChildsPerSegment [IntegerNumber]
Význam:Určuje počet nových výsledných bodů v každém segmentu splajnu.
Použitelnost:SplineInterpolation

setDegree [IntegerNumber]
Význam:Nastavuje stupeň aproximačního polynomu.
Použitelnost:DerivativeTransformation, PolynomialTransformation

setDistance [RealNumber]
Význam:Nastavuje klíčový parametr většiny transformací, který určuje délku, vzdálenost nebo poloměr v jednotkách osy X.
Použitelnost:CentroidalTransformation, ConstantWeightTransformation, DerivativeTransformation, EquidistantTransformation, FlowlineTransformation, PolynomialTransformation, TrackingTransformation, XDuplicityTransformation

setMaxXOrigin
Význam:Nastavuje počáteční bod XY na zdrojový bod s maximální souřadnicí X.
Použitelnost:TrackingTransformation
Viz také:setMinXOrigin, setOldestOrigin, setOrigin

setMinXOrigin
Význam:Nastavuje počáteční souřadnici X nebo počáteční bod XY na minimální souřadnici X zdrojových bodů respektive na zdrojový bod s minimální souřadnicí X.
Použitelnost:CentroidalTransformation, EquidistantTransformation, TrackingTransformation
Viz také:setOrigin

setOldestOrigin
Význam:Nastavuje počáteční bod XY na první zdrojový bod.
Použitelnost:TrackingTransformation
Viz také:setMaxXOrigin, setMinXOrigin, setOrigin

setOrigin [RealNumber]
Význam:Nastavuje počáteční souřadnici X.
Použitelnost:CentroidalTransformation, EquidistantTransformation
Viz také:setMinXOrigin

setOrigin [RealNumber] [RealNumber]
Význam:Nastavuje počáteční bod XY.
Použitelnost:TrackingTransformation
Viz také:setMaxXOrigin, setMinXOrigin, setOldestOrigin

setRatioY [RealNumber]
Význam:Nastavuje koeficient osy Y pro přepočet na jednotky osy X, viz subjektivní souřadnicová rovina Xy.
Použitelnost:FlowlineTransformation, TrackingTransformation

setWeight [RealNumber]
Význam:Nastaví váhu výsledného bodu.
Použitelnost:ConstantWeightTransformation
Viz také:calculateWeight

shear [RealNumber] [RealNumber]
Význam:Přidá k afinní transformaci zkosení.
Použitelnost:AffineTransformation
Viz také:invert, rotate, rotateDegrees, scale, translate

translate [RealNumber] [RealNumber]
Význam:Přidá k afinní transformaci posunutí.
Použitelnost:AffineTransformation
Viz také:invert, rotate, rotateDegrees, scale

 

Programové výjimky

Nastavení transformace v kombinaci se vstupními daty může vyvolat různé výjimky, které způsobí předčasné ukončení aplikace GTDiPS. Aplikace v takovém případě tuto výjimku vypíše včetně místa, kde k ní došlo. Výpis může vypadat například takto:

  java.io.FileNotFoundException: source.txt (System nemuze nalezt uvedeny soubor)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.(Unknown Source)
    at java.io.FileInputStream.(Unknown Source)
    at java.io.FileReader.(Unknown Source)
    at cz.kitnarf.discretepointsequence.DiscretePointSequence.parseFile(DiscretePointSequence.java:32)
    at cz.kitnarf.gtdips.GTDiPS.main(GTDiPS.java:148)

Nejběžnější výjimky, které mohou nastat jsou následující:

FileNotFoundException
Význam:Je vyvolána v případě, že nelze nalézt určený soubor.
Opatření:Zkontrolovat soubory a jejich určení (cestu a jméno).

InterpreterException
Význam:Je vyvolána v případě, že se vyskytla chyba při interpretaci souboru řetězu.
Opatření:Rozpoznat chybu v souboru dle podrobností uvedených ve výpisu výjimky.
Viz také:soubor řetězu

MissingOriginException
Význam:Je vyvolána v případě, že není nastaven počáteční bod origin.
Opatření:Zkontrolovat nastavení parametru origin.
Viz také:setOrigin

MissingPointException
Význam:Je vyvolána v případě, že není k dispozici dostatečný počet zdrojových bodů.
Opatření:Zkontrolovat zdrojová data, ověřit správnost nastavení parametru distance.
Viz také:ignoreMissingPoints, setDistance

MissingWeightException
Význam:Je vyvolána v případě, že není nastaven parametr weight.
Opatření:Zkontrolovat nastavení parametru weight.
Viz také:setWeight

NumberFormatException
Význam:Je vyvolána v případě, že data z datového souboru nelze převést na reálné číslo.
Opatření:Ověřit formát datového souboru.
Viz také:Formát datových souborů

UnsolvableException
Význam:Je vyvolána v případě, že nelze vyřešit soustavu rovnic.
Opatření:Různá dle dané transformace.
Viz také:ignoreUnsolvable

WrongDataException
Význam:Je vyvolána v případě, že nelze načíst data z datového souboru, případně data v souboru nejsou konzistentní.
Opatření:Ověřit formát datového souboru.
Viz také:Formát datových souborů

WrongEquidistanceException
Význam:Je vyvolána v případě, že není správně nastaven parametr distance.
Opatření:Ověřit správnost nastavení parametru distance.
Viz také:setDistance

WrongRatioException
Význam:Je vyvolána v případě, že není správně nastaven parametr ratioY.
Opatření:Ověřit správnost nastavení parametru ratioY.
Viz také:setRatioY

 

Poznámky

Domovská stránka aplikace GTDiPS je http://gtdips.kitnarf.cz.

Tento výsledek byl získán za finančního přispění MŠMT ČR, projekt 1M0579, v rámci činnosti výzkumného centra CIDEAS.

Děkuji za spolupráci svým kolegům Janu Eliášovi, Davidovi Lehkému a Václavovi Veselému.

 

Literatura

Eliáš, J., Vořechovský, M, (2006): Software SMARTEDT: SMoothing by Averaging and Reduction of Testing DaTa, sborník konference Modelování v mechanice 2006, VŠB-TU Ostrava, Česká republika

Wikipedia, the free encyclopedia: Affine transformation, http://en.wikipedia.org

Wikipedia, the free encyclopedia: Isolated point, http://en.wikipedia.org

Wikipedia, the free encyclopedia: Plain text, http://en.wikipedia.org

Wikipedia, the free encyclopedia: Sequence, http://en.wikipedia.org

Wolfram MathWorld: Cubic Spline, http://mathworld.wolfram.com