On 20 Feb, Hal V. Engel wrote:
> On Tuesday 20 February 2007 16:28, peter sikking wrote:
>> now that we got the brush part nailed, we need to find something for
>> the user to set the source area. To me as an interaction architect
>> the healing brush looks like a smart clone tool on steroids.
>> that means we can use exactly the same interaction as the clone tool.
> This is exactly the way this works in photoshop and I can't think of any 
> reason to do it differently.  In fact this is exactly what I would expect as 
> a user.

Let me explain the difference between the clone tool and the healing
tool in more detail.

Given an I(mage) which contains (usually) small regions S(ource) and
D(estination/defective) of identical shape.

Step 1 (exactly like the clone tool)  Copy S to D, call this S'

Step 2 Usually this copy doesn't fit perfectly to the neighbourhood
       of D in I. One reason could be a different 'lightening'.
       To improve this - like a chameleon - S' should adapt itself to
       its neighbourhood. Georgiev's algorithm tries to find a (distributed)
       factor F which should be multiplied to each pixel value (each color) 
within S'.
       Of course, this distributed factor should be as smoothly varying as
       possible since otherwise you get a random picture.
       To do so, this factor is computed by dividing (the color values)
       of each boundary pixel in D by the corresponding one in S. Now, these
       values, which are only given at the boundary of S', are extended smoothly
       into the interior of S by solving a so-called Poisson equation.

       For this to work as expected the boundary of D must not contain 
       'defective' pixels since otherwise this defect would be extended into
       the interior and the healing tool probably produces worse results than
       the clone tool itself.

       Therefore one does need an area D which includes the defective
       parts but whose boundary must not contain any defective pixels.
       Please have a look at the example given on page 3 of

If the healing tool were to applied on the fly while the brush is over a 
defective part, its boundary will most probably contain defective
pixels. Think of long thin scratch, say several hundreds of pixels long,
and you're using a brush of say 20 pixels in diameter.

So, if the 'brush style' of the healing tool is a must, I'd suggest to
do away with the healing tool altogether - as a separate tool. Instead
one could add a post-processing option to the clone tool which tries to
call for the chameleon described above.

For that to implement, one would need to gather the (set-)union of all
the regions having been touched by the brush in the source as well as in
the destination area. Furthermore this union should be filled afterwards
not to contain many tiny holes.

Again, since I don't know the internal API of Gimp, I would need a lot
of help for implementing that. Once, both regions are given, I could
implement a (fast) method to apply Georgiev's algorithm.

Helmut Jarausch

Lehrstuhl fuer Numerische Mathematik
RWTH - Aachen University
D 52056 Aachen, Germany
Gimp-developer mailing list

Reply via email to