Tag Archives: image processing

Gradient-descent optimized recursive filters for deconvolution / deblurring

This post is a follow-up to my post on deconvolution/deblurring of the images. In my previous blog post, I discussed the process of “deconvolution” – undoing a known convolution operation. I have focused on traditional convolution filters – “linear phase, … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , , | Leave a comment

Progressive image stippling and greedy blue noise importance sampling

Introduction I recently read the “Gaussian Blue Noise” paper by Ahmed et al. and was very impressed by the quality of their results and the rigor of their method. They provide a theoretical framework to analyze the quality of blue … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , , | 3 Comments

Transforming “noise” and random variables through non-linearities

This post covers a topic slightly different from my usual ones and something I haven’t written much about before – applied elements of probability theory. We will discuss what happens with “noise” – a random variable – when we apply … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , , | Leave a comment

Fast, GPU friendly, antialiasing downsampling filter

In this shorter post, I will describe a 2X downsampling filter that I propose as a “safe default” for GPU image processing. It’s been an omission on my side that I have not proposed any specific filter despite writing so … Continue reading

Posted in Code / Graphics | Tagged , , , , , , | 6 Comments

Exposure Fusion – local tonemapping for real-time rendering

In this post I want to close the loop and come back to the topic I described ~6y ago! Local tonemapping (I’ll refer to it as LTM) – a component I considered a missing piece in video games rendering, especially … Continue reading

Posted in Code / Graphics | Tagged , , , , , | Leave a comment

Procedural Kernel (Neural) Networks

Last year I worked for a bit on a fun research project that ended up published as an arXiv “pre-print” / technical report and here comes a few paragraph “normal language” description of this work. Neural Networks are taking over … Continue reading

Posted in Code / Graphics | Tagged , , , , | Leave a comment

Study of smoothing filters – Savitzky-Golay filters

Last week I saw Daniel Holden tweeting about Savitzky-Golay filters and their properties (less smoothing than a Gaussian filter) and I got excited… because I have never heard of them before and it’s an opportunity to learn something. When I … Continue reading

Posted in Code / Graphics | Tagged , , , , , | Leave a comment

Practical Gaussian filtering: Binomial filter and small sigma Gaussians

Gaussian filters are the bread and butter of signal and image filtering. They are isotropic and radially symmetric, filter out high frequencies extremely well, and just look pleasant and smooth. In this post I will cover two of my favorite … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , | 5 Comments

Processing aware image filtering: compensating for the upsampling

This post summarizes some thoughts and experiments on “filtering aware image filtering” I’ve been doing for a while. The core idea is simple – if you have some “fixed” step at the end of the pipeline that you cannot control … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , | 7 Comments

Comparing images in frequency domain. “Spectral loss” – does it make sense?

Recently, numerous academic papers in the machine learning / computer vision / image processing domains (re)introduce and discuss a “frequency loss function” or “spectral loss” – and while for many it makes sense and nicely improves achieved results, some of … Continue reading

Posted in Code / Graphics | Tagged , , , , , | 6 Comments

Neural material (de)compression – data-driven nonlinear dimensionality reduction

In this post I come back to something I didn’t expect coming back to – dimensionality reduction and compression for whole material texture sets (as opposed to single textures) – a significantly underexplored topic. In one of my past posts … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , , , | 5 Comments

Computing gradients on grids of pixels and voxels – forward, central, and… diagonal differences

In this post, I will focus on gradients of image signals defined on grids in computer graphics and image processing. Specifically, gradients / derivatives of images, height fields, distance fields, when they are represented as discrete, uniform grids of pixels … Continue reading

Posted in Code / Graphics | Tagged , , , , , | 8 Comments

Bilinear down/upsampling, aligning pixel grids, and that infamous GPU half pixel offset

It’s been more than two decades of me using bilinear texture filtering, a few months since I’ve written about bilinear resampling, but only two days since I discovered a bug of mine related to it. 😅 Similarly, just last week … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , | 11 Comments

Compressing PBR material texture sets with sparsity and k-SVD dictionary learning

Introduction In this blog post, I am going to continue exploration of compressing whole PBR texture sets together (as opposed to compressing each texture from the set separately) and using the fact that those textures are strongly correlated. In my … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , , , | 8 Comments

Dimensionality reduction for image and texture set compression

In this blog post I am going to describe some of my past investigations on reducing the number of channels in textures / texture sets automatically and generally – without assuming anything about texture contents other than correspondence to some … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , | 17 Comments

“Optimizing” blue noise dithering – backpropagation through Fourier transform and sorting

Introduction This will be a blog post that is second in an (unanticipated) series on interesting uses of the JAX numpy autodifferentiation library, as well as an extra post in my very old post series on dithering in games and … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , | 8 Comments

Bilinear texture filtering – artifacts, alternatives, and frequency domain analysis

In this post we will look at one of the staples of real-time computer graphics – bilinear texture filtering. To catch your interest, I will start with focusing on something that is often referred to as “bilinear artifacts”, trapezoid/star-shaped artifact … Continue reading

Posted in Code / Graphics | Tagged , , , , , | 12 Comments

Using JAX, numpy, and optimization techniques to improve separable image filters

In today’s blog post I will look at two topics: how to use JAX (“hyped” new Python ML / autodifferentiation library), and a basic application that is follow-up to my previous blog post on using SVD for low-rank approximations and … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , , , , | 11 Comments

Separate your filters! Separability, SVD and low-rank approximation of 2D image processing filters

In this blog post, I explore separable convolutional image filters: how can we check if a 2D filter is separable, and how to compute separable approximations to any arbitrary 2D filter represented in a numerical / matrix form using SVD. Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , , , , | 16 Comments

Local linear models and guided filtering – an alternative to bilateral filter

Intro In this blog post I am going to describe an alternative tool for the graphics and image processing programmers’ toolbox – guided filtering. Guided filtering is a really handy tool that I learned about from my coworkers, and I … Continue reading

Posted in Code / Graphics | Tagged , , , , , , , , | 7 Comments