3 ms·
> the author of that algorithm: https://en.wikipedia.org/wiki/Alan_W._Paeth https://en.wikipedia.org/wiki/Alan_W._Paeth It seems that this algorithm was indepe
by enriquto 4y ago
> the author of that algorithm: https://en.wikipedia.org/wiki/Alan_W._Paeth https://en.wikipedia.org/wiki/Alan_W._Paeth
It seems that this algorithm was independently discovered by several authors, some of them earlier than Paeth's:
* H.Kiesewetter, A.Graf, Rotation in Digital Grids and Corresponding Models, Tech. Rep. Zentralinstitut für Kybernetik und Informationsprozesse, Akademie de Wissenschaften der DDR, 1985
* A.W.Paeth, A fast algorithm for general raster rotation, Proceedings GIVIP 1986
* P.E.Danielsson, M.Hammerin, High-accuracy rotation of
images, CVGIP: Graphical Models and Image Processing, 1992.
And this algorithm was implemented on the image package of the ICL Distributed Array Processor [0] as soon as 1984.
The most cited reference for this method seems to be the famous "Yaroslavski" rotation:
* M.Unser, P.Thevenaz, L.Yaroslavski, Convolution-Based Interpolation for
Fast, High-Quality Rotation of Images, IEEE Trans. Image Processing 1995
This is the same method but the shears are computed as filters in the frequency domain, thus they are exactly invertible (which is not the case if you use splines to perform the shears). Here the method really shines: you can rotate 36 times by 10 degrees and get back to the initial image, which is really spectacular.
I wouldn't be surprised if the decomposition itself was a well-known older result in linear algebra, for it seems to be closely related to the QR factorisation.
[0] https://en.wikipedia.org/wiki/ICL_Distributed_Array_Processor https://en.wikipedia.org/wiki/ICL_Distributed_Array_Processo...
- Y_Y 4y agoA 2d shear looks like [[1,a],[0,1]] and a rotation of q is [[cos q, -sin q],[sin q, cos q]] So you have a system like this to solve: [[1,a],[0,1]]*[[1,0],[b,1]]*[[1,c],[0,1]] == [[cos q, -sin q],[sin q, cos q]] It's not hard to solve (despite being overdetermined) and you can even throw that line above into a CAS directly. The solution is a bit long to paste here though.