Support my work on Patreon

If you like my work, please consider to help my growing family with a little financial support through my Patreon creator page.


Alternatively, you can leave a one-time donation via PayPal using the Donate button below.

Total Pageviews

Friday, June 19, 2015

Experimental "Volume" tool

I've been recently working on a new tool, inspired by this post in Pat David's blog: Clarity in GIMP.

The post describes a method to imitate the "Clarity" effect in Lightroom, by applying a UnSharp Mask (USM) filter at high radius restricted to the mid-tones of the image.

So I took this idea and tried to implement it in a flexible way in PhotoFlow. In order not to re-use the same terminology as Lightroom, the filter is called "Volume" (as it is intended to give some "volume" to your image...).

In the current version, a local contrast enhancement filter (USM for the moment) is strength-modulated with a smooth curve applied to the luminosity channel of the input pixel data. The screenshot below shows the graphical interface of the filter with the default parameter values. The five vertical sliders in the bottom allow to control the strength of the effect in various luminosity ranges. The example below corresponds to a possible selection of the mid-tones.


More specifically, the 5 sliders correspond to input values of 0% (blacks), 25% (shadows), 50% (mid-tones), 75% (highlights) and 100% (whites). For example, the default configuration show above is equivalent to this smooth tone curve:


The filter is still in an experimental form, but works already without issues and therefore it will most likely be included in the next release for user testing and feedback.

In future, a simple extension (which is already foreseen in the code and GUI) will be to add other local contrast enhancement filters, in addition to large-radius USM. Here are some possible choices:
  • Surface blur (or "bilateral smoothing")
  • G'MIC Local Normalization
  • G'MIC Local Variance Normalization

Thursday, June 18, 2015

Version 0.1.3 released

Version 0.1.3 of PhotoFlow is out!

This is a bugfix release that brings improvements in the program stability, in particular  in the handling of cloned layers. It also fixes some issues with the visualization of RAW files at zoom levels below 100%.

Here is the complete changelog:

Version 0.1.3
  • Fixed opacity blending of "Color" mode in RGB and Lab colorspaces 
  • Fixed opacity blending of "Luminosity" mode in Lab colorspace
  • Fixed filling of layer list of clone tool: for clone layers inserted in layer masks, the parent layer was incorrectly included in the list, leading to a possible unresolvable circular dependency between the clone layer and its source. Now the parent layer is not included anymore in the list of possible clone sources.
  • Original "visible" flag of layers renamed to "enabled", and added a new "visible" flag to indicate if a given layer is either directly hidden or indirectly hidden because some of its parents are hidden. The "enabled" flag now indicates if the layer is directly hidden.
  • Removed fatal assertion on the validity of the output image from layer extra inputs. Now if the image is invalid a NULL pointer is simply added to the list of extra inputs, without causing a program crash. Nevertheless, a notification mechanism should be introduced to inform the user of the abnormal situation.
  • Fixed corruption of RAW image metadata at zoom levels below 100%
  • Fixed bug in the image preview at program startup
  • Fixed several clang compilation warnings
