wip chaikin

This commit is contained in:
Motiejus Jakštys 2020-06-18 10:38:05 +03:00
parent c452e595f0
commit 0131ef85d1
4 changed files with 70 additions and 5 deletions

View File

@ -2,6 +2,7 @@ CROSSING = 622916 6109267 626066 6111487 # xmin ymin xmax ymax
ZEIMENA_TOLERANCES = 128 256 512 1024 2048 4096
SINEWAVE_TOLERANCES = 2 16 32
CROSSING_TOLERANCES = 64 128 256
CHAIKIN_CROSSING_TOLERANCES = 128 256
SINEWAVE_SIZE = 120x48
GEN1 = $(addsuffix .pdf, \
$(addprefix sinewave2_douglas_,$(SINEWAVE_TOLERANCES)) \
@ -13,12 +14,15 @@ GEN2 = $(addsuffix .pdf, \
$(addprefix overlaid_zeimena_visvalingam_,$(CROSSING_TOLERANCES)) \
$(addprefix overlaid_sinewave2_douglas_,$(SINEWAVE_TOLERANCES)) \
$(addprefix overlaid_sinewave2_visvalingam_,$(SINEWAVE_TOLERANCES)))
GEN3 = $(addsuffix .pdf, \
$(addprefix overlaid_chaikin_zeimena_douglas_,$(CHAIKIN_CROSSING_TOLERANCES)) \
$(addprefix overlaid_chaikin_zeimena_visvalingam_,$(CHAIKIN_CROSSING_TOLERANCES)))
.PHONY: all
all: mj-referatas.pdf mj-prezentacija.pdf
mj-referatas.pdf: mj-referatas.tex version.tex bib.bib zeimena.pdf \
sinewave1.pdf sinewave2.pdf crossing.pdf $(GEN1) $(GEN2)
sinewave1.pdf sinewave2.pdf crossing.pdf $(GEN1) $(GEN2) $(GEN3)
latexmk -shell-escape -g -pdf $<
mj-prezentacija.pdf: mj-prezentacija.tex ../../misc/Logo_vilniaus_universitetas.png \
@ -48,6 +52,12 @@ define algo2overlay
overlaid_$(1)_$(2)_%.pdf: layer2img.py db/.faux_$(1)_$(2)_%
./layer2img.py $(3) --group1-table=$(1) --group2-table=$(1)_$(2)_$$* \
--outfile $$@
chaikin_overlaid_$(1)_$(2)_$(3)_%.pdf: layer2img.py db/.chaikin_$(1)_$(2)_%
./layer2img.py $(3) \
--group1-table=$(1) \
--group2-table=$(1)_$(2)_$$* \
--group3-table=chaikin_$(1)_$(2)_$$* \
--outfile $$@
endef
define gpkg2pdf
$(1): $(2) ./layer2img.py

View File

@ -139,3 +139,14 @@
year={1991},
publisher={Longman Scientific \& Technical London}
}
@article{chaikin1974algorithm,
title={An algorithm for high-speed curve generation},
author={Chaikin, George Merrill},
journal={Computer graphics and image processing},
volume={3},
number={4},
pages={346--349},
year={1974},
publisher={Elsevier}
}

13
II/Referatas/chaikin.sql Normal file
View File

@ -0,0 +1,13 @@
DROP TABLE IF EXISTS :tbl;
CREATE TABLE :tbl (
fid serial NOT NULL,
geom geometry(MULTILINESTRING, 3346)
);
INSERT INTO :tbl (geom) (
SELECT
ST_ChaikinSmoothing (geom, 3) AS geoms
FROM
:src);

View File

@ -148,8 +148,14 @@ are often used for line generalization:
\item \cite{visvalingam1993line} via
\href{https://postgis.net/docs/ST_SimplifyVW.html}{PostGIS SimplifyVW}.
\end{itemize}
Since both algorithms produce jaggy output lines, it is worthwhile to process
those through a widely available \cite{chaikin1974algorithm} smoothing
algorithm via \href{https://postgis.net/docs/ST_ChaikinSmoothing.html}{PostGIS
ChaikinSmoothing}.
Review of the available algorithms will be followed by desiderata for a
possible open-source addition. In the end, we will issue a recommendation,
which algorithm can be picked up and implemented by an avid GIS developer.
@ -251,10 +257,10 @@ a large circle, ilustrated in figure~\ref{fig:blunt-bent}.
\label{fig:blunt-bent}
\end{figure}
Once zoomed in to the river crossing area with {\DP} and {\VW} applied, it becomes apparent that both large
blunts are normalized to single lines, the shape becomes jagged and unpleasant
for the eye. See table~\ref{tab:comparison-crossing} on
page~\pageref{tab:comparison-crossing}.
Once zoomed in to the river crossing area with {\DP} and {\VW} applied, it
becomes apparent that both large blunts are normalized to single lines, the
shape becomes jagged and unpleasant for the eye. See
table~\ref{tab:comparison-crossing} on page~\pageref{tab:comparison-crossing}.
\begin{figure}[h]
\renewcommand{\tabularxcolumn}[1]{>{\center\small}m{#1}}
@ -280,6 +286,31 @@ page~\pageref{tab:comparison-crossing}.
\label{tab:comparison-crossing}
\end{figure}
As the reader may observe, the output lines, especially with higher tolerances,
are jaggy. Higher-tolerance jaggy outputs from {\VW} and {\DP}, passed through Chaikin,
are displayed in table~\ref{tab:chaikin-crossing} on
page~\page{tab:chaikin-crossing}.
\begin{figure}[h]
\renewcommand{\tabularxcolumn}[1]{>{\center\small}m{#1}}
\begin{tabularx}{\textwidth}{ p{2.1cm} | X | X | }
Tolerance DP/VW &
Douglas \& Peucker &
Visvalingam-Whyatt \tabularnewline \hline
128/16384 &
\includegraphics[width=\linewidth]{chaikin_overlaid_zeimena_douglas_128} &
\includegraphics[width=\linewidth]{chaikin_overlaid_zeimena_visvalingam_128} \tabularnewline \hline
256/65536 &
\includegraphics[width=\linewidth]{chaikin_overlaid_zeimena_douglas_256} &
\includegraphics[width=\linewidth]{chaikin_overlaid_zeimena_visvalingam_256} \tabularnewline \hline
\end{tabularx}
\caption{Chaikin-smoothened {\DP} and {\VW} on river crossing area}
\label{tab:chaikin-crossing}
\end{figure}
There is another issue on the wishlist beyond jaggyness and loss of large bents
-- combining close bends to larger ones.