JPEG XL

Info

rules 57
github 35276
reddit 647

JPEG XL

tools 4225
website 1655
adoption 20712
image-compression-forum 0

General chat

welcome 3810
introduce-yourself 291
color 1414
photography 3435
other-codecs 23765
on-topic 24923
off-topic 22701

Voice Channels

General 2147

Archived

bot-spam 4380

benchmarks

spider-mario
2021-02-22 05:14:13
these days, my opinion is that subpixel rendering is more trouble than it’s worth
2021-02-22 05:14:29
full-pixel (grayscale) antialiasing is good enough, especially as displays get denser and denser
2021-02-22 05:15:05
this increase in density also allows us to abandon hinting
2021-02-22 05:15:52
for me, after using a high-dpi screen, there was no going back
lonjil
2021-02-22 05:17:59
Even on a normal dpi screen, I can't stand subpixel rendering. Actually, if your dpi is low enough, the subpixel discoloration can be visible at normal viewing distances...
spider-mario
2021-02-22 05:20:51
filtering is supposed to help with that (https://nikramakrishnan.github.io/freetype-web-jekyll/docs/text-rendering-general.html#the-default-lcd-filter-for-subpixel-rendering-has-been-changed), but in turn, it sacrifices some of the resolution gain
2021-02-22 05:21:12
so the question is what trade-off of color artifacts vs. resolution is acceptable to you
2021-02-22 05:21:44
and it seems that for us two, the answer is “no color artifacts please”
2021-02-22 05:23:59
actually, another factor for me was that subpixel rendering would end up in my screenshots
2021-02-22 05:24:16
which makes those screenshots non-portable and less scalable
_wb_
2021-02-22 05:32:16
Subpixel rendering is not compatible with screenshot sharing
2021-02-22 05:33:12
Once you want to share an image, it has to work on all kinds of screens in all orientations
Nova Aurora
2021-02-22 05:36:05
Do modern operating systems turn it off on hidpi screens?
spider-mario
2021-02-22 05:37:03
I don’t think Windows does
2021-02-22 05:37:13
macOS dropped it at some point, which caused some backlash at the time
Nova Aurora
2021-02-22 05:38:29
I get it for lower resolution screens, but if you have all those pixels why use it?
spider-mario
2021-02-22 05:38:46
https://twitter.com/tapbot_paul/status/1004361530018852864
paperboyo
spider-mario I don’t think Windows does
2021-02-22 05:46:36
https://en.wikipedia.org/wiki/ClearType#ClearType_in_DirectWrite
spider-mario
2021-02-22 05:47:37
right, but apps have to use newer APIs for that
2021-02-22 05:47:42
there are plenty that don’t
2021-02-22 05:48:25
it’s surprisingly difficult to get them to do grayscale antialiasing
2021-02-22 05:48:30
I installed https://github.com/snowie2000/mactype for that
Orum
2021-02-22 05:49:58
It's nice on low-DPI displays, but not necessary on high DPI and downright undesirable when sharing images with text.
Scope
2021-02-23 11:21:26
For the sake of interest I also tested additionally `-s 8 -P 5 -C 1 -I 0` on all sets (-P 5 is slightly better on overall result than -P 4), that maybe it could be also somewhere better or the same as `-s 3`, but as before it is better only on Pixel Art And as already mentioned some faster optimized version `-s 4 -P 5` with fixed predictor, tree, etc. would also make sense for `-s 3`, and for example the current `-s 3` could be renamed to `-s 2` On the other hand current `-s 3` since it is well optimized and fast for photo and noticeably worse only on pixel art, then it is possible to just add detection and enable lz77 or some other fast compression variants on it
veluca
2021-02-23 01:09:57
current -s 3 uses a photo-specific predictor that is not going ever to work well on nonphoto 😄 a fixed-predictor/tree version should potentially be a lot faster than the current -s 3
Deleted User
2021-02-24 03:28:16
Here you've got another screenshots for patch heuristic testing. I no longer play those games, however good memories (and, of course, screenshots) remained...
2021-02-24 03:32:38
The trick is: those patches are only *partially* pixel-perfect. At the edges there is some variance of grass, which has to be accounted for somehow, e.g. taking together all the samples that encoder considers not perfectly the same, but just close enough, take an average / median / mode out of all those matches and if the difference is small enough, the result will be encoded.
2021-02-24 03:37:50
In those two cases that I've just uploaded the average needs to be encoded as a patch, because here the vast majority of the patch is pixel-perfect, only the grass on the edges changes, but those can be coded as residuals.
2021-02-24 04:08:05
This GIF should explain it. Those are all same 40x40 px patches (after 4x NN upscaling for better visibility) in 100 ms intervals. They're pixel-perfect matches everywhere but the edges. Look closely, here there are different parts of the grass texture! The encoder should know that the part that doesn't change is a patch and all those pixels that are changing aren't and should be either averaged out (and the remainder encoded normally) or excluded from the patch with alpha channel.
Scope
2021-02-24 05:11:20
Some (12) anime art lossy comparisons from low (0.15) to medium bpp (0.5-1.8), mainly because of noticeable artifacts on the lines in JXL, many site owners with such content consider AVIF (it loses some details, but for preview or thumbnail images is good enough) Same image sizes, latest builds of JXL (-s 8) and libavif (-c aom -s 1 -aq-mode=1), most likely Aurora1 will have even better results for AVIF: **<https://slow.pics/c/NvJvg7o9>**
2021-02-24 05:16:26
- One example (also some noticeable color changes by JXL) <@!532010383041363969> Source:
2021-02-24 05:16:49
AVIF
2021-02-24 05:17:03
JXL
BlueSwordM
Scope JXL
2021-02-24 05:18:57
Could you give your settings for this comparison, or targets for file size/bpp?
2021-02-24 05:19:04
I'd be interested to try it out myself.
Scope
2021-02-24 05:19:41
`avifenc --min x --max x -a aq-mode=1 -s 1` `cjxl -s 8 --target_size=x`
2021-02-24 05:19:45
BlueSwordM
2021-02-24 05:19:59
Thank you.
2021-02-24 05:20:45
Is it normal that I can't load the JXL copy? <:SadCat:805389277247701002>
Scope
2021-02-24 05:32:16
BlueSwordM
2021-02-24 05:40:19
Anyway, it looks like I was able to do a decent with modular. `cjxl -s 8 -m -Q 40`
2021-02-24 05:49:54
Oh.
2021-02-24 05:50:07
It looks like I can't decode anything with progressive on for some reason.
2021-02-24 05:50:13
That's not normal behavior.
_wb_
2021-02-24 06:46:34
No it is not
Master Of Zen
2021-02-24 12:10:09
This is my benchmark
2021-02-24 12:10:16
Scope
Scope Some (12) anime art lossy comparisons from low (0.15) to medium bpp (0.5-1.8), mainly because of noticeable artifacts on the lines in JXL, many site owners with such content consider AVIF (it loses some details, but for preview or thumbnail images is good enough) Same image sizes, latest builds of JXL (-s 8) and libavif (-c aom -s 1 -aq-mode=1), most likely Aurora1 will have even better results for AVIF: **<https://slow.pics/c/NvJvg7o9>**
2021-02-24 02:46:01
AVIF - JXL
2021-02-24 02:46:51
2021-02-24 02:48:35
Crixis
2021-02-24 02:50:04
avif is so better then VarDCT on this, modular?
Scope
Scope - One example (also some noticeable color changes by JXL) <@!532010383041363969> Source:
2021-02-24 02:50:28
2021-02-24 02:55:42
Modular is sometimes better, but it also has noticeable jagged lines, from which I once mentioned some techniques like LCEVC, where lines and edges are saved in full resolution and with less compression (lossless?) and overlaid later on a more compressed resized video (DCT compression is usually very noticeable on sharp lines)
Deleted User
Scope Some (12) anime art lossy comparisons from low (0.15) to medium bpp (0.5-1.8), mainly because of noticeable artifacts on the lines in JXL, many site owners with such content consider AVIF (it loses some details, but for preview or thumbnail images is good enough) Same image sizes, latest builds of JXL (-s 8) and libavif (-c aom -s 1 -aq-mode=1), most likely Aurora1 will have even better results for AVIF: **<https://slow.pics/c/NvJvg7o9>**
2021-02-24 02:58:00
Which quality setting did you use? I'm fiddling with `unknown_1hxwd.png` (the first one from slow.pics)
Scope
2021-02-24 03:01:08
I don't remember exactly for each image, something between (--min 0 --max 20/--min 0 --max 47)
Deleted User
Scope I don't remember exactly for each image, something between (--min 0 --max 20/--min 0 --max 47)
2021-02-24 03:02:22
I'm talking about JXL
Scope
2021-02-24 03:02:26
Just `-s 8 --target_size=x` Also WP2 as it is now tuned to save more details, can not keep as sharp lines as AVIF, perhaps in the future it will be useful to have something like presets for such content
Deleted User
2021-02-24 03:07:16
Ok, thanks
_wb_
2021-02-24 03:19:09
to get nice looking low-fidelity encoding for such images in jxl, I think we'll need different encoder tricks. For images like this, AVIF's many directional prediction modes (+ chroma from luma) is very good, especially because on images like this, you don't notice that directions get rounded to the nearest available angle
2021-02-24 03:21:48
I think near-lossless techniques (delta palette) could be good here, to avoid any dct artifacts while avoiding the typical issues you'd get with PNG8 (banding or requiring dithering)
2021-02-24 03:23:38
for that we need something like pngquant to make a good palette as a starting point, and then use delta palette to fill the slow gradients
2021-02-24 03:24:06
it's a matter of making an encoder that does that
Scope
2021-02-24 03:49:07
Yep, I think further development of near-lossless technique ideas is good for such images And this kind of strong lossy compression is not just for my experiments, it is a real use, because usually various reduced resolutions from the large original image are very compressed, for faster loading and previewing of a huge number of images (where very much details are not needed, but maximum size reduction is important, until artifacts become noticeable and annoying), and for good quality there is a full size image (which can be in lossless, since quality becomes more important)
2021-02-24 06:15:47
Btw, from the 4chan thread, one image, unknown CPU, number of threads and other things, but still...
lithium
2021-02-24 06:42:33
Hello <@!111445179587624960> , For anime content you can try high quantizer like this. use --nclx 1/13/0 on png rgb file. // near jxl -d 0.5 // qp avifenc.exe --min 7 --max 8 --minalpha 0 --minalpha 0 --codec aom --nclx 1/13/0 -s 3 -j 12 // q avifenc.exe --min 7 --max 8 --minalpha 0 --minalpha 0 --codec aom --nclx 1/13/0 -s 3 -j 12 -a end-usage=q
Scope
2021-02-24 06:53:00
My comparison above was mainly for heavy compression and low bpp
lithium
2021-02-24 07:01:06
ok, and use default aq-mode and --nclx 1/13/0(on rgb file) probably can get better result
2021-02-24 07:02:49
jxl rgb => xyb, avif rgb => ycbcr or ycocg
Scope
2021-02-24 07:36:34
For low bpp `--nclx 1/13/0` gives worse results
fab
2021-02-24 07:36:53
what is nclx
Scope
2021-02-24 07:36:57
Default:
2021-02-24 07:37:15
`--nclx 1/13/0` (same size)
_wb_
2021-02-24 07:40:49
For low bpp, maybe also try 2x or 4x downsampling in cjxl...
Scope
2021-02-24 07:43:33
Yep, sometimes it helps, but then blurring becomes quite noticeable
2021-02-24 07:53:49
That's why I was thinking about LCEVC, where lines and edges are saved in full resolution, and everything else is downsampled
fab
2021-02-24 08:00:24
what is the settings of the vardct optimized scope
2021-02-24 08:00:42
ziemek showed a GIMP photo
Scope
2021-02-24 08:04:55
I don't know, for VarDCT I mostly just use quality and speed (rarely when I can noticeably improve anything)
fab
2021-02-24 08:24:55
how to use
2021-02-24 08:24:56
--nclx 1/13/0
2021-02-24 08:25:06
i want it at q 75
2021-02-24 08:25:09
how to do
Deleted User
fab what is the settings of the vardct optimized scope
2021-02-24 08:25:44
Scope used `-s 8 --target_size=XXXXX` (where `XXXXX` is the AVIF filesize, because doing it other way around, which is: to generate JXL and then match the filesize with AVIF, is much harder)
fab ziemek showed a GIMP photo
2021-02-24 08:26:45
I used `-s 9 --target_size=XXXXX -c 0 --noise=0 --dots=0 --patches=0 --epf=3 --gaborish=1`
fab
2021-02-24 08:26:58
what is c 0
Scope
2021-02-24 08:27:38
`--nclx 1/13/0` is for Avifenc ```--cicp,--nclx P/T/M : Set CICP values (nclx colr box) (3 raw numbers, use -r to set range flag) P = color primaries T = transfer characteristics M = matrix coefficients```
Deleted User
fab what is c 0
2021-02-24 08:27:46
``` -c 0..2, --colortransform=0..2 0=XYB, 1=None, 2=YCbCr```
2021-02-24 08:28:03
I simply wanted to make sure that XYB will be used
fab
2021-02-24 08:28:23
and what it means
2021-02-24 08:28:29
why this / / /
Deleted User
2021-02-24 08:33:25
<@!416586441058025472> next time just use `cjxl -h -v -v -v`, it'll show you all the options 😉 I can't understand some options or how would they impact compression, so I don't use them (leave them on default settings).
_wb_
2021-02-24 08:34:58
varDCT always uses XYB
2021-02-24 08:35:09
we didn't even implement forward YCbCr
Deleted User
2021-02-24 08:36:17
OK, guess I'll simply omit `-c 0` in my further VarDCT commands in order to simplify them
Jyrki Alakuijala
Crixis avif is so better then VarDCT on this, modular?
2021-02-25 08:11:26
AVIF does better on these images. I consider it is mostly an encoder level thing, and I believe I can get within 5 % of AVIF quality at low quality when I'm complete with the low bpp optimizations. (within 20 % for an image that benefits a lot from directional prediction -- having a lot of directional obligue features without information across those features)
2021-02-25 08:12:47
Also AVIF encoders are developing, me and Luca are helping them to take the best methods of JPEG XL to improve on the photography compression
2021-02-25 08:14:34
In JPEG XL our code for choosing integral transforms is weaker (and faster) than similar code in AVIF -- this relates a lot to the low quality images
2021-02-25 08:15:07
the formats are much closer to each other in image quality performance than what we can observe today
2021-02-25 08:18:22
I consider that the end state is going to be something like JPEG XL is 5-20 % more efficient in high end photography, AVIF in the low end or smooth graphics -- JPEG XL will decode faster on software for HDR and YUV444 and have progression
2021-02-25 08:19:25
AVIF can model the XYB colorspace at least partially if they add a 700 byte ICC profile in it
2021-02-25 08:20:59
JPEG XL also otherwise has a smaller overhead for small images (if one aims at < 1000 bytes size, it doesn't really work competitively with AVIF particularly if there is alpha channel in the image)
I simply wanted to make sure that XYB will be used
2021-02-25 08:22:03
What is your experience of XYB vs other colorspaces?
Deleted User
Jyrki Alakuijala What is your experience of XYB vs other colorspaces?
2021-02-25 09:35:51
You mean in general? I haven't tried other ones than XYB, to be honest (IIRC). Again, I just wanted to be 100% sure that XYB will be used.
Jyrki Alakuijala
Scope Some (12) anime art lossy comparisons from low (0.15) to medium bpp (0.5-1.8), mainly because of noticeable artifacts on the lines in JXL, many site owners with such content consider AVIF (it loses some details, but for preview or thumbnail images is good enough) Same image sizes, latest builds of JXL (-s 8) and libavif (-c aom -s 1 -aq-mode=1), most likely Aurora1 will have even better results for AVIF: **<https://slow.pics/c/NvJvg7o9>**
2021-02-25 03:37:23
I'm working on exactly this, trying to tame those obligue lines. I have made some improvement from 0.3 to 0.3.2, but not yet enough.
Scope
2021-02-25 03:48:28
<@!532010383041363969> Also about the noticeably different colors (on the faces), I checked on a higher quality and they are fine, in this image it happens only with heavy compression https://discord.com/channels/794206087879852103/803645746661425173/814002782776328242
2021-02-25 03:51:56
<https://slow.pics/c/fGLgux2b>
Crixis
Scope <https://slow.pics/c/fGLgux2b>
2021-02-25 03:55:01
oh, so much more yellow
Scope
2021-02-25 03:55:45
Yep, also banding AVIF - JXL
Deleted User
2021-02-25 03:58:15
<@!532010383041363969> here's my comparison: https://slow.pics/c/A7HJkgFe You're doing good job on improving low-bpp quality. There's more ringing, but lines look more faithful to the original and more pleasant to look at (in Scope's JXL the lines are jagged, only lossy Modular gives more jagging).
Crixis
<@!532010383041363969> here's my comparison: https://slow.pics/c/A7HJkgFe You're doing good job on improving low-bpp quality. There's more ringing, but lines look more faithful to the original and more pleasant to look at (in Scope's JXL the lines are jagged, only lossy Modular gives more jagging).
2021-02-25 04:30:23
this is a lot better but avif is f*** good
2021-02-25 04:37:14
how much bpp?
Deleted User
Crixis this is a lot better but avif is f*** good
2021-02-25 04:45:59
> but avif is f*** good Unfortunately yes. It can be even better though, I'm on AV1 Discord and talking with BlueSwordM about encoding it with rav1e.
Crixis
> but avif is f*** good Unfortunately yes. It can be even better though, I'm on AV1 Discord and talking with BlueSwordM about encoding it with rav1e.
2021-02-25 04:49:51
Also I have noted that rav1e is better in still image, less smoting
Deleted User
Crixis Also I have noted that rav1e is better in still image, less smoting
2021-02-25 04:52:02
That's what BlueSwordM said to me 😉
spider-mario
2021-02-25 05:39:06
I added very basic avif support to benchmark_xl and in my brief testing, aom seemed better than rav1e according to butteraugli
2021-02-25 05:39:14
but I must admit that I haven’t really looked at the images
Scope
2021-02-25 05:43:07
Rav1e is sometimes visually better on art images (better AQ tuning?)
_wb_
2021-02-25 05:46:22
<@604964375924834314> what encoder speed did you look at?
BlueSwordM
That's what BlueSwordM said to me 😉
2021-02-25 05:47:25
I didn't use the slowest rav1e speed here(since there's not much difference in terms of speed yet between s1 and s4, as the presets in cavif-rs haven't been properly tuned yet) but it points what each encoder's strength is. The image comparison is rather interesting as you can see. It seems to try a different approach than aom as expected. It manages to preserve more detail as expected, but it doesn't have as good filtering(that is being worked on, and will improve with time), so it looks worse in this scenario However, the devil is in the details. rav1e does better than aom in my experience at higher bpp, which is particularly interesting in the case of the video comparison that I showed you in the AV1 discord server. https://slow.pics/c/nagJiHIk
_wb_
2021-02-25 05:48:39
When I tested, rav1e was often worse than webp at its fastest setting, but at slower speeds it is quite good
2021-02-25 05:49:26
SVT had the best speed/quality trade-off for our use cases at Cloudinary
2021-02-25 05:49:42
Until we licensed Aurora that is
spider-mario
_wb_ <@604964375924834314> what encoder speed did you look at?
2021-02-25 05:49:55
mainly the default speed iirc, so 8
_wb_
2021-02-25 05:50:07
But SVT is limited to 4:2:0 so for 4:4:4 we did fallback to rav1e
2021-02-25 05:50:14
Default rav1e speed is crap
BlueSwordM
2021-02-25 05:50:28
Isn't default rav1e speed 6 though?
spider-mario
2021-02-25 05:50:40
rav1e’s might be, but libavif’s isn’t apparently
_wb_
2021-02-25 05:50:42
Depends on who sets the default, I guess
Scope
2021-02-25 05:50:58
I also tested rav1e mostly at slow speeds
_wb_
2021-02-25 05:51:21
Slow speeds are not feasible for on the fly encoding though
2021-02-25 05:51:45
We cannot have latencies that large, first requests will time out and stuff
2021-02-25 05:52:14
We used svt speed 7 iirc
2021-02-25 05:52:27
And even that was too slow
2021-02-25 05:53:04
With Aurora it's about twice as fast as that, for a slightly better quality/density curve
Scope
2021-02-25 05:53:11
Yep, but I tested with an eye to future optimizations and the overall quality capabilities of the encoder
_wb_
2021-02-25 05:53:26
Sure, that makes perfect sense
2021-02-25 05:53:35
For testing
2021-02-25 05:53:49
Not for production 😅
BlueSwordM
2021-02-25 05:58:53
Anyway, I'm not too worried for rav1e vs libaom.
2021-02-25 05:59:09
rav1e should be receiving a nice large speed boost both inter and intra soon™️
2021-02-25 05:59:43
As wb has said, keep JXL for images, and use AV1 for video. 😛
Scope
2021-02-25 06:01:45
And for previews and thumbnails, for now (If there is extra CPU power available <:AV1:805851461774475316>)
_wb_
2021-02-25 06:34:10
for thumbnails, I think WebP is atm the best choice. For some reason, for small images, AVIF doesn't really shine. It might be the combination of relatively large header overhead and not being able to use bigger blocks.
2021-02-25 06:34:46
300 pixels wide is roughly the point where AVIF starts to beat WebP, smaller than that often WebP is better
Crixis
2021-02-25 06:38:38
jxl can be good for 300px image in the future?
_wb_
2021-02-25 06:59:30
Yes
Scope
2021-02-25 07:03:09
Yes, I didn't mean very small images, but also: Source:
2021-02-25 07:03:29
AVIF
2021-02-25 07:03:38
JXL
2021-02-25 07:03:46
WebP
2021-02-25 07:05:45
For such images and heavy compression, AVIF is also still good For more complex or photo images, JXL is already good for small resolutions (unless adding more options for Alpha)
2021-02-25 07:13:11
<https://slow.pics/c/tFGNKwvB>
_wb_
2021-02-25 07:29:11
Yes, avif is quite great at illustrations in such a drawing style with clear, hard lines. This is what many directional prediction modes is great for.
2021-02-25 07:31:48
But for typical low-fidelity photographic thumbnails like e.g. in a product gallery, WebP and AVIF are close to one another.
lithium
2021-02-25 07:42:19
original: Mika Pikazo, www.pixiv.net/users/1039353 https://www.pixiv.net/artworks/78511602
Jyrki Alakuijala
_wb_ Yes, avif is quite great at illustrations in such a drawing style with clear, hard lines. This is what many directional prediction modes is great for.
2021-02-26 10:37:38
is this speculation or knowledge -- could we try it without any directional stuff in AVIF?
_wb_
2021-02-26 10:42:47
speculation
2021-02-26 11:42:14
It would be interesting to see what is actually giving AVIF an edge in these images (no pun intended)
2021-02-26 11:43:04
Could be directional prediction, could be directional deringing filter, could be palette mode blocks, could be chroma from luma, ...
2021-02-26 11:44:34
<@321486891079696385> <@111445179587624960> do you know how to run avif encoders with particular coding tools disabled?
2021-02-26 11:53:58
<@532010383041363969> are we exploiting clamping behavior to reduce chroma entropy? For images like these, it could be worthwhile to e.g. pretend that all the hair area is purple in chroma, instead of letting chroma go to zero for the white and for the black parts. If luma is zero, the pixels will be black anyway, and if luma is high, they will be white anyway, whatever the chroma components say.
Scope
_wb_ <@321486891079696385> <@111445179587624960> do you know how to run avif encoders with particular coding tools disabled?
2021-02-26 02:24:42
No, I'm mostly comparing encoders in the way most people will use them
_wb_ Could be directional prediction, could be directional deringing filter, could be palette mode blocks, could be chroma from luma, ...
2021-02-26 02:25:49
Yes, I think directional deringing also affects https://youtu.be/VHm5Ql33JYw?list=LL&t=602
_wb_
2021-02-26 02:55:18
I remember seeing a tool that visualizes av1 block type selection. It would be interesting to compare choices made by av1 encoders with those made by cjxl, especially for images where avif is doing better
2021-02-26 02:55:42
Does anyone know how to get those visualizations?
Master Of Zen
_wb_ I remember seeing a tool that visualizes av1 block type selection. It would be interesting to compare choices made by av1 encoders with those made by cjxl, especially for images where avif is doing better
2021-02-26 03:14:17
https://github.com/xiph/aomanalyzer
Scope
2021-02-26 03:26:02
Yes, I've seen some browser-based analyzers like the one described here <https://medium.com/hackernoon/av1-bitstream-analyzer-d25f1c27072b>, but, the most convenient and detailed analyzers are paid And also some tools can be enabled/disabled just through aomenc options (but I have not tried to disable anything more)
Jyrki Alakuijala
_wb_ speculation
2021-02-26 06:05:28
Let's get more data on what is causing this significant difference between AVIF and JPEG XL.
2021-02-26 06:08:57
it can be ac strategy, integral transforms, filtering, prediction, palette modeling, yuv420, .xyb vs yuv, cfl dfferences, and many others
2021-02-26 06:09:42
Just yesterday I fixed a bug in ac strategy in jpeg xl, who knows how many more are lurking in there 🙂
2021-02-26 06:10:15
there can be 77 bugs or inaccuracies each worth 0.23 %
2021-02-26 06:10:50
I consider we need an ablation study on both ends
2021-02-26 06:11:10
turn off features until the two codecs converge into the same result
2021-02-26 06:11:30
the codecs are not inherently different, both are mostly dct based
2021-02-26 06:12:02
I have learned that often the combination of things is stronger than just pure reasoning
2021-02-26 06:13:38
I believe all main codecs (webp2, avif, heif) other than jpeg xl perform well on this anime data
2021-02-26 06:14:04
I believe we will be able to fix it soon after we understand fully what is happening
Scope
2021-02-26 06:16:07
<@!532010383041363969> <@!794205442175402004> Another comparison, but when JXL quality is between -d 3.5 and -d 4.5 (in the past it was up to -d 8) <https://slow.pics/c/Ri6dHVlu>
2021-02-26 06:16:14
Jyrki Alakuijala
2021-02-26 06:22:36
did you try the delta palette option of jpeg xl?
2021-02-26 06:27:20
it seems to me that avif is getting gains by small local palettes and from triangular/other weird block splits
2021-02-26 06:27:48
weird block splits forming the block from two colors, usually white and another color
2021-02-26 06:28:10
we don't have local palettes in jpeg xl
2021-02-26 06:28:33
but we have something that is more powerful in the high-mid category and might work here, too
2021-02-26 06:28:39
(the delta palettes)
2021-02-26 06:28:59
they work with the modular mode and the lz77
2021-02-26 06:29:41
the context modeling that system has is roughy equally powerful to local palettes, but allows less hard degradation than forcing a locality to 8 colors
Scope
2021-02-26 06:29:51
Delta palette in modular mode? I've tried, but these sizes are usually much larger than the ones I'm testing. Without very heavy compression, all better and mostly noticeable ringing artifacts and jagged lines, but in this image the differences are not just artifacts <https://slow.pics/c/F1KDUnQe>
BlueSwordM
2021-02-26 06:29:55
The benefit with AVIF encoders might be that they are using chroma from luma in intra only encoding and others filters.
Scope
2021-02-26 06:32:01
I think it's mostly from a combination of directional prediction, directional deringing and palette mode blocks (like Jon said)
Jyrki Alakuijala
Scope Delta palette in modular mode? I've tried, but these sizes are usually much larger than the ones I'm testing. Without very heavy compression, all better and mostly noticeable ringing artifacts and jagged lines, but in this image the differences are not just artifacts <https://slow.pics/c/F1KDUnQe>
2021-02-26 06:35:10
one problem in delta palette is that it doesn't add custom colors yet -- so if there is a color in the image that is not in the stock palette, it is dithered
2021-02-26 06:35:22
dithering is more bits than a constant color
BlueSwordM The benefit with AVIF encoders might be that they are using chroma from luma in intra only encoding and others filters.
2021-02-26 06:35:58
there is a chroma from luma approach in jpeg xl, too
Scope I think it's mostly from a combination of directional prediction, directional deringing and palette mode blocks (like Jon said)
2021-02-26 06:36:55
is there a way to try this same image in avif without directional prediction and directional deringing
Scope
2021-02-26 06:40:56
I have not tried at the moment, maybe need some changes in the source code (as not everything can be disabled through the options) And as I said, the further development of delta palette is very interesting and I think will be needed for art images (I am personally more interested in it), but there is also a need for even higher or more predictable compression
2021-02-26 06:41:53
Perhaps CDEF has some effect as well (it can be disabled)
Jyrki Alakuijala
2021-02-26 06:43:56
the delta palette in jpeg xl is pretty amazing creature, but I tuned it only at one fixed quality
2021-02-26 06:44:11
at around 2.3 bpp photography
2021-02-26 06:44:26
most likely for this kind of images we'd need other approaches
2021-02-26 06:44:51
custom colors, less dithering, more lz77, locality for context modeling ++++
2021-02-26 06:45:19
how many bpp do you get with delta palette for these images and what is your target bpp?
2021-02-26 06:45:38
(sorry for the many questions)
Scope
2021-02-26 06:46:16
<:Thonk:805904896879493180> aomenc ```--enable-paeth-intra=<arg> Enable Paeth intra prediction mode (0: false, 1: true (default)) --enable-cfl-intra=<arg> Enable chroma from luma intra prediction mode (0: false, 1: true (default)) --enable-palette=<arg> Enable palette prediction mode (0: false, 1: true (default)) --enable-cdef=<arg> Enable the constrained directional enhancement filter (0: false, 1: true (default))```
2021-02-26 06:47:39
I have tested delta palette on past images (I will have to check again on these)
2021-02-26 06:48:06
Perhaps some additional options are needed?
2021-02-26 06:48:52
Or that's enough: `--lossy-palette --palette=0` + speed?
_wb_
2021-02-26 06:50:10
That's enough, maybe should add -P 0 too
BlueSwordM
2021-02-26 06:50:54
`--enable-restoration=0` would also be good for AVIF aomenc-av1.
Scope
2021-02-26 06:58:42
Lossy-palette: ```1hxwd.png.lps9.jxl 212 447 1hxwd.png.lps9P0.jxl 209 883 1kak1.png.lps9.jxl 217 250 1kak1.png.lps9P0.jxl 215 841 1lr9k.png.lps9.jxl 169 481 1lr9k.png.lps9P0.jxl 166 577 2rzpm.png.lps9.jxl 807 738 2rzpm.png.lps9P0.jxl 785 886 UH1ppCM.png.lps9.jxl 248 116 UH1ppCM.png.lps9P0.jxl 245 235``` Lossy: ```1hxwd.avif 59 356 1kak1.avif 80 596 1lr9k.avif 46 104 2rzpm.avif 321 617 UH1ppCM.avif 88 249 1hxwd.jxl 59 491 1kak1.jxl 80 691 1lr9k.jxl 46 169 2rzpm.jxl 322 077 UH1ppCM.jxl 88 217``` It's not that much of a difference (given that these are near-lossless sizes), but a lot more compression is often needed and this was a test with higher quality (AVIF can look good with much denser compression)
_wb_
2021-02-26 07:03:59
It would be useful to make an encoder for delta-palette that has adjustable target quality and that detects large surfaces of constant color and puts them in the palette (or just any color that occurs frequently enough)
2021-02-26 07:05:16
Maybe Kornel would be interested in that. He made pngquant a lot better than it was, for example.
Scope
2021-02-26 07:05:59
Yep, it would be nice to have a delta-palette mode with even more compression, where other lossy techniques are additionally used
_wb_
2021-02-26 07:18:34
The delta palette encoder can choose how much deviation to allow and where to allow it. It could theoretically produce anything between (probably very inefficient) lossless and very lossy (e.g. if it just very often says "predicted value is good enough, use delta 0,0,0")
2021-02-26 07:22:47
Currently it only uses the default palette (the implicit absolute colors that are at indices higher than the palette size, and delta colors that are at negative indices), and iirc it just picks whatever implicit value gives a color nearest to the correct color, with a simple 1,2,1 weighing of R,G,B.
Scope
2021-02-26 10:12:16
Hmm, maybe I should try encoding content with mostly lines and black and white colors, like manga 🤔
Deleted User
Scope <@!532010383041363969> <@!794205442175402004> Another comparison, but when JXL quality is between -d 3.5 and -d 4.5 (in the past it was up to -d 8) <https://slow.pics/c/Ri6dHVlu>
2021-02-26 10:13:31
Oh, another comparison? Ok, here's the first image, just like before with `-s 9 --noise=0 --dots=0 --patches=0 --epf=3 --gaborish=1` and targeted size.
Jyrki Alakuijala
_wb_ Currently it only uses the default palette (the implicit absolute colors that are at indices higher than the palette size, and delta colors that are at negative indices), and iirc it just picks whatever implicit value gives a color nearest to the correct color, with a simple 1,2,1 weighing of R,G,B.
2021-02-26 11:16:17
no, I have a complex rgb metric there -- actually I'm quite proud of it, could be worth to port to many other projects using rgb diffs
2021-02-26 11:16:54
it even models primitively the rgb compression in lms directions
2021-02-26 11:17:05
getting it right is iirc about 5 % better butteraugli scores
2021-02-26 11:17:14
here some low bpp improvements:
2021-02-26 11:17:28
vardct -d 11
2021-02-26 11:17:50
before
2021-02-26 11:18:05
after
2021-02-26 11:18:35
trying to clean that up and get it submitted ... but I'm proud of this 😄
2021-02-26 11:18:42
it is also deleting code rather than adding 😛
BlueSwordM
2021-02-26 11:18:45
Wow, that is an impressive difference.
2021-02-26 11:18:57
Not only is the PNG filesize smaller(indicating less artifacting), but I can also tell how much cleaner it looks at 1st glance.
_wb_
Jyrki Alakuijala no, I have a complex rgb metric there -- actually I'm quite proud of it, could be worth to port to many other projects using rgb diffs
2021-02-26 11:19:27
Ah I hadn't seen that yet (https://gitlab.com/wg1/jpeg-xl/-/blob/master/lib/jxl/modular/transform/palette.h#L124) — older versions did something simpler there.
Jyrki Alakuijala
_wb_ Ah I hadn't seen that yet (https://gitlab.com/wg1/jpeg-xl/-/blob/master/lib/jxl/modular/transform/palette.h#L124) — older versions did something simpler there.
2021-02-26 11:21:39
I really consider it one of my 'masterpieces' because it is rgb diff tuned to my xyb creation, and it makes sense, but it is definitely not obvious and I doubt that anyone else has ever come up with anything like it
2021-02-26 11:23:45
if (c == 2 && ((a[2] + b[2]) < 1.22 * ave3)) { weight -= 0.5; }
2021-02-26 11:24:00
this is brilliant for palette use
2021-02-26 11:24:04
😛
2021-02-26 11:24:32
unfortunately it looks like a confused schoolboy had coded it
Scope
2021-02-26 11:25:05
<@!532010383041363969> <@!794205442175402004> Comparison on black and white manga, with medium-low and lower bpp [image size] <https://slow.pics/c/RaX7RJA5>
2021-02-26 11:26:53
2021-02-26 11:27:16
Deleted User
2021-02-26 11:27:59
I'll post my version soon
2021-02-26 11:28:15
<@!111445179587624960> are you using the latest commit?
Jyrki Alakuijala
2021-02-26 11:28:18
it is clear that we need to improve on these
2021-02-26 11:28:26
I also doubt that Scope is using 0.3.0
2021-02-26 11:28:33
or earlier
2021-02-26 11:28:44
because I feel that in 0.3.2 I have fixed some of those things
Scope
2021-02-26 11:28:58
Jyrki Alakuijala
2021-02-26 11:28:59
(can be that I'm overly hopeful)
_wb_
Jyrki Alakuijala if (c == 2 && ((a[2] + b[2]) < 1.22 * ave3)) { weight -= 0.5; }
2021-02-26 11:29:54
Shouldn't that be `if (c == 2 && ((a[2] + b[2]) * 1.22f < ave3)) {` there? I.e. blue is even less important if there's less B than average of R,G?
Jyrki Alakuijala
2021-02-26 11:30:27
I'm doing something wrong for having details in gray backgrounds -- it shouldn't be a big diff to having white background
Scope
2021-02-26 11:30:34
I always use the latest builds of all encoders when comparing (if there are no critical bugs)
Jyrki Alakuijala
2021-02-26 11:30:53
Thank you for confirming my deepest fears Scope!
_wb_ Shouldn't that be `if (c == 2 && ((a[2] + b[2]) * 1.22f < ave3)) {` there? I.e. blue is even less important if there's less B than average of R,G?
2021-02-26 11:31:29
I used simplex search to find the 1.22f, I didn't want to think
2021-02-26 11:32:13
it is just the level where that rule kicks in because of L and M receptors are already saturated not to be receptive for blue
Scope
2021-02-26 11:33:05
This is also avifenc encoding without tune and other options, only speed and quality
Jyrki Alakuijala
2021-02-26 11:33:22
when there are crazy constants in my code and they are not 0.7777777f they are often found by simplex search against a somewhat relevant optimization corpus
2021-02-26 11:33:38
when things fail, it means that I need to add stuff into the optimization corpus
Scope <@!532010383041363969> <@!794205442175402004> Comparison on black and white manga, with medium-low and lower bpp [image size] <https://slow.pics/c/RaX7RJA5>
2021-02-26 11:34:07
looks like I have a lot of work
Deleted User
Jyrki Alakuijala because I feel that in 0.3.2 I have fixed some of those things
2021-02-26 11:34:09
I've seen your low-bpp improvements on Air Force chapel and the lines got blurrier, but more accurate. Scope's encodes behave like the old version, they're sharper, but a bit jagged. Scope confirmed using the latest compile, so it must be something else. I'm using `-s 9`, but it didn't differ *that* much compared to `-s 8`. Main differences are `--epf=3` and `gaborish=1` in my command line (just in case gaborish isn't default). I'm also disabling noise, dots and patches (IMHO they're not helpful with that kind of imagery and they'd probably slow down encoding a bit, correct me if I'm wrong).
Jyrki Alakuijala
I've seen your low-bpp improvements on Air Force chapel and the lines got blurrier, but more accurate. Scope's encodes behave like the old version, they're sharper, but a bit jagged. Scope confirmed using the latest compile, so it must be something else. I'm using `-s 9`, but it didn't differ *that* much compared to `-s 8`. Main differences are `--epf=3` and `gaborish=1` in my command line (just in case gaborish isn't default). I'm also disabling noise, dots and patches (IMHO they're not helpful with that kind of imagery and they'd probably slow down encoding a bit, correct me if I'm wrong).
2021-02-26 11:35:13
that is what I have been aiming for -- I consider the effort 33 % complete
I've seen your low-bpp improvements on Air Force chapel and the lines got blurrier, but more accurate. Scope's encodes behave like the old version, they're sharper, but a bit jagged. Scope confirmed using the latest compile, so it must be something else. I'm using `-s 9`, but it didn't differ *that* much compared to `-s 8`. Main differences are `--epf=3` and `gaborish=1` in my command line (just in case gaborish isn't default). I'm also disabling noise, dots and patches (IMHO they're not helpful with that kind of imagery and they'd probably slow down encoding a bit, correct me if I'm wrong).
2021-02-26 11:36:30
my first iteration slowed down the encoding 25 % at default settings -- then we launched 0.3.2 -- then I slowed it down another 30 % with a promise to recover and recovered -- now I have new possible slowdowns
2021-02-26 11:36:37
but I have plans on how to recover the speed
2021-02-26 11:36:50
currently we try dct64x64 first and start splitting from there
2021-02-26 11:37:15
I believe that if I reverse that to try the 8x8 transforms first and merge, I can make things a lot faster
2021-02-26 11:37:42
but I'm scared of big quality changes, so I proceed step-by-step to keep things working while providing some improvements
2021-02-26 11:38:47
I am mostly using the codec without -s setting in all the optimization work I do
2021-02-26 11:39:06
I anticipate that that will be the normal way to use it
2021-02-26 11:39:39
I'm secretly hoping that people would also use it without -d and we would get internet filled with -d 1 images with near-perfect quality
Scope
2021-02-26 11:39:52
My main idea was to test the default settings on the encoders, also `--epf=3` and `gaborish=1` although somewhat help lines quality, but it gets worse in other areas
Jyrki Alakuijala
2021-02-26 11:40:23
those filters improve quality and comfort, but they slow down decoding, too
Deleted User
Scope My main idea was to test the default settings on the encoders, also `--epf=3` and `gaborish=1` although somewhat help lines quality, but it gets worse in other areas
2021-02-26 11:40:24
Yep, I also noticed that
Jyrki Alakuijala
2021-02-26 11:40:56
one of the worse weaknesses of our solution right now is the decoding speed on old arm cpus and all this filtering is contributing
2021-02-26 11:41:25
I'm hoping to change the dct quantization in clever ways to get some fraction (20-30 %) of filtering benefits without actually using filtering
2021-02-26 11:41:37
but I'm not yet working on that
Deleted User
2021-02-26 11:41:49
I don't know what exactly makes Scope's lines sharper and more jagged, so I'm going to do some additional test encodes in order to determine what influences those lines the most: - `-s 9` only (with gaborish and EPF off), - gaborish off and EPF 3, - gaborish on and EPF 0, - and finally gaborish on and EPF 3 (my current command).
Jyrki Alakuijala
2021-02-26 11:42:07
another clever idea that I had that we used in brunsli is that 2d dct has a weird property...
2021-02-26 11:42:46
if you compute sums and alternating sums of dct coefficients across columns and rows, you end up having an extrapolated 1d dct of the edges of the 2d block
2021-02-26 11:43:03
we use that for context modeling in brunsli and for smoothing in knusperli
2021-02-26 11:43:20
we can also use that for quantization in jpeg xl to have less block-to-block disagreement
2021-02-26 11:43:56
if less border artefacts overall, there is less need for smoothing
2021-02-26 11:45:34
computing sums and alternating sums is a lot faster and simpler than doing pretty much anything else with the dct
2021-02-26 11:46:02
usually a lot of head scratching and butterfly computations are involved, but this is just delightfully simple and fast stuff
2021-02-26 11:57:30
ziemek.z and Scope -- if you are able to recompile, try with a lower and a higher kDcQuant value
2021-02-26 11:57:59
perhaps we are putting all bits in the dc value and not enough is left for ac
Scope Lossy-palette: ```1hxwd.png.lps9.jxl 212 447 1hxwd.png.lps9P0.jxl 209 883 1kak1.png.lps9.jxl 217 250 1kak1.png.lps9P0.jxl 215 841 1lr9k.png.lps9.jxl 169 481 1lr9k.png.lps9P0.jxl 166 577 2rzpm.png.lps9.jxl 807 738 2rzpm.png.lps9P0.jxl 785 886 UH1ppCM.png.lps9.jxl 248 116 UH1ppCM.png.lps9P0.jxl 245 235``` Lossy: ```1hxwd.avif 59 356 1kak1.avif 80 596 1lr9k.avif 46 104 2rzpm.avif 321 617 UH1ppCM.avif 88 249 1hxwd.jxl 59 491 1kak1.jxl 80 691 1lr9k.jxl 46 169 2rzpm.jxl 322 077 UH1ppCM.jxl 88 217``` It's not that much of a difference (given that these are near-lossless sizes), but a lot more compression is often needed and this was a test with higher quality (AVIF can look good with much denser compression)
2021-02-26 11:58:57
Thank you!
Scope Yep, it would be nice to have a delta-palette mode with even more compression, where other lossy techniques are additionally used
2021-02-27 12:01:09
we could turn off dithering at first -- that is often a -40 % in file size in other methods (didn't try it in this use)
Scope
2021-02-27 12:03:06
Okay, I'll try it, does this value need to be changed in one place? Also surprisingly on content where there are only lines, AVIF reproduces them very accurately (they are not thinner, disappear, bend in other ways) and that is why people with this kind of content are so interested in AVIF (from storage to various services) This is also why I try to show and test on the weak points of Jpeg XL first
Jyrki Alakuijala
2021-02-27 12:03:30
enc_adaptive_quantization.cc
2021-02-27 12:03:42
increase it by 20 % and decrease it by 20 %
2021-02-27 12:03:52
I don't remember what direction saves bits
2021-02-27 12:03:58
probably increasing
2021-02-27 12:04:45
I believe AVIF goes into 'screen capture' mode for those lines -- but don't know for sure
2021-02-27 12:05:15
all integral transforms are panicking when they see simple oblique lines are create a lot of mess
Scope
2021-02-27 12:06:23
However, JXL is better on the background (AVIF has noticeable squares and banding)
2021-02-27 12:06:56
On the second image and low bpp
Jyrki Alakuijala
2021-02-27 12:10:02
people don't look at the background -- only butteraugli cares about it 😄
2021-02-27 12:10:30
when you put the kDcQuant high enough you will get banding with JXL, too
2021-02-27 12:10:47
--progressive_dc will come to rescue at some stage
2021-02-27 12:10:56
but even that is not magic
2021-02-27 12:11:24
having major dc artefacts is usually a much worse failure mode than having some amount of ac artefacts
Scope
2021-02-27 12:13:57
Also, yes, -d 1 by default will hopefully save the web from a lot of overcompressed images (and adjusting quality by metric in general)
Jyrki Alakuijala
2021-02-27 12:19:55
many nice technology efforts were used to give worse quality to users -- like the 1st gen digital tv
2021-02-27 12:20:14
I certainly hope that that will not happen with JPEG XL
2021-02-27 12:21:03
-d 1 compresses to about current average bit rates, even slightly below
2021-02-27 12:21:51
if some part of the quality improvement will be used for bit rate and some part for density, we may end up with -d 1.5 or so as the new 'internet quality'
Scope
2021-02-27 12:22:56
With AVIF however, I notice that people compress images very heavily (even when it is not needed), precisely because the artifacts are very well masked (and the loss of detail is not so noticeable)
Jyrki Alakuijala
2021-02-27 12:23:53
that is a bit scary for me
2021-02-27 12:24:17
if it looks ok, but is possibly semantically changed, it can have interesting effects
2021-02-27 12:24:52
like people can today use their old vacation photos from the beach to track the growth of a mole on their skin
2021-02-27 12:25:28
if we occasionally leave it out but otherwise create a nice looking photo, people can become worried
2021-02-27 12:26:08
there could be a crack on the engine block, but compression removes the crack
2021-02-27 12:26:11
etc.
Deleted User
2021-02-27 12:26:26
Another example, this comparison: https://slow.pics/c/CGOCjUbz
Scope
2021-02-27 12:26:30
Some people even re-compress highly compressed Jpegs to remove ringing artifacts
Jyrki Alakuijala
2021-02-27 12:26:39
cool
Deleted User
2021-02-27 12:26:44
Look at the heart in this comparison and see what happens with the marked line in every codec.
2021-02-27 12:28:14
In AVIF it gets cut off partially, in WebP2 it vanishes almost completely (!!!), and JXL is the ONLY codec that preserves that line, although blurry because of compression.
2021-02-27 12:29:35
Yet another proof that JPEG XL cares about being faithful to the original 😃
Jyrki Alakuijala
2021-02-27 12:30:31
reds are very difficult for color modeling
2021-02-27 12:30:46
if AVIF is done in the XYB colorspace it likely gets that right
Deleted User
Jyrki Alakuijala if AVIF is done in the XYB colorspace it likely gets that right
2021-02-27 12:31:10
Can it be done? It'd be awesome to see! Interesting at least.
Jyrki Alakuijala
2021-02-27 12:31:22
it is nearly possible
2021-02-27 12:31:39
ICC profile is pretty expressive
2021-02-27 12:32:00
Luca and Sami have created an XYB ICC profile
2021-02-27 12:32:12
or nearly the same thing
2021-02-27 12:32:43
we don't know if it works any better, but in my thinking it should solve that problem and the problem of white clouds vs. blue sky
2021-02-27 12:35:11
usually simplistic color modeling (YUV/RGB) thinks that white clouds can be merged with the bright blue sky, or at least it is not a big thing
2021-02-27 12:35:45
it is because blue details usually just doesn't matter at all
2021-02-27 12:36:03
but when blue is poking out from r and g, then it becomes a stronger visual element
2021-02-27 12:36:24
that kind of non-linearity is not possible to model in yuv
2021-02-27 12:37:17
L and M receptors can receive blue light, they are just usually saturated with R and G
Deleted User
2021-02-27 12:37:26
Sorry to interrupt, but Jon created X-B plots with constant Y. If they're supposed to be the same perceivable brightness, why is there so much blue in darker Y's? https://cdn.discordapp.com/attachments/794206170445119489/811627202097315840/xyb.png
Jyrki Alakuijala
2021-02-27 12:38:05
XYB is made for high frequency colors
2021-02-27 12:38:38
if you have one pixel row of a color delta and the next pixel row of the opposing delta
2021-02-27 12:38:46
repeat 4 times
2021-02-27 12:38:52
i.e., ac colors
2021-02-27 12:39:04
XYB doesn't work well for smooth colors
2021-02-27 12:39:18
or -- it is ok for smooth colors but not the best
2021-02-27 12:39:29
CIE1930 solved smooth colors very well
Deleted User
2021-02-27 12:39:36
You know about Oklab, another perceptual color space
Jyrki Alakuijala
2021-02-27 12:39:50
yes, it is based on CIE
2021-02-27 12:40:00
I anticipate that it is better for smooth colors
Deleted User
2021-02-27 12:40:09
Here's a hue plot with constant luma and chroma:
2021-02-27 12:40:09
https://bottosson.github.io/img/oklab/hue_oklab.png
Jyrki Alakuijala
2021-02-27 12:40:17
also, it differs from butteraugli xyb by not having a bias
2021-02-27 12:40:28
oklab gives beautiful smooth colors
Deleted User
2021-02-27 12:40:32
It's as constant luma as it can be
Jyrki Alakuijala
2021-02-27 12:40:43
yes, perfect
Deleted User
2021-02-27 12:40:47
Same plot as above, but in HSV:
2021-02-27 12:40:48
https://bottosson.github.io/img/oklab/hue_hsv.png
Jyrki Alakuijala
2021-02-27 12:41:00
disgusting
Deleted User
2021-02-27 12:41:16
You can probably see that blue in the middle is darker
Jyrki Alakuijala
2021-02-27 12:41:20
oklab has many same ideas with xyb
2021-02-27 12:41:33
xyb has a linear ramp for dark colors -- much much better for compression
2021-02-27 12:42:00
xyb is for HF colors, oklab for LF colors -- if image has information in texture, xyb is better
Deleted User
You can probably see that blue in the middle is darker
2021-02-27 12:42:05
And Oklab actually "sees" this darker blue, here's HSV's luma seen by Oklab plotted here:
2021-02-27 12:42:06
https://bottosson.github.io/img/oklab/hue_hsv_lightness.png
2021-02-27 12:42:50
Not only compression, I'm also interested in image processing, denoising in particular
Jyrki Alakuijala
2021-02-27 12:43:08
https://observablehq.com/@raphlinus/perceptually-smooth-multi-color-linear-gradients
2021-02-27 12:43:17
here you can compare xyb vs oklab in javascript
2021-02-27 12:43:24
there are two different xybs
2021-02-27 12:43:27
one in jpeg xl
2021-02-27 12:43:32
and one in butteraugli
2021-02-27 12:43:35
...
2021-02-27 12:43:53
one in butteraugli is a biased log and weird spectra for xyb
2021-02-27 12:44:20
one in jpeg xl is a biased cube root with easier to understand spectra for xyb
2021-02-27 12:44:36
same basic ideas
2021-02-27 12:45:02
we don't want to compute three logs/exps for each pixel in jpeg xl 🙂
2021-02-27 12:45:22
six muls is much more attractive per pixel than three exps
Deleted User
2021-02-27 12:46:31
For image compression XYB will probably be better than Oklab, but I've got a question about image processing.
bonnibel
2021-02-27 12:49:05
werent cam16-ucs & jzazbz the most perceptually uniform colour spaces atm? _trying to half-remember some papers she read on a wikipedia binge_
Jyrki Alakuijala
2021-02-27 12:49:11
I would not make a lot of conclusions based on Jon's XYB plots vs the oklab plot
2021-02-27 12:49:17
they are different things
2021-02-27 12:49:36
bonnibel -- depends on perception of what
2021-02-27 12:49:58
highest frequency vision is bichromatic, low frequency vision is trichromatic
2021-02-27 12:50:04
no S receptors in the fovea
2021-02-27 12:50:31
if your color discs are 10 degrees or 2 degrees, they are solidly in the trichromatic space
2021-02-27 12:50:47
if they are 0.03 degrees, they approach the bichromatic space
2021-02-27 12:51:23
pretty much every 'truth' about human perception is a coarse approximation
2021-02-27 12:51:29
for both vision and hearing
Deleted User
2021-02-27 12:51:44
Chroma denoising in various programs, even commercial ones, is probably done in Lab, ITU YCbCr or some other not really perceptual color spaces (I know that because I put an image into GIMP, subsampled chroma and put back components, results were similar to excessive chroma denoising). You probably know how excessive chroma denoising destroys color information.
Jyrki Alakuijala
2021-02-27 12:52:09
they just recently (like 20 years ago) found out that some middle cells in retina can also receive light and modulate their behaviour based on light reception
Deleted User
2021-02-27 12:52:18
<@!532010383041363969> so here's a big question: which color space would be better for better chroma denoising, Oklab or XYB?
Jyrki Alakuijala
2021-02-27 12:53:11
XYB and denoising B is safer than Oklab and denoising U
2021-02-27 12:53:27
denoising X is usually not safe
2021-02-27 12:53:39
X will have 4x more noise than Y, so something can be done
2021-02-27 12:53:59
the eye is also about 4x less sensitive for X noise then Y noise
2021-02-27 12:54:24
but the detectable noise level depends on background color
2021-02-27 12:54:45
depends why you want to denoise, too
Deleted User
2021-02-27 12:54:46
For example I've been fiddling recently with Topaz DeNoise AI. While luma denoising is state-of-the-art, chroma denoising is as mediocre as everywhere else and loses details.
2021-02-27 12:55:11
That denoiser is truly addictive...
Jyrki Alakuijala
2021-02-27 12:55:21
it is highly non-linear and the X/B direction rotates in RGB space with the background color
2021-02-27 12:55:37
I'd recommend trying that out in XYB
2021-02-27 12:55:42
the denoising
2021-02-27 12:56:30
oklab denoising wouldn't work for dark areas
2021-02-27 12:56:44
because no biasing/no linear ramp (like in sRGB)
Deleted User
2021-02-27 12:57:22
I can't really convince Topaz Labs' R&D Team to implement Oklab or XYB in DeNoise AI in order for some random from the interwebs to try out lol
Jyrki Alakuijala
2021-02-27 12:57:25
also the S receptor response adds to the CIE color space luma, but doesn't add to the XYB's luma
2021-02-27 12:57:34
haha
Deleted User
Jyrki Alakuijala oklab denoising wouldn't work for dark areas
2021-02-27 12:58:30
Ok, that's a bad thing, especially because dark areas are quite common in photos. Why does it happen in Oklab, worse accuracy in darks?
Jyrki Alakuijala
2021-02-27 12:58:49
oklab compression function is pure cubic root
2021-02-27 12:59:03
cube is scale invariant
Deleted User
2021-02-27 12:59:06
So worse accuracy in darks?
Jyrki Alakuijala
2021-02-27 12:59:08
this is beautiful for maths
2021-02-27 12:59:28
but it has too much accuracy close to zero
2021-02-27 12:59:50
when you try smoothing there with too much accuracy, no smoothing will actually happen/be observable
Deleted User
2021-02-27 01:01:04
Maybe properly trained ML denoising model (because that's what Topaz is using) would account for that? ML models can learn some properties no human could've ever noticed.
BlueSwordM
2021-02-27 01:08:41
Nah, just let aomenc denoise.
2021-02-27 01:08:46
It does quite well by itself. <:kekw:808717074305122316>
Deleted User
2021-02-27 01:09:15
<:MonkaChrist:654081051513061388>
2021-02-27 01:10:20
So if the model notices dark areas in the photo, I'm wondering if it could be trained to know that it should denoise those areas stronger in Oklab because otherwise it wouldn't be visible at all after converting it back to sRGB...
Jyrki Alakuijala
2021-02-27 01:10:57
yes, in oklab it should smooth stronger there
2021-02-27 01:11:14
but having to do such tweaks defeats the purpose of a colorspace
2021-02-27 01:11:22
when all things are right, you just do the simple thing
Deleted User
Jyrki Alakuijala but having to do such tweaks defeats the purpose of a colorspace
2021-02-27 01:14:27
Though it's probably one of the easiest properties that ML model has to learn on its own...
2021-02-27 01:15:10
But you're right about colorspaces, they should Just Work™️
2021-02-27 01:23:44
Honestly I'd just re-train the models with exact same learning data, but in both XYB and Oklab and compare the results.
2021-02-27 01:37:29
<@!532010383041363969> oh, and another crazy idea before I go. I'm also interested in audio and obviously know about Fletcher-Munson curves (equal-loudness curves). I'm wondering if it's possible to make equal-color 3D LUT by interviewing people, showing them random colors and asking them if they differ in brightness and if they do, then which one is brighter. Because that's essentially how Fletcher and Munson made their curves. That'd probably make perfect luma separation possible...
Jyrki Alakuijala
2021-02-27 02:00:58
funny that you like audio -- I'm working on that, too
2021-02-27 02:01:32
do you know http://www.machinehearing.org/
2021-02-27 02:01:56
I have heard very good things about this book
Deleted User
Jyrki Alakuijala funny that you like audio -- I'm working on that, too
2021-02-27 02:03:03
https://tenor.com/view/culture-man-of-culture-cultured-gif-10903367
Jyrki Alakuijala
2021-02-27 02:03:14
another interesting thing in hearing is the CARFAC model
Deleted User
Jyrki Alakuijala do you know http://www.machinehearing.org/
2021-02-27 02:03:22
Haven't heard of that one, unfortunately
Jyrki Alakuijala
2021-02-27 02:03:51
the author is guiding the project that I setup in that domain
Deleted User
2021-02-27 02:04:00
I was mainly sitting on HydrogenAudio and testing Opus Codec, been there since opusenc 1.2
Jyrki Alakuijala
2021-02-27 02:04:02
currently we are looking into partial loudness models
2021-02-27 02:04:24
I hope to eventually bring some new ideas into audio compression from that work
Deleted User
2021-02-27 02:04:27
Now since the audio compression tech matured, I moved my interest to images
Jyrki Alakuijala
2021-02-27 02:04:37
now it is still in deep research
2021-02-27 02:05:06
nothing in tech is mature 😄
2021-02-27 02:05:12
it will take another 500 years
2021-02-27 02:05:59
We are at times like 50 years after Gutenberg invented press -- there is still room for improvement 🙂
Deleted User
2021-02-27 02:06:36
Ok, in another words: general use, "classic" audio compression technology is mature
Jyrki Alakuijala
2021-02-27 02:07:25
this is very interesting, but let's chat more another time, I need to go into bed...
Deleted User
Ok, in another words: general use, "classic" audio compression technology is mature
2021-02-27 02:07:51
Because there's still some research on narrow use-case compression (e.g. codec2) or AI-based compression (but this one will revolutionise every field, not only sound, images too)
Jyrki Alakuijala this is very interesting, but let's chat more another time, I need to go into bed...
2021-02-27 02:08:02
I also think that's enough **for now** 😉
BlueSwordM
Jyrki Alakuijala funny that you like audio -- I'm working on that, too
2021-02-27 02:12:52
Opus 1.4? 😛 Anyway, sorry for bothering you. Good night. 🛏️
2021-02-27 02:19:40
I'm still waiting on rnnoise integration into Opus' Silk for even higher quality(less random noise=better compression) VLB speech.
Deleted User
BlueSwordM Opus 1.4? 😛 Anyway, sorry for bothering you. Good night. 🛏️
2021-02-27 02:22:57
> Opus 1.4 God I wish... Opus 1.3.1 is already good, but can it be made even better? Opus development unfortunately stagnated, it's been half a year from 1.3 to 1.3.1, now we've got barely any news (if any at all) since Apr 12, 2019 (1.3.1 release date).
BlueSwordM
2021-02-27 02:23:40
Yes. It can be even better I bet, especially at lower bitrates for speech.
Deleted User
BlueSwordM I'm still waiting on rnnoise integration into Opus' Silk for even higher quality(less random noise=better compression) VLB speech.
2021-02-27 02:25:24
Amateur. I'm denoising my mic before the sound reaches any app 😉
BlueSwordM
2021-02-27 02:25:52
Same here. I've got Cadmus running, which runs the audio through rnnoise, detecting whether or not I'm actually speaking.
Deleted User
2021-02-27 02:26:13
For me it's Equalizer APO + Werman's RNNoise DLL, because I'm on Windows.
2021-02-27 02:26:18
Are you on Linux? ...ok, I've just searched for Cadmus and it's for Linux.
Scope
2021-02-27 02:38:40
2021-02-27 03:17:44
Low BPP D20 `kDcQuant = 0.89` I20 `kDcQuant = 1.34` <https://slow.pics/c/tApsL00L>
2021-02-27 03:20:27
Visually different, but it didn't help much
Jyrki Alakuijala ziemek.z and Scope -- if you are able to recompile, try with a lower and a higher kDcQuant value
2021-02-27 03:24:16
<:This:805404376658739230>
Deleted User
Scope <:This:805404376658739230>
2021-02-27 03:53:09
For me unfortunately it's PITA to recompile this thing, that stuff takes lots of RAM and now I'm low on memory, *again*. Fortunately you took care of compiling this thing 🙂
Scope
2021-02-27 03:56:40
Yep, but, it did not help much, perhaps in some areas `kDcQuant = 1.34` is better, but in others its worse
Deleted User
2021-02-27 04:14:49
Same thing for me, it's neither better nor worse, it's just different.
_wb_
Sorry to interrupt, but Jon created X-B plots with constant Y. If they're supposed to be the same perceivable brightness, why is there so much blue in darker Y's? https://cdn.discordapp.com/attachments/794206170445119489/811627202097315840/xyb.png
2021-02-27 07:18:08
Those plots were made in a lazy way: I just let X and B vary while keeping Y constant per subimage. That means that at the edges, the plots have "impossible" color combinations that would never happen when you start from RGB and convert it to XYB. For example, in the darkest one, the blue at the bottom is where Y is very low but B is very high — but that does not actually happen: there is no RGB combination that will map to that XYB combination. The inverse XYB transform maps it to some RGB values, and that's what you see there. But a more accurate way of making such plots would only show the part of XYB that is possible, and then you would see that the shape is not a square, and at the darks and at the brights, the area of X,B values is much smaller than at the mid-values of Y.
2021-02-27 07:20:30
2021-02-27 07:21:09
The current XYB space might be slightly different, I made this visualization a while ago
2021-02-27 07:22:02
That's XYB on the left, YCbCr in the middle, YCoCg on the right
2021-02-27 07:25:40
(there are some holes in the XYB slices because populating them with all 8-bit sRGB colors does not reach all pixels of the plot, but you get the idea)
Jyrki Alakuijala
2021-02-27 12:40:44
this looks smart and nice https://www.youtube.com/watch?v=eNOGqNCbcV8
2021-02-27 01:04:39
I like how they consider the original spectrum of captured light instead of trying to juggle it when it is already too late
2021-02-27 01:04:56
that is very similar to the thinking I had when creating XYB
2021-02-27 01:05:50
trying to give it a 1st principles systemization approach instead of loads of glue, cargo cult and inherited rules of thumb carried over from the analog computer era 😛
2021-02-27 01:07:37
basic physics (at my level of knowledge) indicate that photos don't compress -- they just superposition, gamma compression can only happen once they are no longer photons
2021-02-27 01:08:40
the process that converts them into chemistry can be modeled as a differential equation, but that process absorbs wide spectra of light
2021-02-27 01:09:31
the compession process (mostly in the receptor itself I believe) cannot know which wavelength the photon had before being converted into chemistry
2021-02-27 01:10:02
because of it we need a 3x3 matrix that models the conversion of linear light into the received light in the LMS receptors
2021-02-27 01:11:20
and hey, while at it, let's make it 4x4 homogeneous transform so that we can add the spontaneous triggering of that process (which also biases the dynamics)
2021-02-27 01:12:17
after that matrix we gamma compress, like the opsin dynamics process in LMS cells
2021-02-27 01:13:13
at that stage we have what is close to LMS, and we do X = M-L, Y = M + L and B=S (or B=S-Y, to decorrelate a bit more)
2021-02-27 01:14:57
after that we find Y->B and Y->X decorrelation factor (spatially varying images), similar to chroma-from-luma in other systems
2021-02-27 01:15:20
doing this right allows for two interesting things:
2021-02-27 01:15:44
we can store the B channel with less spatial accuracy
2021-02-27 01:17:13
we can do higher (dead-zone) quantiation for the X channel, and use the bits for the Y channel -- the perception of XY is highly elliptical and our formalism knows the direction of that ellipse for a given background color, other systems can do it wrong -- especially for deep reds
Because there's still some research on narrow use-case compression (e.g. codec2) or AI-based compression (but this one will revolutionise every field, not only sound, images too)
2021-02-27 01:19:47
my thinking is that it is premature to go into AI before we understand the human perception of sound
2021-02-27 01:20:13
the HiFi enthusiasts talk about transparency and spatiality of sound
2021-02-27 01:20:43
the psychoacoustic modeling people cannot trace three audio sources in space while humans can trace 17
Scope
2021-02-27 03:33:11
AVIF (cdef on)
2021-02-27 03:33:34
AVIF (cdef off)
2021-02-27 03:34:49
CDEF smoothes a little, but does not affect the quality much (so it's something else)
Jyrki Alakuijala
2021-02-27 03:37:53
Thank you Scope!!
2021-02-27 03:38:09
This matches with my experience about CDEF, that it is usually only a small improvement
2021-02-27 03:38:28
I think we do something awfully wrong in JPEG XL in integral transform selection
2021-02-27 03:42:39
(we tried a version of CDEF in JPEG XL and it was not impressive to us)
2021-02-27 03:43:24
we made the gaborish directional at a time (and tried it with an approximate reverse transform at encoding time)
2021-02-27 03:43:47
it was not much better or worse but much more complicated
2021-02-27 03:43:50
----
2021-02-27 03:44:05
ok, that is for CDEF -- I wonder if there is a way to disable directional predictors
Scope
2021-02-27 04:00:29
Yep, I have not found how to disable it through the options
2021-02-27 04:59:17
On a lower bpp AVIF (default)
2021-02-27 04:59:39
--use-dct-only `Use DCT tx onlyq`
Crixis
2021-02-27 05:42:13
The best case is that is a bug of the encoder
Jyrki Alakuijala
2021-02-27 05:45:09
I found two minor bugs in the encoder earlier this week but they were something like 0.008 % and 0.33 % improvements
2021-02-27 05:45:28
it can be a thousand minor problems kind of problem too
2021-02-27 07:07:50
the dct looks similar to JPEG XL?
2021-02-27 07:08:13
I believe the quantization matrices of JPEG XL are more sloaping and in AVIF flatter
2021-02-27 07:09:02
if AVIF's DCT looks better than JPEG XL's basic reconstruction then it could be the quantization matrices
Scope
2021-02-27 07:11:06
No, it's still better, but only with this option I saw some artifacts, AVIF has very powerful techniques to save lines even with very heavy compression
2021-02-27 07:15:53
For example, the image size is 15,500 bytes (AVIF)
2021-02-27 07:17:19
JXL (33 558)
Crixis
2021-02-27 08:11:55
To me jxl AC choice seem pretty bad on this case, i don't know if only a good filtering from avif but:
2021-02-27 08:13:03
to me this nose line is so bad
2021-02-27 08:13:09
Jyrki Alakuijala
2021-02-27 08:13:39
JXL has too small integral transforms at low bitrates
2021-02-27 08:13:54
when it see black and white, it drops down to 8x8 dcts
2021-02-27 08:14:08
we know that they don't work at low bit rates