GSoC: proposal for transformation tool

Marc pe.marc at free.fr
Mon Apr 5 10:58:33 CEST 2010


I hadn't notice I had left a gap, but you're right.
Concerning QTransform, thank you for that, I didn't know it existed : it
is indeed exactly what I was looking for, i.e. a representation of a 3x3
matrix.
Now that + the week I skipped will leave me with more time than
expected. I can then switch the pre-written warping transformations from
optional to compulsory (unless you see something more important to add
to the tool instead).

I indeed took a look at gimp's transformation tool specification, but
after discussing it with Wrender, we thought that, even if it looks
fancy, we're not sure at all that it would be ergonomic. Actually,
Wrender insisted on the utility of shortcuts and key modifiers :
apparently professionals use it very often because, once you know them,
you gain a considerable amount of time.
But if you really think that i should give it further thoughts, I can..
Thanks you for your comments.

Le lundi 05 avril 2010 à 10:27 +0200, Sven Langkamp a écrit :
> On Sat, Apr 3, 2010 at 11:52 PM, Marc <pe.marc at free.fr> wrote:
>         Hi,
>         here is the first version of my proposal for a new
>         transformation tool
>         for krita. I'd like some comments !
>         
>         Title: Image Tranformation Tool for Krita
>         
>         Abstract:
>         
>         Since Krita is to be used also for shading and texturing,
>         there are some
>         image transformations that it needs to provide. Indeed, a
>         professional
>         even reported that, for texturing, image manipulations were
>         the most
>         basic and important tools used.
>         
>         While Krita already covers most of the essential features
>         concerning
>         color correction, layering, and painting, the current image
>         transformation tool lacks crucial features such as shearing
>         image,
>         changing image perspective, or warping image (plus some
>         pre-written
>         transformations using warping).
>         What's more, the current tool shows some problems in
>         conception : the
>         transformation process is done each time the user rotates or
>         scales the
>         selection, which deterioriates the image each time a little
>         bit more.
>         The tool should work and perform each transformation on a
>         temporary low
>         quality representation of the selection, and perform the
>         complete
>         transformation on the initial selection only once.
>         Ultimately, the current transformation tool is not functional
>         nor
>         ergonomic : a tool like that needs to have shortcuts, key
>         modifiers, and
>         some buttons (even if it is just a few) to facilitate its use.
>         
>         Hence the aim is to develop from scratch a new transformation
>         tool for
>         krita, which will be at the same time fast, quite exhaustive,
>         and
>         comfortable to use.
>         
>         Implementation :
>         
>         -First, I will focus on rewriting from scratch the current
>         transformation tool (only the code for the already-existing
>         scale and
>         rotation transformation will likely be re-used), so that it
>         keeps the
>         original shapes of the selection, and records all the
>         modifications done
>         by the user (basically this will be done by updating a QMatrix
>         at each
>         step). When the user is finished with the transformation, the
>         tool will
>         then apply the complete resulting operation on the original
>         shapes,
>         which will replace the current ones.
>         
>         -Then, I will add the shear transformation (which will be
>         immediate from
>         an algorithmic point of view, since it is simply a linear
>         transformation
>         that Qt can perform for us using a QMatrix). To shear the
>         image, the
>         user will only have to hold a key modifier and click on the
>         side he
>         wants to move. I will also add a center for the rotation,
>         which can be
>         moved by the user.
>         
>         -Then comes the "change perspective" transformation, which
>         won't be as
>         easy as shearing : since it is not a 2D transformation, it
>         cannot be
>         done using a 2x2 matrix like QMatrix. However, such a
>         transformation can
>         be done using a 3x3 matrix, and projecting the coordinates on
>         the plan
>         of the screen. Perhaps the best way to implement it is to
>         change
>         directly the KoShape class to accept 3D transformations. Thus,
>         this may
>         take some time : I will have to create a 3x3 Matrix class with
>         basic
>         operations such as multiplication, inversion, determinant and
>         changePerspective, and then write the methods for 3D
>         transformations in
>         KoShape. In Krita the user will be able to rotate the image
>         around an x
>         axis and around an y axis by holding a key modifier and moving
>         the mouse
>         (movement in the x direction will perform a rotation around
>         the y axis
>         and vice versa).
>         
>         -Finally, I will implement warping. Warping enables the user
>         to
>         transform the image by modifying some of its points : a grid
>         is
>         displayed temporarily on the selection and the user moves its
>         intersection points to deform the image. This will likely take
>         a great
>         amount of time in proportion to the other transformations. It
>         is really
>         a challenge from an algorithmic point of view : it is not a
>         linear
>         transformation, and thus cannot be done simply by multiplying
>         matrices.
>         So first i will have to do some research, read some papers to
>         come up
>         with an algorithm. Implementing the interface will also be
>         quite
>         challenging.
>         
>         -If i have some time left, I will add some pre-written
>         transformations
>         using the warping transformation.
>         
>         Some details about how the user will use the different
>         transformations
>         on this scheme :
>         http://dl.free.fr/bUw3Loddg
>         And a mockup for the Tool Options widget :
>         http://dl.free.fr/qqX3RkbjD
>         
>         Timeline :
>         
>         Although my exams finish the 21th of May, I will still have to
>         work on a
>         project for school until the 11th of June (but then I will be
>         entirely
>         free until september). Hence, I would start working on my
>         transformation
>         tool before the official beginning of the Google Summer of
>         Code, in
>         parallel of school.
>         This would be a preliminary schedule :
>         Apr 20 - I start right away with rewriting the current
>         transformation
>         tool.
>         May 3 - The tool should be rewritten, enabling like before the
>         user to
>         rotate and scale the image. I will be taking 10 days to
>         prepare for the
>         exams. My exams will then take 10 days. Afterwards I will have
>         3 weeks
>         to work on a project which will close the school year.
>         June 11 - implement the shear transformation and the change
>         perspective
>         transformation (2 weeks).
>         July 2 - work on the details of the interface to have
>         something polished
>         for the midterm evaluation.
>         July 9 - begin the work on the warping transformation. The
>         investigations will likely take about 1 week and the
>         implementation of
>         the algorithm and the interface will take easily 2 weeks.
>         July 30th - polish the interface, bug corrections, adding
>         pre-written
>         transformations using warping (until the pencils down date).
>         
>         About me :
>         
>         I am a first-year french student in a school of engineering
>         (Ensimag :
>         National Superior School of Computer Science and Applied
>         Mathematics). I
>         have been using essentially open source programs for
>         approximately 5
>         years now, and, since January, i have made several small
>         contributions
>         for Krita (for example i fixed/added the local selections).
>         Thus, I am
>         already familiar with krita's code.
>         I have grown an interest in image manipulation and
>         transformation since
>         last year, while I was working on image resizing techniques
>         and basic
>         edge detection methods for a school project last year. This
>         project
>         resulted in a small program written in Qt, which means I am
>         comfortable
>         using Qt and C++, and I am not afraid to read scientific
>         algorithmic
>         papers which may be needed to complete my project.
>         
> 
> Have a look at QTransfrom that is a 3x3 matrix allowing perspective
> transformations. I think changing KoShape is beyond the scope for this
> project and it shouldn't be needed for it. Did you take a look a the
> specification for the new Gimp transform tool? That can provide some
> ways to avoid forcing the user to always use shortcuts.
> 
> I the timeline I noticed a small gap where is says "(2 weeks)", but
> it's actually three weeks till July 2nd.
> 
> Otherwise it looks good. 
> _______________________________________________
> kimageshop mailing list
> kimageshop at kde.org
> https://mail.kde.org/mailman/listinfo/kimageshop




More information about the kimageshop mailing list