Merge pull request #3916 from Beep6581/lcp-distortion-alt-match
Lcp distortion alt match
This commit is contained in:
@@ -698,7 +698,9 @@ void Crop::update (int todo)
|
||||
if (needstransform)
|
||||
parent->ipf.transform (baseCrop, transCrop, cropx / skip, cropy / skip, trafx / skip, trafy / skip, skips(parent->fw, skip), skips(parent->fh, skip), parent->getFullWidth(), parent->getFullHeight(),
|
||||
parent->imgsrc->getMetaData()->getFocalLen(), parent->imgsrc->getMetaData()->getFocalLen35mm(),
|
||||
parent->imgsrc->getMetaData()->getFocusDist(), parent->imgsrc->getRotateDegree(), false);
|
||||
parent->imgsrc->getMetaData()->getFocusDist(),
|
||||
parent->imgsrc->getMetaData()->getFNumber(),
|
||||
parent->imgsrc->getRotateDegree(), false);
|
||||
else
|
||||
baseCrop->copyData(transCrop);
|
||||
|
||||
|
@@ -398,7 +398,7 @@ void ImProcCoordinator::updatePreviewImage (int todo, Crop* cropCall)
|
||||
oprevi = new Imagefloat (pW, pH);
|
||||
if (needstransform)
|
||||
ipf.transform (orig_prev, oprevi, 0, 0, 0, 0, pW, pH, fw, fh, imgsrc->getMetaData()->getFocalLen(),
|
||||
imgsrc->getMetaData()->getFocalLen35mm(), imgsrc->getMetaData()->getFocusDist(), imgsrc->getRotateDegree(), false);
|
||||
imgsrc->getMetaData()->getFocalLen35mm(), imgsrc->getMetaData()->getFocusDist(), imgsrc->getMetaData()->getFNumber(), imgsrc->getRotateDegree(), false);
|
||||
else
|
||||
orig_prev->copyData(oprevi);
|
||||
}
|
||||
@@ -1212,7 +1212,7 @@ void ImProcCoordinator::saveInputICCReference (const Glib::ustring& fname, bool
|
||||
if (ipf.needsTransform()) {
|
||||
Imagefloat* trImg = new Imagefloat (fW, fH);
|
||||
ipf.transform (im, trImg, 0, 0, 0, 0, fW, fH, fW, fH, imgsrc->getMetaData()->getFocalLen(), imgsrc->getMetaData()->getFocalLen35mm(),
|
||||
imgsrc->getMetaData()->getFocusDist(), imgsrc->getRotateDegree(), true);
|
||||
imgsrc->getMetaData()->getFocusDist(), imgsrc->getMetaData()->getFNumber(), imgsrc->getRotateDegree(), true);
|
||||
delete im;
|
||||
im = trImg;
|
||||
}
|
||||
|
@@ -236,7 +236,7 @@ public:
|
||||
void sharpening (LabImage* lab, float** buffer, SharpeningParams &sharpenParam);
|
||||
void sharpeningcam (CieImage* ncie, float** buffer);
|
||||
void transform (Imagefloat* original, Imagefloat* transformed, int cx, int cy, int sx, int sy, int oW, int oH, int fW, int fH,
|
||||
double focalLen, double focalLen35mm, float focusDist, int rawRotationDeg, bool fullImage);
|
||||
double focalLen, double focalLen35mm, float focusDist, double fNumber, int rawRotationDeg, bool fullImage);
|
||||
float resizeScale (const ProcParams* params, int fw, int fh, int &imw, int &imh);
|
||||
void lab2monitorRgb (LabImage* lab, Image8* image);
|
||||
void resize (Image16* src, Image16* dst, float dScale);
|
||||
|
@@ -307,7 +307,7 @@ bool ImProcFunctions::transCoord (int W, int H, int x, int y, int w, int h, int&
|
||||
}
|
||||
|
||||
void ImProcFunctions::transform (Imagefloat* original, Imagefloat* transformed, int cx, int cy, int sx, int sy, int oW, int oH, int fW, int fH,
|
||||
double focalLen, double focalLen35mm, float focusDist, int rawRotationDeg, bool fullImage)
|
||||
double focalLen, double focalLen35mm, float focusDist, double fNumber, int rawRotationDeg, bool fullImage)
|
||||
{
|
||||
|
||||
LCPMapper *pLCPMap = nullptr;
|
||||
@@ -317,7 +317,7 @@ void ImProcFunctions::transform (Imagefloat* original, Imagefloat* transformed,
|
||||
|
||||
if (pLCPProf) {
|
||||
pLCPMap = new LCPMapper (pLCPProf, focalLen, focalLen35mm,
|
||||
focusDist, 0, false,
|
||||
focusDist, fNumber, false,
|
||||
params->lensProf.useDist,
|
||||
oW, oH, params->coarse, rawRotationDeg);
|
||||
}
|
||||
|
@@ -410,9 +410,9 @@ LCPProfile::LCPProfile(const Glib::ustring &fname)
|
||||
}
|
||||
// Two phase filter: first filter out the very rough ones, that distord the average a lot
|
||||
// force it, even if there are few frames (community profiles)
|
||||
filterBadFrames(2.0, 0);
|
||||
// filterBadFrames(2.0, 0);
|
||||
// from the non-distorded, filter again on new average basis, but only if there are enough frames left
|
||||
filterBadFrames(1.5, 100);
|
||||
// filterBadFrames(1.5, 100);
|
||||
}
|
||||
|
||||
|
||||
@@ -538,55 +538,66 @@ void LCPProfile::calcParams(int mode, float focalLength, float focusDist, float
|
||||
float focDist = aPersModel[pm]->focDist;
|
||||
float focDistLog = log(focDist) + euler;
|
||||
double meanErr;
|
||||
|
||||
if (aPersModel[pm]->hasModeData(mode)) {
|
||||
if (mode == 0) {
|
||||
double lowMeanErr, highMeanErr;
|
||||
switch (mode) {
|
||||
case 0:
|
||||
meanErr = aPersModel[pm]->vignette.mean_error;
|
||||
lowMeanErr = pLow->vignette.mean_error;
|
||||
highMeanErr = pHigh->vignette.mean_error;
|
||||
break;
|
||||
case 1:
|
||||
meanErr = aPersModel[pm]->base.mean_error;
|
||||
lowMeanErr = pLow->base.mean_error;
|
||||
highMeanErr = pHigh->base.mean_error;
|
||||
break;
|
||||
default: //case 2:
|
||||
meanErr = aPersModel[pm]->chromG.mean_error;
|
||||
lowMeanErr = pLow->chromG.mean_error;
|
||||
highMeanErr = pHigh->chromG.mean_error;
|
||||
break;
|
||||
}
|
||||
|
||||
// by aperture (vignette), and max out focus distance
|
||||
// tests showed doing this by log(aperture) is not as advisable
|
||||
if (aperture > 0 && mode != 2) {
|
||||
if (aPersModel[pm]->focLen == bestFocLenLow && (
|
||||
(aper == aperture && pLow->vignette.mean_error > meanErr)
|
||||
|| (aper >= aperture && aper < pLow->aperture && pLow->aperture > aperture)
|
||||
(aper == aperture && lowMeanErr > meanErr)
|
||||
|| (aper >= aperture && aper < pLow->aperture && pLow->aperture > aperture)
|
||||
|| (aper <= aperture && (pLow->aperture > aperture || fabs(aperture - aper) < fabs(aperture - pLow->aperture))))) {
|
||||
pLow = aPersModel[pm];
|
||||
}
|
||||
|
||||
if (aPersModel[pm]->focLen == bestFocLenHigh && (
|
||||
(aper == aperture && pHigh->vignette.mean_error > meanErr)
|
||||
|| (aper <= aperture && aper > pHigh->aperture && pHigh->aperture < aperture)
|
||||
|| (aper >= aperture && (pHigh->aperture < aperture || fabs(aperture - aper) < fabs(aperture - pHigh->aperture))))) {
|
||||
(aper == aperture && highMeanErr > meanErr)
|
||||
|| (aper <= aperture && aper > pHigh->aperture && pHigh->aperture < aperture)
|
||||
|| (aper >= aperture && (pHigh->aperture < aperture || fabs(aperture - aper) < fabs(aperture - pHigh->aperture))))) {
|
||||
pHigh = aPersModel[pm];
|
||||
}
|
||||
} else if (focusDist > 0 && mode != 0) {
|
||||
// by focus distance
|
||||
if (aPersModel[pm]->focLen == bestFocLenLow && (
|
||||
(focDist == focusDist && lowMeanErr > meanErr)
|
||||
|| (focDist >= focusDist && focDist < pLow->focDist && pLow->focDist > focusDist)
|
||||
|| (focDist <= focusDist && (pLow->focDist > focusDist || fabs(focusDistLog - focDistLog) < fabs(focusDistLog - (log(pLow->focDist) + euler)))))) {
|
||||
pLow = aPersModel[pm];
|
||||
}
|
||||
|
||||
if (aPersModel[pm]->focLen == bestFocLenHigh && (
|
||||
(focDist == focusDist && highMeanErr > meanErr)
|
||||
|| (focDist <= focusDist && focDist > pHigh->focDist && pHigh->focDist < focusDist)
|
||||
|| (focDist >= focusDist && (pHigh->focDist < focusDist || fabs(focusDistLog - focDistLog) < fabs(focusDistLog - (log(pHigh->focDist) + euler)))))) {
|
||||
pHigh = aPersModel[pm];
|
||||
}
|
||||
} else {
|
||||
meanErr = (mode == 1 ? aPersModel[pm]->base.mean_error : aPersModel[pm]->chromG.mean_error);
|
||||
// no focus distance available, just error
|
||||
if (aPersModel[pm]->focLen == bestFocLenLow && lowMeanErr > meanErr) {
|
||||
pLow = aPersModel[pm];
|
||||
}
|
||||
|
||||
if (focusDist > 0) {
|
||||
// by focus distance
|
||||
if (aPersModel[pm]->focLen == bestFocLenLow && (
|
||||
(focDist == focusDist && (mode == 1 ? pLow->base.mean_error : pLow->chromG.mean_error) > meanErr)
|
||||
|| (focDist >= focusDist && focDist < pLow->focDist && pLow->focDist > focusDist)
|
||||
|| (focDist <= focusDist && (pLow->focDist > focusDist || fabs(focusDistLog - focDistLog) < fabs(focusDistLog - (log(pLow->focDist) + euler)))))) {
|
||||
pLow = aPersModel[pm];
|
||||
}
|
||||
|
||||
if (aPersModel[pm]->focLen == bestFocLenHigh && (
|
||||
(focDist == focusDist && (mode == 1 ? pHigh->base.mean_error : pHigh->chromG.mean_error) > meanErr)
|
||||
|| (focDist <= focusDist && focDist > pHigh->focDist && pHigh->focDist < focusDist)
|
||||
|| (focDist >= focusDist && (pHigh->focDist < focusDist || fabs(focusDistLog - focDistLog) < fabs(focusDistLog - (log(pHigh->focDist) + euler)))))) {
|
||||
pHigh = aPersModel[pm];
|
||||
}
|
||||
} else {
|
||||
// no focus distance available, just error
|
||||
if (aPersModel[pm]->focLen == bestFocLenLow && (mode == 1 ? pLow->base.mean_error : pLow->chromG.mean_error) > meanErr) {
|
||||
pLow = aPersModel[pm];
|
||||
}
|
||||
|
||||
if (aPersModel[pm]->focLen == bestFocLenHigh && (mode == 1 ? pHigh->base.mean_error : pHigh->chromG.mean_error) > meanErr) {
|
||||
pHigh = aPersModel[pm];
|
||||
}
|
||||
if (aPersModel[pm]->focLen == bestFocLenHigh && highMeanErr > meanErr) {
|
||||
pHigh = aPersModel[pm];
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -1065,7 +1065,7 @@ IImage8* Thumbnail::processImage (const procparams::ProcParams& params, int rhei
|
||||
int origFH;
|
||||
double tscale = 0.0;
|
||||
getDimensions(origFW, origFH, tscale);
|
||||
ipf.transform (baseImg, trImg, 0, 0, 0, 0, fw, fh, origFW * tscale + 0.5, origFH * tscale + 0.5, focalLen, focalLen35mm, focusDist, 0, true); // Raw rotate degree not detectable here
|
||||
ipf.transform (baseImg, trImg, 0, 0, 0, 0, fw, fh, origFW * tscale + 0.5, origFH * tscale + 0.5, focalLen, focalLen35mm, focusDist, fnumber, 0, true); // Raw rotate degree not detectable here
|
||||
delete baseImg;
|
||||
baseImg = trImg;
|
||||
}
|
||||
|
@@ -810,7 +810,9 @@ private:
|
||||
if (ipf.needsTransform()) {
|
||||
Imagefloat* trImg = new Imagefloat (fw, fh);
|
||||
ipf.transform (baseImg, trImg, 0, 0, 0, 0, fw, fh, fw, fh, imgsrc->getMetaData()->getFocalLen(), imgsrc->getMetaData()->getFocalLen35mm(),
|
||||
imgsrc->getMetaData()->getFocusDist(), imgsrc->getRotateDegree(), true);
|
||||
imgsrc->getMetaData()->getFocusDist(),
|
||||
imgsrc->getMetaData()->getFNumber(),
|
||||
imgsrc->getRotateDegree(), true);
|
||||
delete baseImg;
|
||||
baseImg = trImg;
|
||||
}
|
||||
|
Reference in New Issue
Block a user