28 Commits

Author SHA1 Message Date
Lawrence Lee
1e73135d51 Add perspective edit button to toolbar
The perspective control lines edit mode no longer piggybacks on the hand
tool button on the toolbar.
2020-07-31 21:58:00 -07:00
Lawrence Lee
06caf40598 Move control lines code to new files 2020-07-12 15:19:10 -07:00
Lawrence Lee
eb548f1aff Make control lines part of processing parameters 2020-07-09 11:43:23 -07:00
Lawrence Lee
7f647d188c Fix cppcheck warnings 2020-07-08 11:57:04 -07:00
Lawrence Lee
a7f397541a Make control line type automatically set
Perspective control line type is automatically set when first drawn. The
type is determined by the line's angle. Buttons for specifying which
line type to draw are removed.
2020-07-08 11:46:28 -07:00
Lawrence Lee
98678c1f48 Use smart pointers 2020-07-05 16:37:49 -07:00
Lawrence Lee
1b06cb9999 Limit preview refreshing in control line edit mode
Previously, changing values in the camera-based perspective correction
tool while in control line edit mode resulted in the preview being
refreshed. This is unnecessary because all perspective transformations
are disabled in edit mode. This commit disables preview refreshing for
camera-based perspective adjustments in edit mode.
2020-06-24 17:06:21 -07:00
Lawrence Lee
24681f324c Remove unneeded code 2020-06-10 16:53:33 -07:00
Lawrence Lee
72d390e99a Add button for deleting all control lines 2020-06-10 16:16:40 -07:00
Lawrence Lee
dd4364fab3 Add buttons for switching control line type 2020-06-10 11:41:15 -07:00
Lawrence Lee
6b7c1871b9 Implement basic perspective control lines (WIP) 2020-06-08 18:21:12 -07:00
Lawrence Lee
852b3270e1 Make history message key names more descriptive
Use keys that are more descriptive than "HISTORY_MSG_###".
2020-05-04 18:15:27 -07:00
Lawrence Lee
357cf5b96a Remove scaling from perspective correction
Scaling is applied at the end of all geometric transformations, so it
would be more appropriate outside of the perspective correction tool.
Such an implementation would also work better with the auto-fit feature.
2020-02-26 22:52:55 -08:00
Lawrence Lee
9a594474d9 Add auto focal length for perspective in editor
If the focal length and/or crop factor for the camera-based perspective
correction tool are not edited, they will be set using the focal length
information found in the image metadata. This only applies to the editor
(batch editor and CLI still default to 24 for the focal length and 1 for
the crop factor).
2020-02-23 21:21:36 -08:00
Lawrence
7395b26db4 Add rotation to camera-based perspective tool
This rotation is different from the Rotate tool and the post-correction
adjustment rotation because it is applied between camera shift and
camera angle. It is equivalent to correcting the camera's roll and is
the same as the rotation calculated by automatic perspective correction.
2020-01-18 17:13:24 -08:00
Lawrence
72dfa1b242 Add auto perspective correction to GUI
Add three buttons for correcting pitch, yaw, or both. Horizontal and/or
vertical tilt adjusters are updated with the automatically computed
values.
2020-01-18 14:32:03 -08:00
Lawrence
f83a62be5b Add back the old perspective tool
Add perspective correction method chooser to allow choice between the
original perspective tool (simple) and the new one (camera-based).
2019-12-28 17:18:59 -08:00
Lawrence
f9a8875bb5 Add more perspective correction adjusters
Add camera lens/sensor shift support with horizontal/vertical shift
adjusters.

Add shifting and rotation of corrected image. This allows
post-correction adjustments to be made more easily given the fixed image
canvas size.

Add scaling of final result. This also helps reduce frustrations with
the fixed image canvas size.

Replace field of view with focal length and crop factor. Use of focal
length and crop factor is more common than diagonal angular field of
view. The new adjusters should be more intuitive for most photographers.
The implementation of perspective correction uses a focal length
relative to the image dimensions. The existing code calculates that
focal length with trigonometry. The new code does it by multiplying
by a ratio.

Replace vertical bias with horizontal and vertical perspective
distortion recovery. Vertical bias is not intuitive as it causes
vertical lines to converge off-center if horizontal correction is
applied. The new adjusters perform perspective distortion on the
projection of the corrected image, allowing vertical/horizontal lines to
converge towards the center lines of the image.

Refactor perspective transformation math to use dynamically computed
homogeneous coordinate matrices instead of pre-calculated formulas. This
should add some overhead, but results in more maintainable code and
possible improved performance due to the reduced number of arithmetic
and assignments needed for each pixel.

Integrate new adjusters in the GUI. This includes fine granularity for
batch processing add/set modes and history.
2019-12-27 16:40:41 -08:00
Lawrence
f4c37598ee Generalize perspective correction
Revise perspective transformation to remove hard-coded angular field of
view and horizontal perspective axis of rotation. Add vertical bias
parameter to retain ability to perform vertical perspective
transformation independent of the horizontal perspective axis of
rotation. Add field of view parameter as a tentative method for
specifying angular field of view.

The current implementation of perspective transformation applies
horizontal perspective transformation in such a way that preserves the
orientation of a horizontal line going through the center of the image.
In common use cases, horizontal lines such as the horizon do not go
through the center of the image. In such cases, the horizontal
perspective axis of rotation should not be parallel to the image's
y-axis. This commit makes the axis of rotation dependent on the vertical
parameter.

The two axes of rotation should be placed at the appropriate distance
from the image in order to prevent stretched or compressed proportions.
In the current implementation, the axes are at a fixed relative distance
from the image. This commit adds the ability to specify the distance in
the form of the diagonal angular field of view.
2019-12-18 10:22:05 -08:00
Ingo Weyrich
587652283d further reduction of include dependencies, also finalised some classes 2019-11-09 16:51:54 +01:00
Flössie
add5c790d6 #pragma once for our headers plus drive-by formatting 2019-10-31 10:20:50 +01:00
Morgan Hardwood
60b2196bce Updated gnu.org links to use HTTPS 2019-09-10 12:34:57 +02:00
Ingo Weyrich
0493e67474 nuke empty adjusterAutoToggled functions 2019-07-20 11:44:38 +02:00
heckflosse
831e18ca45 Add override keyword. Thanks @Floessie 2018-11-22 16:19:16 +01:00
Flössie
2125f42116 Turn almost all Listeners into abstract interfaces 2018-10-09 20:32:40 +02:00
Flössie
0731975ff0 Apply modernize-use-nullptr
Setup:
- `mkdir tidy; cd tidy`
- `cmake .. -DCMAKE_BUILD_TYPE=debug -DPROC_TARGET_NUMBER=1 -DCACHE_NAME_SUFFIX=4 -DBINDIR=. -DDATADIR=. -DBUILD_BUNDLE=ON -DWITH_LTO=OFF -DOPTION_OMP=OFF -DCMAKE_EXPORT_COMPILE_COMMANDS=ON`
- `cd ..`
- `find -name '*.cc' -exec clang-tidy-3.8 -header-filter=.* -p=tidy -fix-errors -checks=modernize-use-nullptr {} \;`
2016-10-12 17:48:40 +02:00
DrSlony
0e0cfb9b25 Formatted all .cc and .h code in rtengine, rtexif and rtgui using astyle 2015-08-11 11:55:03 +02:00
torger
d5ca351c20 Issue 2134: removed obsolete raw highlight preservation setting from GUI (still left in procparams for backwards compatilibility) 2015-07-10 12:00:36 +02:00