The Scale Invariant Feature Transform (SIFT) algorithm has been a cornerstone in computer vision for tasks like feature detection, object recognition, and image stitching. With its patents now expired, SIFT is freely available for use in any project, making it an essential tool for developers and researchers alike. What is SIFT? SIFT is a feature detection algorithm developed to identify and…
In the ever-evolving field of digital image processing, new algorithms for image upscaling are constantly emerging. One such method, EDIZ (Error Diffusion Image Zooming), proposed by Saryazdi et al., claims to offer a simple yet effective approach to image enlargement. However, as with any new technique, it's crucial to examine its merits and limitations critically. As always, you will find an…
I've been looking at various error diffusion techniques for an internal use case and was first pointed to Structure-Aware Error Diffusion which worked pretty well, but was pretty slow. I then came across a different paper: Laplacian Based Structure-Aware Error Diffusion. This article is about that technique. Its from 2010 so not super recent, but its new to me so here we go.First up, why error…
For a great many years I've had a PCM WAV file writer which is super duper simple (<20 LoC).I recently came across a git repo where somebody made a super high quality ADPCM encoder called ADPCM-XQ (stands for Xtreme Quality ADPCM Encoder/Decoder). I've looked at that code, re-wrote it to single file STB style, and greatly improved the algorithm it uses, fixed some bugs it had in the algorithms,…
Quality here is just incredible IMO. This is using a GAN so its generating details like brush strokes and other minor details that don't actually exist in the source DVD material into what it thinks the original material looked like - and the results are stunning. I wish I could show you all the entire film, but can't of course. Instead I give you a 30s clip. Behold!…
I wanted to write a blog post about an unusual usage of cross products. Namely, that you can take two points and cross them together to get a line, and take two lines and cross product them to get the intersection point -- and this works in 3D too! Cross product 3 vectors and you get the plane that it represents, cross product 3 planes and get the point they intersect at! I learned about this a…
For educational purposes, this is being posted as a test of the real-time SRNN from the prior blog post. Everything is pretty decent - and this version again only looks at a frame at a time and doesn't consider past or future frames for the super-resolution (thus vast room for improvement).It has issues where it magnifies/interprets DCT artifacts as meaningful - but I suppose that's to be…
The following AI Image Upscaler is made from a single file deep neural network library (jo_nn.h) - and will have the ability to ship to many common user targets (CPU/GLES/OpenGL/Vulkan/DX11/DX12/Metal). The plan is to release jo_nn.h once its more feature complete with regards to the production targets. Currently, CPU/GLES/WebGL/OpenGL/Vulkan is in good shape.Until the release, an example output…
This is an article going over the technique to compress index buffers presented in my 2007,2008 presentations in more detail here. Update: Fixed some bugs in my pseudo code. Also important to point out that your choice of index buffer optimizer greatly affects the effectiveness of this technique. Hence, look for a future post where I talk about that a bit. The process is as follows:First clean up…
The kodak set is great, but I needed some higher resolution versions of them for some testing that hopefully was more representative regarding compression than a straight up bilinear interpolation - so I ran it through my super-resolution NN and got some 2x outputs. I figure this would probably be useful to others as well, so I'm posting the data set here for you! kodak.zipFile Size: 84953 kbFile…