vkdt dev diary, pt2

(this is a continuation of the long and winding previous topic but has important links at the top)

beware of the leopard!

vkdt is a vulkan implementation of an image processing graph, similar in spirit to darktable. it addresses some of the issues i have with maintaining my old code there. started as a proof-of-concept to evaluate the viability of gpu only core + gui code, now i think it’s becoming close to actually useful.


in the open suse build system, graphics:darktable:master/vkdt

source code:

vkdt on github

reference documentation for the modules

reference docs as html, generated from md in git above

home page

home page also autogenerated from git


first entry in the new log, same topic as last time. colour transforms. this time the ui side of things, to make it actually possible to use. i took anna’s image here because it came up as an example of sky darkening:

if you select “data driven” mode in the colour module, it’ll by default show four colours (white, pastel red, green, blue). these are anchored as identity transform, so the image didn’t change. if you now click on either of these, you can adjust the red and blue components (green will follow) in sliders that are appearing below the patches. the source and destination colours of the underlying radial basis function node point are visualised as center and frame around the button, respectively:

if you want slightly more accurate interaction, there’s a preset for colorchecker24 coordinates. it’s shipped as bin/data/colourcc.pst and you’ll need to copy it to ~/.config/vkdt/presets/ first. i’ll do that during make install at some point, or pick it up from where it is too. the preset menu opens via ctrl-p:

and then the image can be edited just the same by altering the destination colour of the patches:

next, i’d like to wire a colour picker for the input colour. so far you can only change the destination. i figured that’s likely enough for a few more artistic use cases. for calibration with a test target shot you’d likely need the cc24 presets for the colour picker and maybe a setup that doesn’t need casual ui interaction so much. that’ll be some more generic colour picker interaction that would work with more modules though.

Thanks for sharing your work…I am sure this is something on my end or the way my security settings are but I got this trying to visit your webpage to look at the documentation…not sure if this will happen to others or deter them but just wanted to let you know…

I had that too - certificate expired 7 days ago - you can bypass the error

right. sorry about that, it keeps happening to me…

Hey no issue…its a bit like bypassing the MS warning when installing software…Just wanted to let you know how it was presenting…very interesting stuff you are working on…

thanks. and sorry again about the certificates… it’s a long and embarrassing story i don’t want to tell here, but i’m kinda aware of it. it’s just let’s encrypt and the auto update script doesn’t work. so it’s more stupid than dangerous i would say.

1 Like

Taken with a Samsung A52 cameraphone. I find vkdt struggles a bit with the raws from this camera, especially with noise (reduction).

raw or it didn’t happen! :wink:

?? Do you mean you want me to share the raw?

… in case you’d like me to take a look yes please. it’ll require a noise profile etc. also your image looks like it didn’t attempt to remove any luma noise pretty much at all.

Maybe it came out as a JPG…?

IMG_20211231_185119.dng (22.9 MB)

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

I took this photo with OpenCamera, I think there is no Exif data.

I will share another raw from this series because there you can see that there is also a problem with hot/dead pixels.

Btw: I also shared the jpg because I think it’s pretty (kind of vkdt showcase). I don’t expect you to take a look.

great, thanks. but of course if there’s a noise challenge i want to take it :slight_smile:

1 Like

i see. challenging shot indeed… here’s my hand tuned denoising:

i think now i understand why you said it’s a showcase… i mean this is the kind of noise it starts out with:

btw total export time: 43.838 ms out of which 9.589 ms denoising on the gtx1650 laptop (it runs everything full res and downsizes at the end).

1 Like

IMG_20211231_184552.dng (22.9 MB)
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Here I don’t know how to remove the hot/dead pixels. They do go away if I push luma denoise to the maximum but that also means that the picture is quite blurred.

Look at 100%. It looks like there were stars in the sky, but the picture is actually too smooth/blurred in the lighter zones.

This is how to unedited raw looks on my screen:

Anyway, RT is much better with these raws, and dt probably even better. With the raws from my Olympus camera, the difference is not this big.

fwiw noise-profile.sh thinks these are the right values:

even though the fit seems to be a bit wonky (line should match the red samples):

and yes, there’s absolutely nothing in place against stuck pixels/impulse noise.

edit: some spikes get a little better if you set denoise strength to 10.

I don’t understand. How can noise-profile.sh work if there is no Exif data (i.e. no ISO value)? So is it necessary to create a noise profile for every photo from this camera?

I found open camera dng were a bit different at least when used on my pixel. they are much larger and have no preview.
.they appeared to be an uncompressed tiff essentially…I found that they seemed to come out quite a bit differently wrt WB and colors as well…I never looked at noise …maybe I will go back and check them…

ah, that: the exif data is just a gui/convenience thing to pull out previously profiled values by camera and iso value. you can of course generate a profile just fine without exif data (just not automatically load it for an image). you can always connect i-rawrawhistdisplay as i have done in the screenshot above to check the red spots (variance measurements) against the white curve (noise model from the two values).