Top all-time · #2040
Bart Wronski
Personal blog · bartwronski.comprogrammingscience
Bart Wronski's personal blog at bartwronski.com covers programming and science. Since 2014, 36 different Hacker News readers have linked it 62 times, most often “Bilinear down/upsampling, aligning pixel grids, and that infamous GPU half pixel (2021)”. The last post was in 2024, but the archive is still widely read.
Too few sampled comments (12) to say how often HN recommends it.?
Why HN links it
HN readers link Bart Wronski's blog for graphics and image-processing write-ups, mainly his dithering series and posts on blur, deconvolution and resampling, which commenters cite as references.
- Recommended for · 1 comments
- One commenter said folks interested in dithering, and blue noise dithering in particular, should read the posts.
Summarised by Claude from a sample of 12 HN comments that link here. Each comment is marked recommending, critical or neutral (citing without judging); how this works.
Technology, programming, art, machine learning, image and signal processing
Most-linked posts?
- Bilinear down/upsampling, aligning pixel grids, and that infamous GPU half pixel (2021)4 people · 4 mentions · first linked 2021-02-17
- Technical debt… or technical weight?4 people · 4 mentions · first linked 2016-06-27
- Why are video games graphics challenging? Productionizing rendering algorithms3 people · 4 mentions · first linked 2020-12-28
- Bilinear texture filtering – artifacts, alternatives, frequency domain analysis3 people · 3 mentions · first linked 2020-04-15
- I use ChatGPT daily (scientist/coder perspective)3 people · 3 mentions · first linked 2024-01-22
- Separability, SVD and low-rank approximation of 2D image processing filters3 people · 3 mentions · first linked 2020-02-03
- Is This a Branch?3 people · 3 mentions · first linked 2021-01-19
- Removing blur from images – deconvolution and using simple image filters3 people · 3 mentions · first linked 2022-05-26
- Dithering in Games – Mini Series3 people · 3 mentions · first linked 2019-12-21
- /2016/10/30/dithering-part-three-real-world-2d-quantization-dithering/2 people · 3 mentions · first linked 2021-11-15
What Hacker News says?
Folks interested in learning more about dithering in genreal or blue noise dithering in particular should read Bart Wronski's blog posts here: https://bartwronski.com/2016/10/30/dithering-in-games-mini-s...
Comment linking /2016/10/30/dithering-in-games-mini-series/
on “Ditherpunk: The article I wish I had about monochrome image dithering”Submitted Why are video games graphics challenging? Productionizing rendering algorithms as a story · 309 points
HN discussionYou want a deconvolution pipeline like https://bartwronski.com/2022/05/26/removing-blur-from-images... Or more likely https://www.cse.cuhk.edu.hk/~leojia/projects/motion_deblurri... for video
Comment linking /2022/05/26/removing-blur-from-images-deconvolution-and-using-optimized-simple-filters/
on “Nano Banana Pro”Submitted Bilinear down/upsampling, aligning pixel grids, and that infamous GPU half pixel (2021) as a story · 136 points
HN discussionCool, interesting links to code -- thank you! I chased down Intel's paper the code linked to describing how it works on archive.org. https://web.archive.org/web/20110317025924/https://software.... It's not just about using SIMD instructions (they help), and laying out memory to optimize cache performance (which also helps), but most importantly that Gaussian blur is a "separable filter" that you can break up into a…
Comment linking /2020/02/03/separate-your-filters-svd-and-low-rank-approximation-of-image-filters/
on “It's always been you, Canvas2D”Submitted Is This a Branch? as a story · 136 points
HN discussionAs a toy example if you have pixels a,b,c and you blur to (a+b)/2,(b+c)/2, you can recover back c - a. You might be able to have a good estimate of the boundary condition ("a"), e.g. you can just use (a+b)/2 as an approximation for "a", so the recovered result might look fairly close. You'll basically want to look up the area of deconvolution. You can interpret it in linear algebra terms as trying to invert an ill-c…
Comment linking /2022/05/26/removing-blur-from-images-deconvolution-and-using-optimized-simple-filters/
on “It's easier than ever to de-censor videos”Submitted Removing blur from images – deconvolution and using simple image filters as a story · 131 points
HN discussionGood article, but it uses less than ideal formula for weights of the gaussian blur kernel. Gaussian function for coefficients is fine for large sigmas, but for small blur radius you better integrate properly. Luckily, C++ standard library has std::erf function you gonna need for the proper formula. Here’s more info: https://bartwronski.com/2021/10/31/practical-gaussian-filter...
Comment linking /2021/10/31/practical-gaussian-filter-binomial-filter-and-small-sigma-gaussians/
on “Video Game Blurs (and how the best one works)”Submitted Using JAX, numpy, and optimization techniques to improve separable image filters as a story · 101 points
HN discussionI've experimented with that. It only works if you pick you pick a form of ordered dithering, like a Bayer index or Interleaved Gradient Noise[0][1]. Which looks pretty terrible compared to error diffusion dithering approaches like Sierra3. And even if you use ordered dithering it only somewhat helps with compression. [0] https://bartwronski.com/2016/10/30/dithering-part-three-real... [1] https://www.iryoku.com/next-…
Comment linking /2016/10/30/dithering-part-three-real-world-2d-quantization-dithering/
on “Websites should not use dithered images”Submitted (Unofficial) Insider guide to tech interviews as a story · 89 points
HN discussionCurious to see whether more recent dithering approaches would produce better results. They don't even have to be more resource hungry than the classic Bayer or Floyd-Steinberg dithers! Interleaved Gradient Noise[0][1][2] comes to mind as an alternative to Bayer, and it can even be approximated quite well with just 8-bit operations! Basically, use the following function to determine your threshold based on pixel posi…
Comment linking /2016/10/30/dithering-part-three-real-world-2d-quantization-dithering/
on “Modos Paper Monitor Pre-Launch on Crowd Supply”Submitted On Leaving California and the Silicon Valley as a story · 71 points
HN discussionI meant about where this line comes from: mask = masks[0][0] Presumably 0 is the class ID? For someone new to ML or object detection, it might not be obvious why you take the first channel here. Also recent related reading: https://bartwronski.com/2020/03/15/using-jax-numpy-and-optim... HN Discussion: https://news.ycombinator.com/item?id=22590360&ref=hvper.com&...
Comment linking /2020/03/15/using-jax-numpy-and-optimization-techniques-to-improve-separable-image-filters/
on “Bokehlicious Selfies”Submitted Separability, SVD and low-rank approximation of 2D image processing filters as a story · 54 points
HN discussionThe major dithering algorithm that's missing from this list is blue-noise dithering. This is very similar to "ordered dithering"; you can think of ordered dithering as either thresholding the pixel values with a different threshold value on each pixel, following a regular pattern, or as adding a different offset value to each pixel, following a regular pattern, and thresholding the result with a constant threshold.…
Comment linking /2016/10/30/dithering-part-three-real-world-2d-quantization-dithering/
on “Image Dithering: Eleven Algorithms and Source Code (2012)”Submitted Bilinear downsampling, aligning pixel grids and the infamous half pixel offset as a story · 46 points
HN discussionAssasin's Creed mentions of Geometry Shaders being used - (March, 2014, GDC) - https://bartwronski.files.wordpress.com/2014/03/ac4_gdc.pdf possibly many others. EDIT: Here is much more updated version (4 versions actually with much more detailed images/video and more notes) - from the author's web-page - http://bartwronski.com/2014/05/09/digital-dragons-2014-slide... oh, and if you are looking for some fun graphics…
Comment linking /2014/05/09/digital-dragons-2014-slides/
on “Why Geometry Shaders Are Slow (Unless You’re Intel)”Submitted Dithering in Games, Part 1: Simple Quantization (2016) as a story · 33 points
HN discussionThis is part 1 of a series: https://bartwronski.com/2016/10/30/dithering-in-games-mini-s... . We changed the URL from that to the first post, since generally it's better to link to one element of a list rather than to the list itself ( https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que... ).
Comment linking /2016/10/30/dithering-in-games-mini-series/
on “Dithering in Games, Part 1: Simple Quantization (2016)”Submitted Gradients on grids of pixels/voxels – forward, central, and diagonal differences as a story · 21 points
HN discussionThe half pixel offset makes sense, though. If you have two textures, you want the edges to align, not the centers of the pixels. See, for example: https://bartwronski.com/2021/02/15/bilinear-down-upsampling-... Implementations of resizing based on aligning pixel centers resulted in slight shifts, which caused a lot of trouble.
Comment linking /2021/02/15/bilinear-down-upsampling-pixel-grids-and-that-half-pixel-offset/
on “A Pixel Is Not a Little Square (1995) [pdf]”Submitted Why are video games graphics (still) a challenge? as a story · 16 points
HN discussionSubmitted Transforming “noise” and random variables through non-linearities as a story · 6 points
HN discussionSubmitted I use ChatGPT daily (scientist/coder perspective) as a story · 4 points
HN discussionSubmitted I use ChatGPT daily (scientist/coder perspective) as a story · 3 points
HN discussionSubmitted Exposure Fusion – local tonemapping for real-time rendering as a story · 3 points
HN discussionSubmitted Light transport matrices, SVD, spectral analysis, and matrix completion as a story · 3 points
HN discussionSubmitted Dimensionality reduction for image and texture set compression as a story · 3 points
HN discussion