Re: [Gimp-developer] deriving transform by comparing image before/after edit
Bill Ross via gimp-developer-list <[email protected]> Tue, 29 Dec 2020 18:50:19 -0800
| Newsgroups | gmane.comp.video.gimp.devel |
|---|---|
| Message-ID | <[email protected]> |
Hi Adlbert, That might add all kinds of great functionality to gimp, enabling it could be optional, although wouldn't handle the old edits I want to train nets on so I can just stop editing 'now'. :-) In planning it, I'd think of what core functions are required for basic touchup, so a network could be trained to make optimal use of them once they could be worked out mathematically from all one's old edits (worst-case, autoadjust 20? numerical sliders til you get the least net 'distance' from the edited pic, likely faster with some optimization library, then accept or reject each best-effort by visual inspection before it is used for training). It'd be like having your own custom version of equalization but I expect it'd be good and final about 80-90% of the time for people who spend less than a few minutes editing each photo. I wonder if a joint effort with ImageMagick or other groups might be worthwhile, given the possibility for shell-scripting as well as within workbenches. I'm being gradually educated / figuring out how NNs might be applied in further discussion here: https://www.reddit.com/r/computervision/comments/kktdq4/derive_transformation_matrix_from_two_photos/ Bill https://twitter.com/photoriot/status/1344064933248421889?s=20 On 12/29/20 4:46 PM, Adalbert Hanßen via gimp-developer-list wrote: > Hello Bill, > > your problem could be solved much easier and doing that would open great > new things to Gimp: > > Let us for short think of all of Gimp's functions (I just cal them > functi, but their names of coursee would be unique within Gimp), which > are accessible from any menu function, being split into a parameterizing > function parametrize_functi and an actual operating one operate_functi, i.e. > > * parametrize_functi just asks for all parameters (if there are any) but > does not process them > > * imagine thatparametrize_functi createsa log entry "functi, pi1, ...., > pin"with all necessary parameters which it has obtained when the ok > button is pressed (if there is one), > > * those log entries would be recorded. > > * when the ok button is pressed,operate_functi functions would be called > through one central placewith those recorded parameters. Thefuncti > areidentified by the firstentry in each recorded parameter set. > > Then it would become very easy to automatically re-run such recorded > steps . Your question “How exactly did I achieve this result?” would > become superfluous. > > Would that not be great? > > In Gimp, all theses log entries should be recorded strictly inthe > sequence in which they are done. Of course, the number of the tab to > which they go (and the plane in it and son on) also have to be recorded. > When the clipboard is used, that has to be recorded too and if the > clipboard-content doesnot originate from this particular Gimp session, a > copy of it has to be stored to make everything reconstructible. (IfGimp > does not get notified when the system clipboard is changed outside of > Gimp, Gimp has to maintain ashadow copy of a clipboard with an image and > it has to compare the current system clipboard containing an image to > its own shadow copy, in order to storea reconstruction copy of the > system clipboard image, if any operation happens, where the system > clipboard from outside of Gimpis actually used in Gimp). > > With such log-keeping, even all “destructive” functions could be undone > in Gimp without much storage requirements: In the worst case, the > sequence of processing steps would have to be redone from the very > beginning. One could speed that up by storingintermediate result toa > file, until the session ends. > > When a picture is stored or exported, some cleanup has to be done to > eliminate all logged operations and possibly also all stored system > clipboards which entered the flow of operations but do not not influence > any non-stored result any more. Idemat the end of a session or closing a > tab, > > Of course, loading an image has also a parametrize function: The one > which lets you select the image to be loaded and the tab to which it > goes. Of course, switching to anothertab also has to be recorded. When > you copy something from one tab and paste it e.g. to a plane in another > tab, the associated processing logs become “mangled” because the > pasted-to history now also depends on the history of the pasted-from tab > and its associated image. > > The number of parameters of the functi differ from one function to > anotherone. There could be none, like in transform to grayscale. There > could be only a few, like in setting a threshold transforming to B/W or > when doing some brightness or colour manipulations. There would also > onlybe a few like when pasting something from the clipboard to a > specified place (i.e. the coordinates of the placement and possibly an > orientation angle). There could be functions which have many parameters, > like cutting out some fancy shape. > > The whole log filecould be a plain ASCII file! It would besomething like > > tab1, openFile, full_path_to_it > > tab1, rotateImage, centerx, centery, degrees > > tab1, cropImage, x1, y1, x2, y2 > > tab2, openFile, full_path_to_that > > .... > > All selection operations, all cloning operations, all matrices used in > convolutions, all colour adaptation operations, really everything you > can do with Gimp could be recorded like this. Theoretically you could do > that by hand by just exactly write down each processing step together > with its parameters. But some functions have quite a lot of parameters, > like e.g. cutting parts with an irregular shape, or using > paintbrush-operations and the like. But a computer does not get tired > when it is told to do tedious things over and over. > > > > Debug and improve mode > > In such an Interpreter approach, one could also provide a mode, where > each parameterizingfunction is called again, but then all parameterizing > steps are preset as they were done when the Gimp session was recorded. > In the debug and improve mode the user can vary what wasdone before and > continue, when the varied parameters have been input. > > If proper construction schemes are used, the parameterizing functions in > this special mode are exactly the same ones as they are used in the > normal mode, the only difference being that instead of only an ok > button, you also haveadditional buttons "interactive", "skip" and "exit". > > * When you click on "interactive", you continue with arbitrary Gimp > processing steps, returning to the place after each step where you > clicked "interactive" in the old recorded procedure after each Gimp > processing step. Of course, during such an operation, all additional > functions and parameters are recorded as well, such that the whole debug > and improvesession yieldsa new plain ASCII description of all Gimp steps > used to achieve the new final result. > > * When you click in "skip", the actual processing step is left out and > Gimp proceeds to the next step from the processing list. > > * When you click on “exit”, the whole batch processing in the special > debug and improve mode is left and Gimp continues with its normal mode > (i.e. without continuing to process not yet processed recorded logged > operations). > > > > Feasibility > > Most probably, the main conditions for such an approach are already > there, the only missing thing would be to create and manage the log entries. > > I have never looked at a single line of source code of Gimp, neither > have Iunderstood the programming paradigmsof Skript-Fu or of the other > programming tools. Perhaps almost all what I spoke abut is already > there. Possiblythe basics are also already in Gimp’s native image > storage format. Are they? > > > > Further Benefits > > 1. It becomes possible to also include the logged processing stepsinto > the metadata of an exportedresult, even into aJPEG-file! Of course all > processing steps in other tabs which had no influence aparticular stored > or exported oneshould be cancelled in that. > > 2. Later edit such a sequence in order to improve a result achieved > earlier, but with a slight modification! > > Recorded log fileswould be a great teaching resource: One could publish > “best practice” sequences: The original picture + all processing steps > leading to a particular result. The steps could be numbered as above and > some explanations why the authordid the particular processing steps > could be published in addition. > > For that purpose I proposeto let the Gimp user record oral explanation > blocks to each processing step. If the authorgoes back some steps, I > would automatically wind up therespective oral explanations and replace > them with new ones, if he decides to proceed differently. > > > > In the firs half of the 1980’s I lead a project, I which we designed an > electronics unit controlling microscope equipment. It was designed in > Modula 2 and it used exactly such an architecture. This system was using > an 8086 microprocessor and firmware completely in ROM. Butit could be > adapted by plugging additional function boardsinto the rack. The central > point in the software were lists, containing function names, boundary > conditions for the parameters and the like plus the entry points of the > operational functions andthe stack lengths of the parameter-depot for > them. The real sequence of operational functions could be called almost > as quickly in sequence as if they had been written in sequence as > function calls. All parameter checking, all conversions and so on were > done before. > > > Adalbert > > > 2018-07-08_Standard > > Am 28.12.20 um 11:02 schrieb Bill Ross: >> Thanks Adalbert, >> >> I don't want to reverse the transformation, just characterize the >> forward transformation enough so that I can train neural nets to >> suggest one I like when shown any photo. You might say I want to use >> my before/afters to derive a filter for each photo, then train nets >> with large numbers of >> >> input_pic_i -> filter_i >> >> so the net can learn to improvise a new filter for each new pic to my >> taste. >> >> ... >> >> Here's an example of how neural nets can pick up my taste in pairing >> photos: >> >> http://phobrain.com/pr/home/siagal.html >> >> Bill >> > _______________________________________________ > gimp-developer-list mailing list > List address: [email protected] > List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list > List archives: https://mail.gnome.org/archives/gimp-developer-list > -- Phobrain.com _______________________________________________ gimp-developer-list mailing list List address: [email protected] List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list List archives: https://mail.gnome.org/archives/gimp-developer-list