Bug 267613

Summary: Lensfun doesn't work correctly with compact cameras
Product: [Applications] digikam Reporter: Sergey Salnikov <salsergey>
Component: Plugin-Editor-LensCorrectionAssignee: Digikam Developers <digikam-bugs-null>
Status: RESOLVED FIXED    
Severity: wishlist CC: caulier.gilles, sven.burmeister
Priority: NOR    
Version: 2.0.0   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In: 3.0.0
Bug Depends on: 312764    
Bug Blocks:    
Attachments: Photo taken with Canon PowerShot S5 IS

Description Sergey Salnikov 2011-03-04 10:20:30 UTC
Version:           2.0.0 (using KDE 4.6.0) 
OS:                Linux

Previously lensfun crashed when I was trying to apply any lens corrections in any application (digikam, ufraw, darktable). I have compiled and installed lensfun-0.2.5.1. Now automatic lens corrections work well with DSLR cameras, but not with compact cameras. In darktable it works well with compacts too.

I see two problems with automatic lens correction realization in digikam. At first, if you disable automatic camera identification, you can't select standard lens for compact camera because there are only lenses for DSLR. This is a problem for Canon DSLR too, because the list doesn't contain EF-S lenses. However, if your camera is automatically identified, EF-S lenses are in the list.
In darktable when I select a compact camera the lens list contains only few lenses and one of them is "Standard".

The next problem is possibly connected only to Canon PowerShot S5 IS. This camera is automatically identified and it's lens is set to "Standard". However, the correction doesn't work correctly. The result is a small rounded image in the center (something like fisheye). In darktable lens correction for the same image works well.

I think the above problems are connected to digikam because in darktable and ufraw lens corrections work well.

If you have any questions I'm ready to answer.

Reproducible: Always

Steps to Reproduce:
This problem is reproduced every time in digikam 1.8.0 - 2.0.0beta3
Comment 1 caulier.gilles 2011-03-04 11:32:06 UTC
Can you provide some image to test here.

Gilles Caulier
Comment 2 caulier.gilles 2011-03-04 11:33:21 UTC
Do you use a shared version of lensfun library or do you use version of Lensfun embeded  in digiKam core ? Go to Hellp/Components Info for details.

Gilles Caulier
Comment 3 Sergey Salnikov 2011-03-04 11:55:26 UTC
Created attachment 57669 [details]
Photo taken with Canon PowerShot S5 IS
Comment 4 Sergey Salnikov 2011-03-04 12:02:07 UTC
The photo attached becomes rounded if I use automatic lens identification. If I turn off automatic identification, I can't select "Standard" lens.
I have similar behavior with Canon EOS 60D and EF-S lenses. In this case automatic correction works well. However, if I select camera manually, there are no EF-S lenses in the list.
Comment 5 Sergey Salnikov 2011-03-04 12:04:25 UTC
Digikam should use a shared version of lensfun. Help/Components gives no information about lensfun.
Comment 6 caulier.gilles 2011-03-04 16:25:14 UTC
Well, embeded version is current implementation from svn of lensfun. Please recompile digiKam without to use an external Lensfun, which is really outdated now, and include several and important fixes.

Note : Ask to Lensfun team to release a new version of the library soon...

Gilles Caulier
Comment 7 Sergey Salnikov 2011-03-04 17:00:50 UTC
I can try to recompile digikam. However, it seems to me that the problem isn't connected to lensfun. I have downloaded lensfun from svn about a month ago, so it shouldn't be outdated. Also I have said that in darktable (which uses the same lensfun) lens corrections work well with all images.
Comment 8 S. Burmeister 2011-03-05 08:57:04 UTC
This bug is long known and a dup of bug 253941 using the internal lensfun version does not make a difference.
Comment 9 caulier.gilles 2013-01-07 10:23:42 UTC
Git commit 8b3eb6f0b498ae11729e0880e7ac0673b2dd2bd8 by Gilles Caulier.
Committed on 07/01/2013 at 11:16.
Pushed by cgilles into branch 'master'.

Apply patch #76254 from Roman I Khimov about lensfun interface which don't mangle cropFactor if it's set.
This behaviour was introduced by polish commit bebef401e147a00f859cb81774f8498a0623eee5.
With this branch present we always get cropFactor of
-1.0 in LensFunFilter::filterImage() and given that lensfun library just uses
crop factor of 1 which leads to obviously wrong calculations for cropped
cameras.
Related: bug 312764, bug 253941, bug 266204, bug 281783, bug 284708
FIXED-IN: 3.0.0
CCMAIL: rik@osrc.info

M  +0    -4    libs/dimg/filters/lens/lensfuncameraselector.cpp

http://commits.kde.org/digikam/8b3eb6f0b498ae11729e0880e7ac0673b2dd2bd8
Comment 10 caulier.gilles 2013-01-07 10:37:38 UTC
Git commit 613d004121682d122e9ea7fd9041a7bbc49acb89 by Gilles Caulier.
Committed on 07/01/2013 at 11:34.
Pushed by cgilles into branch 'master'.

Apply patch #76256 from Roman I Khimov to use crop factor from camera, not from lens data.
Lens crop factor in DB only tells us which crop factor was used for lens
calibration data, but it has nothing to do with shots made on random user's
camera. So the default behaviour should be to use camera's crop factor and only
fallback to lens data if there in no data present for camera. As "this should
not happen" it's appropriate to spit out some debug message in this case.

Ref: http://lensfun.berlios.de/manual/el_lens.html
Ref: http://lensfun.berlios.de/manual/el_camera.html
Related: bug 312766, bug 312764, bug 253941, bug 266204, bug 281783, bug 284708
FIXED-IN: 3.0.0
CCMAIL: roman@khimov.ru

M  +2    -1    libs/dimg/filters/lens/lensfuncameraselector.cpp
M  +1    -1    libs/dimg/filters/lens/lensfuniface.cpp

http://commits.kde.org/digikam/613d004121682d122e9ea7fd9041a7bbc49acb89
Comment 11 caulier.gilles 2013-01-07 10:41:44 UTC
Git commit 70cf9beaac9996c219f988d8ae74d75dc253c0ad by Gilles Caulier.
Committed on 07/01/2013 at 11:39.
Pushed by cgilles into branch 'master'.

Apply patch #76255 from Roman I Khimov to don't pass crop factor as scale factor to lensfun.

Sixth parameter to Initialize() is actually a scale factor which has nothing
in common with crop factor. I think it's safe to assume that we want no
scaling from lensfun and thus use the value of one.

Ref: http://lensfun.berlios.de/manual/structlfModifier.html
Related: bug 312765, bug 312764, bug 253941, bug 266204, bug 281783, bug 284708
FIXED-IN: 3.0.0
CCMAIL: roman@khimov.ru

M  +1    -1    libs/dimg/filters/lens/lensfunfilter.cpp

http://commits.kde.org/digikam/70cf9beaac9996c219f988d8ae74d75dc253c0ad