Version 0.1.2
  • Added "invert" parameter to gradient tool (to reverse the direction of the gradient
  • Fixed bug that prevented correct loading of presets with multiple layers into a layer mask
  • Fixed locale support (only tested with french translations under Linux)
  • pfconv: output file is now overwritten in place by exiftool
Updated Windows and OSX installers are available from the usual downloads page.

Thursday, June 11, 2015

New interface and new tutorial coming soon...

So I've been recently working on a new layout of the layers list and the tools controls, with the hope to make the interface more intuitive and improve the overall usability.

This new interface puts the controls of the various filters (sliders, curves, etc...) directly in the main window, instead of using separate dialogs. The idea is to reserve an area below the layer list, where the controls of all the selected layers are shown sequentially (in the same order as the layers).

Each group of controls belonging to the same filter has a sort of "tool" bar, where one finds buttons to toggle the visibility of the layer, activate/deactivate the layer mask, activate/deactivate the preview of the current settings, and to reset all the controls to their default values. The tool bar also contains an editable field with the layer name, and an expander button that shows or hides the rest of the controls.

Here is a preview of the new interface (with two layers selected):



As you can see, there is still a lot of work to do, but the interface is I think quite clean and intuitive. Would you have any suggestion, do not hesitate to drop a comment!

A new tutorial under construction

Meanwhile I've been also busy putting together a rater long tutorial on panorama editing with Hugin and PhotoFlow. It is almost completely written now, and should soon appear on pixls.us! Keep an eye on this blog, the google+ community or directly the pixls.us forum, as we'll certainly drop a message when it will be finally online!

Thursday, May 28, 2015

Version 0.1.1 released

Version 0.1.1 of PhotoFlow is out!

Here is the complete changelog:

  • Added file name widget to RAW loader dialog. This allows to edit multiple RAW files simultaneously in the same image.
  • Added digital watermarking tool based on G'MIC "watermark_fourier" filter (thanks +Morgan Hardwood for suggesting this). A tutorial about this new tool will soon be posted on this blog.
  • Modified Hue/saturation and brightess/contrast tools to work correctly also in Lab colorspace.
  • Fixed computation of saturation adjustment. Now the saturation slider produces exactly the same output as the equivalent tool in GIMP (except that computations are in 32-bits floating point precision and are applied non-destructively). Internally, the hue/saturation tool now works in the HSL colorspace like GIMP (instead of the HSV colorspace used before).
  • Moved "RAW developer" tool into "Load" tab and removed "raw" tab.
  • Moved "Color profle conversion" tool into "Color" tab and removed "conv" tab.
  • Quality of Jpeg output set to "100".

Updated Windows and OSX installers are available from the usual downloads page.

Sunday, May 3, 2015

First screencasts showing the basic usage of PhotoFlow layers and batch processing

I have started to record screencasts to show the basic usage of photoflow as well as specific editing techniques. The first three videos are available from youtube.


Basic usage of layers and layer masks

http://youtu.be/TiBN3wXa6fs

This first video basically shows:
- how to open a RAW file and process the RAW data to produce an initial RGB image
- how to increase the global and local contrast in the mid-tones using luminosity masks
- how to crop the image with a fixed aspect ratio
- how to edit a radial gradient to add some vignetting effect

That was probably not my best edit ever, but it should give a reasonable idea of how to perform the basic editing steps and what kind of real-time speed one can expect from the current version of photoflow. Concerning speed, you will notice that the loading and initial processing of the RAW image takes quite long. That is because full-resolution data is being cached during this time, to speed-up the rest of the processing. I hope to make the whole thing a lot faster in future, but I'm presently concentrating on usability and stability more than speed optimizations.


 Pseudo-HDR with PhotoFlow and Enfuse

https://www.youtube.com/watch?v=Geh0mr4Vlww
https://www.youtube.com/watch?v=stMKHZ6b6Dg

The first video shows:
- how to save the RAW processing parameters as a preset and than use the preset to batch-convert a group of RAW files to TIFF.
- how to align and exposure-blend a group of bracketed images using align_image_stack+enfuse.

The second video describes as simple de-ghosting technique, which required less than 5 minutes of editing. Along the editing, you will see how to draw with the freehand painting tool directly on a layer mask.

The batch-processing is for the moment only fully supported under linux.

Friday, April 3, 2015

The clone-stamp tool

The "clone stamp" tool has been recently redesigned and completed, and now it is fully functional.
The tool can be found in the "misc" tab of the layer chooser dialog:


The usage of the tool is pretty easy: one has first to define a source region by left-clicking on the preview area while holding down the Ctrl-Alt keys. A circle shows the size of the area being cloned.


Once the source area is selected, there will be two circles shown in the preview: one corresponds to the current mouse position, the other to the area being cloned:


The pixels are cloned by dragging the mouse while holding down the left mouse button:



The clone/stamp tool is controlled by three parameters: the size of the brush, the opacity with which the cloned pixels are overlaid with the original ones, and the smoothness of the brush edges. The image below shows the same area cloned wih a brush smoothness of 100%, 50% and 0%:



The new  clone/stamp tool is available from the develop branch of the github repository or from the updated Windows and OSX installers.

Friday, March 27, 2015

Multi-scale decomposition with G'MIC and PhotoFlow



Mairi by Patrick David (cc by-sa)
Multi-scale editing of the forehead (mouse over to see original)

I've been silent for quite some time recently, for quite good reasons: I've been busy working on a new multi-scale decomposition tool, based on G'MIC "split_details" filter. Actually, porting the "split_details" filter was quite easy. The hard part has been to modify the processing engine so that it can handle multiple output images from one operation... but this is quite off-topic.

The multi-scale decomposition filter works in a similar way to the "Wavelet decompose" gimp filter: it creates a blurred base image and several separate layers containing the image details at increasing spatial frequencies. Each level has to be blended with the base image in "grain merge" mode in order to recreate the original. The various scales are obtained with classical gaussian blurs instead of wavelets, but apart from that they are equivalent to their wavelet counterparts.The filter is controlled by two parameters: the blur sizes of the smallest and largest detail scales, expressed in percent of the image dimensions. One needs to hit the "Update" button whenever one or both of the parameters is changed; this will trigger the re-computation of the various scales and will refresh the preview.


Image decomposition is typically used for skin retouching, and this post will be mostly devoted to this topic. However, I do not claim at all to be an expert of this technique.
Very briefly, the basic idea of skin retouching through multi-scale decomposition is to "erase" the unwanted elements in the layer where they are most prominent, leaving other details in higher or lower scales intact. For example, you might want to remove some visible skin defect without destroying the natural texture of the skin pores.
A very comprehensive introduction on the subject can be found on Patrick David's blog, here and here. From my side, I will limit myself at explaining how you can apply in PhotoFlow the techniques described by Patrick David.




The multi-scale decomposition filter is available in the "Details" tab of the layer chooser dialog. However, using this filter for skin retouching requires a bit of tedious "preparation work"... The good news is that I have already done all the work for you, and bundled into an handy preset that I strongly suggest to download and use as a starting point (you can get it from here).

Once loaded, the preset will create several group layers (one for each scale), with blend mode set to "grain merge". In this blend mode, the pixel values are added or subtracted depending wether they are above or below 50%; therefore, a value of exactly 50% does not modify anything.

Each group contains initially two layers, one with the details at the given scale and one filled uniformly with a 50% gray. The uniform 50% layer is associated with an opacity mask that is initially black, so that all image details are preserved by default in the final result.
In this configuration, unwanted details can be "erased" by simply drawing with a white pencil on the layer mask. The strength of the "detail suppression" can be controlled via the opacity of the 50% gray layer.

Of course, several other edits can be applied to the detail layers. Some examples are local gaussian blurs, or the healing brush to clone details from one place to another.






A practical example

Here is an example of the image decomposition in action. I've used a detail of the Mairi image, originally used in Patrick David's tutorial, for lack of a better idea and also for an easier comparison  with Patrick's own result... For this example I've used a "base scale" value of 0.2% and a "detail scale" value of 0.02%, and I've worked on the scales #5, #4 and #3.
First, I've enabled the "gray" layer in the "Scale 5" group, and then I've opened the layer mask  by double-clicking on the gradient icon.



Then I've double-clicked on the "gray mask" layer and I've started painting with a white brush of 20px, to progressively replace the large-scale details by an uniform 50% gray color.


The results of this step are shown below (click on the caption to see the original image, the original "scale #5" details, the final mask, the final "scale #5" details, and the resulting image).


Editing of the forehead on the details scale #5
Click type to see: Freehand mask - Details (scale #5) - Edited details - Image after scale #5 edit - Original


Next I have repeated the same operation on the 4th scale, this time on a smaller area in the center of the forehead (see below).


Editing of the forehead on the details scale #4
Click type to see: Freehand mask - Details (scale #4) - Image after scale #4 edit - Previous step

Finally, with two more strokes on the 3rd scale I have retouched just a bit more the two lines above the nose. The opacity of the gray layer was set at 50%, to show how one can produce very subtle changes through this method.


Editing of the forehead on the details scale #3
Click type to see: Freehand mask - Details (scale #3) - Image after scale #3 edit - Previous step


Conclusion

Of course this example if far from being a complete skin retouching tutorial, but it should be enough to give an idea of the potential of multi-scale decomposition and of how to use this technique in photoflow.

The nice thing is that the whole set of steps is non-destructive: the parameters of the scale decomposition as well as the edits of the individual scales can be tweaked at any moment with no limitations. When changing the decomposition parameters, it is necessary to click on the "Update" button in order to refresh the preview image. This will take a bit of time to complete, as the program needs to re-compute the different scales and cache the data again. Once the computation finished, all layers will be automatically updated to reflect the new settings.

Last but not least, this tool is fully integrated with the rest of the processing pipeline, and it is therefore possible to perform the skin retouching directly on a RAW image, without the need of an intermediate RAW converter.