From 5a7f889380f9d3a8f16df796e4a95ee54a44882f Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 31 Dec 2018 16:15:50 +0100 Subject: [PATCH 01/23] Better xtrans fast algorithm, #5107 --- rtengine/xtrans_demosaic.cc | 63 +++++++++++++++++++------------------ 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/rtengine/xtrans_demosaic.cc b/rtengine/xtrans_demosaic.cc index ed253749b..26cd9071b 100644 --- a/rtengine/xtrans_demosaic.cc +++ b/rtengine/xtrans_demosaic.cc @@ -960,59 +960,62 @@ void RawImageSource::xtrans_interpolate (const int passes, const bool useCieLab) #undef CLIP void RawImageSource::fast_xtrans_interpolate (const array2D &rawData, array2D &red, array2D &green, array2D &blue) { -// if (settings->verbose) { -// printf("fast X-Trans interpolation...\n"); -// } - double progress = 0.0; - const bool plistenerActive = plistener; - - if (plistenerActive) { - plistener->setProgressStr (Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "fast Xtrans")); - plistener->setProgress (progress); + if (plistener) { + plistener->setProgressStr(Glib::ustring::compose(M("TP_RAW_DMETHOD_PROGRESSBAR"), "fast Xtrans")); + plistener->setProgress(0.0); } - const int height = H, width = W; - - xtransborder_interpolate (1, red, green, blue); + xtransborder_interpolate(1, red, green, blue); int xtrans[6][6]; ri->getXtransMatrix(xtrans); - #pragma omp parallel for + const float weight[3][3] = { + {0.25f, 0.5f, 0.25f}, + {0.5f, 0.f, 0.5f}, + {0.25f, 0.5f, 0.25f} + }; +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic, 16) +#endif + for (int row = 1; row < H - 1; ++row) { + for (int col = 1; col < W - 1; ++col) { + float sum[3] = {}; - for(int row = 1; row < height - 1; row++) { - for(int col = 1; col < width - 1; col++) { - float sum[3] = {0.f}; - - for(int v = -1; v <= 1; v++) { - for(int h = -1; h <= 1; h++) { - sum[fcol(row + v, col + h)] += rawData[row + v][(col + h)]; + for (int v = -1; v <= 1; v++) { + for (int h = -1; h <= 1; h++) { + sum[fcol(row + v, col + h)] += rawData[row + v][(col + h)] * weight[v + 1][h + 1]; } } switch(fcol(row, col)) { - case 0: + case 0: // red pixel red[row][col] = rawData[row][col]; - green[row][col] = sum[1] * 0.2f; - blue[row][col] = sum[2] * 0.33333333f; + green[row][col] = sum[1] * 0.5f; + blue[row][col] = sum[2]; break; - case 1: - red[row][col] = sum[0] * 0.5f; + case 1: // green pixel green[row][col] = rawData[row][col]; - blue[row][col] = sum[2] * 0.5f; + if (fcol(row, col - 1) == fcol(row, col + 1)) { // Solitary green pixel always has exactly two direct red and blue neighbors in 3x3 grid + red[row][col] = sum[0]; + blue[row][col] = sum[2]; + } else { // Non solitary green pixel always has one direct and one diagonal red and blue neighbor in 3x3 grid + red[row][col] = sum[0] * 1.3333333f; + blue[row][col] = sum[2] * 1.3333333f; + } break; - case 2: - red[row][col] = sum[0] * 0.33333333f; - green[row][col] = sum[1] * 0.2f; + case 2: // blue pixel + red[row][col] = sum[0]; + green[row][col] = sum[1] * 0.5f; blue[row][col] = rawData[row][col]; break; } } } - if (plistenerActive) { + if (plistener) { plistener->setProgress (1.0); } } From 8e3e4afcaf9f1dd4a9ace5deeaaef90d8f1efbb6 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Mon, 31 Dec 2018 16:40:31 +0100 Subject: [PATCH 02/23] Select+focus thumbnail in Filmstrip, closes #5125 When passing a photo as an argument to the RawTherapee executable, the user wants this auto-loaded photo's thumbnail to be selected and visible in the Filmstrip. --- rtgui/editorpanel.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rtgui/editorpanel.cc b/rtgui/editorpanel.cc index f44e682f2..fc19f7f27 100644 --- a/rtgui/editorpanel.cc +++ b/rtgui/editorpanel.cc @@ -1083,6 +1083,10 @@ void EditorPanel::open (Thumbnail* tmb, rtengine::InitialImage* isrc) history->resetSnapShotNumber(); navigator->setInvalid(ipc->getFullWidth(),ipc->getFullHeight()); + + // When passing a photo as an argument to the RawTherapee executable, the user wants + // this auto-loaded photo's thumbnail to be selected and visible in the Filmstrip. + EditorPanel::syncFileBrowser(); } void EditorPanel::close () From d43ccc5e816f847ec153db612a94e061a24f05fe Mon Sep 17 00:00:00 2001 From: heckflosse Date: Mon, 31 Dec 2018 18:47:08 +0100 Subject: [PATCH 03/23] Add vceilf(x) --- rtengine/sleefsseavx.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/rtengine/sleefsseavx.c b/rtengine/sleefsseavx.c index 83d937bd1..3000c1c10 100644 --- a/rtengine/sleefsseavx.c +++ b/rtengine/sleefsseavx.c @@ -1427,5 +1427,21 @@ static INLINE void vconvertrgbrgbrgbrgb2rrrrggggbbbb (const float * src, vfloat bv = _mm_setr_ps(src[2],src[5],src[8],src[11]); } +#if defined( __SSE4_1__ ) && defined( __x86_64__ ) +static INLINE vfloat vceilf(vfloat x) { + return _mm_round_ps(x, _MM_FROUND_TO_POS_INF |_MM_FROUND_NO_EXC); +} + +#else + +static INLINE vfloat vceilf(vfloat x) { + __m128i zerov = _mm_setzero_si128(); + zerov = _mm_cmpeq_epi32(zerov, zerov); + const vfloat onev = (vfloat)_mm_slli_epi32(_mm_srli_epi32(zerov, 25), 23); //create vector 1.0f + const vfloat xi = _mm_cvtepi32_ps(_mm_cvttps_epi32(x)); + return xi + _mm_and_ps(_mm_cmplt_ps(xi, x), onev); +} +#endif + #endif // __SSE2__ #endif // SLEEFSSEAVX From de6ee457e6eaee984a1185c111d81cdebb62a608 Mon Sep 17 00:00:00 2001 From: heckflosse Date: Fri, 4 Jan 2019 14:02:24 +0100 Subject: [PATCH 04/23] Revert "MultiLangMgr::getOSUserLanguage (): get rid of special windows code" This reverts commit 562ed3b22a964b6561fcb2bc18dd5a0322a580ce. --- rtgui/multilangmgr.cc | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/rtgui/multilangmgr.cc b/rtgui/multilangmgr.cc index a439c0602..8d2985436 100644 --- a/rtgui/multilangmgr.cc +++ b/rtgui/multilangmgr.cc @@ -209,6 +209,27 @@ Glib::ustring MultiLangMgr::getOSUserLanguage () { Glib::ustring langName ("default"); +#if defined (WIN32) + + const LCID localeID = GetUserDefaultLCID (); + TCHAR localeName[18]; + + const int langLen = GetLocaleInfo (localeID, LOCALE_SISO639LANGNAME, localeName, 9); + if (langLen <= 0) { + return langName; + } + + localeName[langLen - 1] = '-'; + + const int countryLen = GetLocaleInfo (localeID, LOCALE_SISO3166CTRYNAME, &localeName[langLen], 9); + if (countryLen <= 0) { + return langName; + } + + langName = localeToLang (localeName); + +#elif defined (__linux__) || defined (__APPLE__) + // Query the current locale and force decimal point to dot. const char *locale = getenv("LANG"); if (locale || (locale = setlocale (LC_CTYPE, ""))) { @@ -217,5 +238,7 @@ Glib::ustring MultiLangMgr::getOSUserLanguage () setlocale (LC_NUMERIC, "C"); +#endif + return langName; } From 769d2e6abc4caa78dee593cff3797672e1964e52 Mon Sep 17 00:00:00 2001 From: Gregory Reshetniak Date: Wed, 9 Jan 2019 22:46:30 +0100 Subject: [PATCH 05/23] WIP: Ukrainian translation (#5127) --- rtdata/languages/Ukrainian | 2262 ++++++++++++++++++++++++++++++++++++ 1 file changed, 2262 insertions(+) create mode 100644 rtdata/languages/Ukrainian diff --git a/rtdata/languages/Ukrainian b/rtdata/languages/Ukrainian new file mode 100644 index 000000000..b84516877 --- /dev/null +++ b/rtdata/languages/Ukrainian @@ -0,0 +1,2262 @@ +#01 2019-01-04 Gregory Reshetniak + +ABOUT_TAB_BUILD;Версія +ABOUT_TAB_CREDITS;Розробники +ABOUT_TAB_LICENSE;Ліцензія +ABOUT_TAB_RELEASENOTES;Примітки до релізу +ABOUT_TAB_SPLASH;Екран привітання +BATCHQUEUE_AUTOSTART;Автостарт +BATCHQUEUE_AUTOSTARTHINT;Автоматично почати обробку якщо додано завдання +BATCHQUEUE_DESTFILENAME;Шлях до каталогу і назва файлу +BATCH_PROCESSING;Пакетна обробка +CURVEEDITOR_CURVE;Крива +CURVEEDITOR_CURVES;Криві +CURVEEDITOR_CUSTOM;Власна +CURVEEDITOR_DARKS;Темні +CURVEEDITOR_HIGHLIGHTS;Найсвітліші +CURVEEDITOR_LIGHTS;Світлі +CURVEEDITOR_LINEAR;Лінійна +CURVEEDITOR_LOADDLGLABEL;Відкрити файл кривої... +CURVEEDITOR_MINMAXCPOINTS;Еквалізація +CURVEEDITOR_NURBS;NURBS +CURVEEDITOR_PARAMETRIC;Параметрична +CURVEEDITOR_SAVEDLGLABEL;Записати файл кривої... +CURVEEDITOR_SHADOWS;Найтемніші +CURVEEDITOR_TOOLTIPCOPY;Скопіювати криву до буферу +CURVEEDITOR_TOOLTIPLINEAR;Повернути криву до лінії +CURVEEDITOR_TOOLTIPLOAD;Відкрити файл кривої +CURVEEDITOR_TOOLTIPPASTE;Вставити криву з буферу +CURVEEDITOR_TOOLTIPSAVE;Записати криву до файлу +CURVEEDITOR_TYPE;Тип: +DIRBROWSER_FOLDERS;Каталоги +EDITWINDOW_TITLE;Редактор зображень +EDIT_OBJECT_TOOLTIP;Показати віджет у вікні передпоказу +EDIT_PIPETTE_TOOLTIP;Щоб додати точку на кривій потрібно тримати Ctrl натискаючи ліву клавішу миші на цьому регіоні зображення.\nЩоб пересунути точку тимайте Ctrl, натисніть лівою клавішею миші, відпустіть Ctrl і, тримаючи ліву клавішу миші пересуньте курсор на нову позицію. +EXIFFILTER_APERTURE;Діафрагма +EXIFFILTER_CAMERA;Камера +EXIFFILTER_EXPOSURECOMPENSATION;Корекція експозиції +EXIFFILTER_FILETYPE;Тип файлу +EXIFFILTER_FOCALLEN;Фокусна відстань +EXIFFILTER_ISO;ISO +EXIFFILTER_LENS;Об'єктив +EXIFFILTER_METADATAFILTER;Увімкнути фільтри метаданих +EXIFFILTER_SHUTTER;Затвор +EXIFPANEL_ADDEDIT;Додати/Змінити +EXIFPANEL_ADDEDITHINT;Додати теѓ або змінити теѓ +EXIFPANEL_ADDTAGDLG_ENTERVALUE;Впиши значення +EXIFPANEL_ADDTAGDLG_SELECTTAG;Вибрати теѓ +EXIFPANEL_ADDTAGDLG_TITLE;Додати/Змінити теѓ +EXIFPANEL_KEEP;Запам'ятати +EXIFPANEL_KEEPHINT;Записати теѓи після запису вихідного файлу +EXIFPANEL_REMOVE;Видалити +EXIFPANEL_REMOVEHINT;Усунути теѓи після запису вихідного файлу +EXIFPANEL_RESET;Відновити +EXIFPANEL_RESETALL;Відновити всі +EXIFPANEL_RESETALLHINT;Повернути значення теѓів +EXIFPANEL_RESETHINT;Повернути початкові значення теѓів +EXIFPANEL_SUBDIRECTORY;Підкаталог +EXPORT_BYPASS_ALL;Вибрати / Вибрати всі +EXPORT_BYPASS_DEFRINGE;Не усувати віньетування +EXPORT_BYPASS_DIRPYRDENOISE;Не усувати шуми +EXPORT_BYPASS_DIRPYREQUALIZER;Не додавати контраст в деталях +EXPORT_BYPASS_RAW_CA;Не усувати хроматичні аберації (raw) +EXPORT_BYPASS_RAW_CCSTEPS;Не виправляти баланс кольорів (raw) +EXPORT_BYPASS_RAW_DCB_ENHANCE;Не виправляти DCB (raw) +EXPORT_BYPASS_RAW_DCB_ITERATIONS;Не ітерувати DCB (raw) +EXPORT_BYPASS_RAW_DF;Не використовувати темний кадр (raw) +EXPORT_BYPASS_RAW_FF;Не використовувати пустий кадр (raw) +EXPORT_BYPASS_RAW_GREENTHRESH;Не вирівнювати зелені тони (raw) +EXPORT_BYPASS_RAW_LINENOISE;Не зменшувати лінійні шуми (raw) +EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;Не виправляти LMMSE [raw] +EXPORT_BYPASS_SHARPENEDGE;Не збільшувати детальність країв +EXPORT_BYPASS_SHARPENING;Не збільшувати детальність +EXPORT_BYPASS_SHARPENMICRO;Не збільшувати мікроконтраст +EXPORT_BYPASS_SH_HQ;Не коректувати світло-тінь +EXPORT_FASTEXPORTOPTIONS;Опції швидкого експорту +EXPORT_INSTRUCTIONS;Опції швидкого експорту дозволяють встановити налаштування для пришвидшеної генерації зображень. +EXPORT_MAXHEIGHT;Максимальна висота: +EXPORT_MAXWIDTH;Максимальна широта: +EXPORT_PUTTOQUEUEFAST; Додати до черги швидкого експорту +EXPORT_RAW_DMETHOD;Алгоритм демозаїзації +EXTPROGTARGET_1;raw +EXTPROGTARGET_2;виконано в черзі +FILEBROWSER_ADDDELTEMPLATE;Додати/Усунути шаблон... +FILEBROWSER_APPLYPROFILE;Застосувати профіль +FILEBROWSER_APPLYPROFILE_PARTIAL;Застосувати частковий профіль +FILEBROWSER_AUTODARKFRAME;Автоматично уживати темні кадри +FILEBROWSER_AUTOFLATFIELD;Автоматично уживати пусті кадри +FILEBROWSER_BROWSEPATHBUTTONHINT;Показати вибрану стежку +FILEBROWSER_BROWSEPATHHINT;Показати вибрану стежку\n Комбінація \nCtrl-o для підсвічення тексту стежки\nEnter / Ctrl-Enter Для переходу стежкою;\nEscДля відмови від змін\nShift-Esc Для зняття фокусу.\n\n ~ є символом домашьного каталогу користувача. \n! є символом каталогу зображень користувача. +FILEBROWSER_CACHE;Кеш +FILEBROWSER_CLEARPROFILE;Очистити профіль +FILEBROWSER_COLORLABEL_TOOLTIP;Колорові теѓи\n\nУживання:\nShift-Ctrl-0 Без кольору\nShift-Ctrl-1 Червоний\nShift-Ctrl-2 Жовтий\nShift-Ctrl-3 Зелений\nShift-Ctrl-4 Синій\nShift-Ctrl-5 Фіолетовий +FILEBROWSER_COPYPROFILE;Копіювати профіль +FILEBROWSER_CURRENT_NAME;Існуюча назва: +FILEBROWSER_DARKFRAME;Темний кадр +FILEBROWSER_DELETEDLGLABEL;Підтвердження усування файлу +FILEBROWSER_DELETEDLGMSG;Справді видалити зазначені %1 файл(и)? +FILEBROWSER_DELETEDLGMSGINCLPROC;Справді видалити зазначені %1 файл(и) разом з версією створеною в черзі? +FILEBROWSER_EMPTYTRASH;Очистити сміттєвий кошик +FILEBROWSER_EMPTYTRASHHINT;Очистити сміттєвий кошик без відновлення +FILEBROWSER_EXTPROGMENU;Відкрити за допомогою +FILEBROWSER_FLATFIELD;Пусте поле +FILEBROWSER_MOVETODARKFDIR;Перемістити до каталогу з темними кадрами +FILEBROWSER_MOVETOFLATFIELDDIR;Перемістити до каталогу з пустими кадрами +FILEBROWSER_NEW_NAME;Нова назва: +FILEBROWSER_OPENDEFAULTVIEWER;Відкрити в стандартній програмі перегляду +FILEBROWSER_PARTIALPASTEPROFILE;Частково вставити +FILEBROWSER_PASTEPROFILE;Вставити профіль +FILEBROWSER_POPUPCANCELJOB;Анулювати завдання +FILEBROWSER_POPUPCOLORLABEL;Кольоровий маркер +FILEBROWSER_POPUPCOLORLABEL0;Маркер: Без кольору +FILEBROWSER_POPUPCOLORLABEL1;Маркер: Червоний +FILEBROWSER_POPUPCOLORLABEL2;Маркер: Жовтий +FILEBROWSER_POPUPCOLORLABEL3;Маркер: Зелений +FILEBROWSER_POPUPCOLORLABEL4;Маркер: Синій +FILEBROWSER_POPUPCOLORLABEL5;Маркер: Фіолетовий +FILEBROWSER_POPUPCOPYTO;Копіювати до... +FILEBROWSER_POPUPFILEOPERATIONS;Операції з файлами +FILEBROWSER_POPUPMOVEEND;Перенести на кінець черги +FILEBROWSER_POPUPMOVEHEAD;Перенести на початок черги +FILEBROWSER_POPUPMOVETO;Перенести до... +FILEBROWSER_POPUPOPEN;Відкрити +FILEBROWSER_POPUPOPENINEDITOR;Відкрити в редакторі +FILEBROWSER_POPUPPROCESS;Додати до черги на обробку +FILEBROWSER_POPUPPROCESSFAST;Додати до черги швидкого експорту +FILEBROWSER_POPUPPROFILEOPERATIONS;Профілі обробки +FILEBROWSER_POPUPRANK;Оцінка +FILEBROWSER_POPUPRANK0;Прибрати оцінку +FILEBROWSER_POPUPRANK1;Оцінка 1 * +FILEBROWSER_POPUPRANK2;Оцінка 2 ** +FILEBROWSER_POPUPRANK3;Оцінка 3 *** +FILEBROWSER_POPUPRANK4;Оцінка 4 **** +FILEBROWSER_POPUPRANK5;Оцінка 5 ***** +FILEBROWSER_POPUPREMOVE;Знищити на диску +FILEBROWSER_POPUPREMOVEINCLPROC;Знищити на диску разом з результатами обробки +FILEBROWSER_POPUPRENAME;Змінити назву +FILEBROWSER_POPUPSELECTALL;Вибрати всі +FILEBROWSER_POPUPTRASH;Перенести до смітника +FILEBROWSER_POPUPUNRANK;Прибрати оцінку +FILEBROWSER_POPUPUNTRASH;Забрати з смітника +FILEBROWSER_QUERYBUTTONHINT;Очистити пошук +FILEBROWSER_QUERYHINT;Впиши частину назви щоб знайти файл. Відділяй слова комами, np.\n1001,1004,1199\n\nСлова що потрібно виключити з пошуку відмічай !=\nnp.\n!=1001,1004,1199\n\nКоманди:\nCtrl-f - перейти до поля "Пошук",\nEnter - шукати,\nEsc - очистити поле "Пошук",\nShift-Esc - вийти з поля "Пошук". +FILEBROWSER_QUERYLABEL; Пошук: +FILEBROWSER_RANK1_TOOLTIP;Оцінка 1 *\nКоманда: Shift-1 +FILEBROWSER_RANK2_TOOLTIP;Оцінка 2 *\nКоманда: Shift-2 +FILEBROWSER_RANK3_TOOLTIP;Оцінка 3 *\nКоманда: Shift-3 +FILEBROWSER_RANK4_TOOLTIP;Оцінка 4 *\nКоманда: Shift-4 +FILEBROWSER_RANK5_TOOLTIP;Оцінка 5 *\nКоманда: Shift-5 +FILEBROWSER_RENAMEDLGLABEL;Змінити назву файлу +FILEBROWSER_SELECTDARKFRAME;Вибрати темний кадр... +FILEBROWSER_SELECTFLATFIELD;Вибрати пустий кадр... +FILEBROWSER_SHOWCOLORLABEL1HINT;Показати фото з червоним теѓом.\nКоманда: Alt-1 +FILEBROWSER_SHOWCOLORLABEL2HINT;Показати фото з жовтим теѓом.\nКоманда: Alt-2 +FILEBROWSER_SHOWCOLORLABEL3HINT;Показати фото з зеленим теѓом.\nКоманда: Alt-3 +FILEBROWSER_SHOWCOLORLABEL4HINT;Показати фото з синім теѓом.\nКоманда: Alt-4 +FILEBROWSER_SHOWCOLORLABEL5HINT;Показати фото з фіолетовим теѓом.\nКоманда: Alt-5 +FILEBROWSER_SHOWDIRHINT;Wyłącza wyszstkie filtry.\nКоманда: d +FILEBROWSER_SHOWEDITEDHINT;Pokazuje edytowane zdjęcia.\nКоманда: 7 +FILEBROWSER_SHOWEDITEDNOTHINT;Pokazuje nieedytowane zdjęcia.\nКоманда: 6 +FILEBROWSER_SHOWEXIFINFO;Pokaż dane Exif.\n\nКоманди:\ni - Tryb wielu zakładek,\nAlt-i - Tryb jednej zakładki. +FILEBROWSER_SHOWRANK1HINT;Показати фото з оцінкою 1 зірочка.\nКоманда: 1 +FILEBROWSER_SHOWRANK2HINT;Показати фото з оцінкою 2 зірочки.\nКоманда: 2 +FILEBROWSER_SHOWRANK3HINT;Показати фото з оцінкою 3 зірочки.\nКоманда: 3 +FILEBROWSER_SHOWRANK4HINT;Показати фото з оцінкою 4 зірочки.\nКоманда: 4 +FILEBROWSER_SHOWRANK5HINT;Показати фото з оцінкою 5 зірочок.\nКоманда: 5 +FILEBROWSER_SHOWRECENTLYSAVEDHINT;Показати записані фото.\nКоманда: Alt-7 +FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Показати незаписані фото.\nКоманда: Alt-6 +FILEBROWSER_SHOWTRASHHINT;Показати вміст кошика.\nКоманда: Ctrl-t +FILEBROWSER_SHOWUNCOLORHINT;Показати фото без кольорових теѓів.\nКоманда: Alt-0 +FILEBROWSER_SHOWUNRANKHINT;Показати фото без оцінок.\nКоманда: 0 +FILEBROWSER_THUMBSIZE;Розмір мініатюрок +FILEBROWSER_UNRANK_TOOLTIP;Усунути оцінку.\nКоманда: Shift-0 +FILEBROWSER_ZOOMINHINT;Збільшити мініатюрки.\n\nКоманди:\n+ - Режим кількох закладок,\nAlt-+ - Режим однієї закладки. +FILEBROWSER_ZOOMOUTHINT;Зменшити мініатюрки.\n\nКоманди:\n- - Режим кількох закладок,\nAlt-- - Режим однієї закладки. +GENERAL_ABOUT;Про програму +GENERAL_AFTER;Після +GENERAL_AUTO;Автоматично +GENERAL_BEFORE;Перед +GENERAL_CANCEL;Відмінити +GENERAL_CLOSE;Закрити +GENERAL_DISABLE;Вимкнути +GENERAL_DISABLED;Вимкнуто +GENERAL_ENABLE;Ввімкнути +GENERAL_ENABLED;Ввімкнуто +GENERAL_FILE;Файл +GENERAL_LANDSCAPE;Горизонтальний режим +GENERAL_NA;н/д +GENERAL_NO;Ні +GENERAL_NONE;Немає +GENERAL_OK;OK +GENERAL_PORTRAIT;Вертикальний режим +GENERAL_SAVE;Зберегти +GENERAL_UNCHANGED;(Без змін) +GENERAL_WARNING;Попередження +HISTOGRAM_TOOLTIP_B;Показати/Сховати гістограму синіх тонів. +HISTOGRAM_TOOLTIP_BAR;Pokazuje/Ukrywa wskaźnik RGB.\nKliknięcie prawym przyciskiem myszy na podglądzie zdjęcia blokuje/odblokowuje. +HISTOGRAM_TOOLTIP_CHRO;Pokaż/Ukryj histogram chromatyczności. +HISTOGRAM_TOOLTIP_FULL;Змінити гістограму. +HISTOGRAM_TOOLTIP_G;Показати/Сховати гістограму зелених тонів. +HISTOGRAM_TOOLTIP_L;Показати/Сховати гістограму люмінації CIELab. +HISTOGRAM_TOOLTIP_R;Показати/Сховати гістограму червоних тонів. +HISTOGRAM_TOOLTIP_RAW;Показати/Сховати гістограму raw. +HISTORY_CHANGED;Змінено +HISTORY_CUSTOMCURVE;Власна крива +HISTORY_FROMCLIPBOARD;З буферу +HISTORY_LABEL;Історія +HISTORY_MSG_1;Фотографію завантажено +HISTORY_MSG_2;Профіль завантажено +HISTORY_MSG_3;Профіль змінено +HISTORY_MSG_4;Перегляд історії +HISTORY_MSG_5;Światłość +HISTORY_MSG_6;Контраст +HISTORY_MSG_7;Чорний +HISTORY_MSG_8;Компенсація експозиції +HISTORY_MSG_9;Компенсація світла +HISTORY_MSG_10;Компресія тіней +HISTORY_MSG_11;Тональна крива +HISTORY_MSG_12;Автоматична експозиція +HISTORY_MSG_13;Зменшення експозиції +HISTORY_MSG_14;L*a*b* - Світло +HISTORY_MSG_15;L*a*b* - Контраст +HISTORY_MSG_16;- +HISTORY_MSG_17;- +HISTORY_MSG_18;- +HISTORY_MSG_19;Крива L* +HISTORY_MSG_20;Wyostrzanie +HISTORY_MSG_21;USM - Promień +HISTORY_MSG_22;USM - Siła +HISTORY_MSG_23;USM - Próg wyostrzania +HISTORY_MSG_24;USM - Wyostrz tylko krawędzie +HISTORY_MSG_25;USM - Promień detekcji krawędzi +HISTORY_MSG_26;USM - Tolerancja krawędzi +HISTORY_MSG_27;USM - Kontrola poświaty +HISTORY_MSG_28;USM - Stopień kontroli poświaty +HISTORY_MSG_29;Metoda wyostrzania +HISTORY_MSG_30;RLD - Promień +HISTORY_MSG_31;RLD - Siła +HISTORY_MSG_32;RLD - Tłumienie +HISTORY_MSG_33;RLD - Powtórzenia +HISTORY_MSG_34;LCP - Korekcja dystorsji +HISTORY_MSG_35;LCP - Korekcja winietowania +HISTORY_MSG_36;LCP - Korekcja aberacji +HISTORY_MSG_37;Automatyczna ekspozycja +HISTORY_MSG_38;Metoda balansu bieli +HISTORY_MSG_39;BB - Температура +HISTORY_MSG_40;BB - Відтінок +HISTORY_MSG_41;Tryb krzywej 1 +HISTORY_MSG_42;Крива 1 +HISTORY_MSG_43;Tryb krzywej 2 +HISTORY_MSG_44;Світлове відшумлення - Promień +HISTORY_MSG_45;Світлове відшумлення - Tolerancja krawędzi +HISTORY_MSG_46;Відшумлення кольору +HISTORY_MSG_47;Змішування світла ICC з матрицею +HISTORY_MSG_48;Тональна крива DCP +HISTORY_MSG_49;Ілюмінант DCP +HISTORY_MSG_50;Тіні/Світло +HISTORY_MSG_51;C/P - Світло +HISTORY_MSG_52;C/P - Тіні +HISTORY_MSG_53;C/P - Тональний діапазон світла +HISTORY_MSG_54;C/P - Тональний діапазон тіней +HISTORY_MSG_55;C/P - Локальний контраст +HISTORY_MSG_56;C/P - Радіус +HISTORY_MSG_57;Обертання +HISTORY_MSG_58;Віддзеркалення по горизонталі +HISTORY_MSG_59;Віддзеркалення по вертикалі +HISTORY_MSG_60;Обертання +HISTORY_MSG_61;Авто-заповнення +HISTORY_MSG_62;Корекція дисторсії об'єктиву +HISTORY_MSG_63;Вибраний снепшот +HISTORY_MSG_64;Кадрування +HISTORY_MSG_65;Корекція хроматичної аберації +HISTORY_MSG_66;Реконструкція засвітлень +HISTORY_MSG_67;Реконструкція засвітлень - Величина +HISTORY_MSG_68;Реконструкція засвітлень - Спосіб +HISTORY_MSG_69;Робочий колірний простір +HISTORY_MSG_70;Вихідний колірний простір +HISTORY_MSG_71;Вхідний колірний простір +HISTORY_MSG_72;KW - Величина +HISTORY_MSG_73;Змішувач каналів +HISTORY_MSG_74;Зміна розміру - Пропорція +HISTORY_MSG_75;Зміна розміру - Спосіб +HISTORY_MSG_76;Метадані Exif +HISTORY_MSG_77;Метадані IPTC +HISTORY_MSG_78;- +HISTORY_MSG_79;Зміна розміру - Широта +HISTORY_MSG_80;Зміна розміру - Висота +HISTORY_MSG_81;Зміна розміру +HISTORY_MSG_82;Профіль змінено +HISTORY_MSG_83;S/H - Чітка маска +HISTORY_MSG_84;Корекція перспективи +HISTORY_MSG_85;LCP +HISTORY_MSG_86;Криві RGB - режим люмінації +HISTORY_MSG_87;Усування імпульсних шумів +HISTORY_MSG_88;Поріг усування імпульсних шумів +HISTORY_MSG_89;Усування шумів +HISTORY_MSG_90;Усування шумів - Світність +HISTORY_MSG_91;Усування шумів - Хромінація +HISTORY_MSG_92;Усування шумів - Гамма +HISTORY_MSG_93;CbDL - Значення +HISTORY_MSG_94;Контраст за рівнем деталей +HISTORY_MSG_96;Крива a* +HISTORY_MSG_97;Крива b* +HISTORY_MSG_98;Алгоритм демозаїзації +HISTORY_MSG_99;Фільтр "гарячих" пікселів +HISTORY_MSG_100;Насиченість RGB +HISTORY_MSG_101;HSV - Відтінок +HISTORY_MSG_102;HSV - Насиченість +HISTORY_MSG_103;HSV - Значення +HISTORY_MSG_104;Еквалайзер HSV +HISTORY_MSG_105;Усування віньєтування +HISTORY_MSG_106;Усування віньєтування - Радіус +HISTORY_MSG_107;Усування віньєтування - Поріг +HISTORY_MSG_108;Експозиція - поріг HLC +HISTORY_MSG_109;Зміна розміру - Розмір +HISTORY_MSG_110;Зміна розміру +HISTORY_MSG_111;L*a*b* - Unikaj przycinania koloru +HISTORY_MSG_112;- +HISTORY_MSG_113;L*a*b* - Ograniczenie nasyczenia +HISTORY_MSG_114;DCB - Кількість ітерацій +HISTORY_MSG_115;DCB - Запобігання зміні кольору +HISTORY_MSG_116;DCB - Покращення +HISTORY_MSG_117;Корекція аберації - Червоні тони +HISTORY_MSG_118;Корекція аберації - Сині тони +HISTORY_MSG_119;Зменшення лінійних шумів +HISTORY_MSG_120;Вирівняння зелених тонів +HISTORY_MSG_121;Авто-корекція хроматичної аберації +HISTORY_MSG_122;Czarna klatka - Auto-wybór +HISTORY_MSG_123;Czarna klatka - Wybór +HISTORY_MSG_124;Корекція білого +HISTORY_MSG_125;Збереження світлих тонів +HISTORY_MSG_126;Пустий кадр - Файл +HISTORY_MSG_127;Пустий кадр - Авто-вибір +HISTORY_MSG_128;Пустий кадр - Інтенсивність розмивання +HISTORY_MSG_129;Пустий кадр - Тип розмивання +HISTORY_MSG_130;Авто-корекція дисторсії +HISTORY_MSG_131;RS - Luma +HISTORY_MSG_132;RS - Chroma +HISTORY_MSG_133;Вихідна гамма +HISTORY_MSG_134;Вільна гамма +HISTORY_MSG_135;Вільна гамма +HISTORY_MSG_136;Кутовий коефіцієнт гами +HISTORY_MSG_137;Рівень чорного - Зелений 1 +HISTORY_MSG_138;Рівень чорного - Червоний +HISTORY_MSG_139;Рівень чорного - Синій +HISTORY_MSG_140;Рівень чорного - Зелений 2 +HISTORY_MSG_141;Рівень чорного - З'єднати зелені +HISTORY_MSG_142;ДК - Кількість ітерацій +HISTORY_MSG_143;ДК - Сила +HISTORY_MSG_144;Мікроконтраст - Сила +HISTORY_MSG_145;Мікроконтраст - Рівномірність +HISTORY_MSG_146;Деталі контурів +HISTORY_MSG_147;Деталі контурів - тільки люмінація +HISTORY_MSG_148;Мікроконтраст +HISTORY_MSG_149;Мікроконтраст - матриця 3×3 +HISTORY_MSG_150;Знешумлення і видалення артефактів демозаїзації +HISTORY_MSG_151;Світність +HISTORY_MSG_152;Світність - пастельні тони +HISTORY_MSG_153;Світність - насичені тони +HISTORY_MSG_154;Світність - збереження тонів шкіри +HISTORY_MSG_155;Світність - запобігання зміні кольорів +HISTORY_MSG_156;Світність - об'єднати пастельні та насичені +HISTORY_MSG_157;Світність - поріг розділення пастельних та насичених тонів +HISTORY_MSG_158;ТВ - Сила +HISTORY_MSG_159;ТВ - Пошук контурів +HISTORY_MSG_160;ТВ - Обшар +HISTORY_MSG_161;ТВ - Поправка при ітерації +HISTORY_MSG_162;Тональне відображення +HISTORY_MSG_163;Криві RGB - Червоний +HISTORY_MSG_164;Криві RGB - Зелений +HISTORY_MSG_165;Криві RGB - Синій +HISTORY_MSG_167;Алгоритм демозаїзації +HISTORY_MSG_168;L*a*b* - Крива CC +HISTORY_MSG_169;L*a*b* - Крива CH +HISTORY_MSG_170;Світність - Крива HH +HISTORY_MSG_171;L*a*b* - Крива LC +HISTORY_MSG_172;L*a*b* - Обмежити LC +HISTORY_MSG_174;CIECAM02 +HISTORY_MSG_175;CAM02 - Адаптація CAT02 +HISTORY_MSG_176;CAM02 - Оточення +HISTORY_MSG_177;CAM02 - Світність сцени +HISTORY_MSG_178;CAM02 - Світність відображення +HISTORY_MSG_179;CAM02 - Модель балансу білого +HISTORY_MSG_180;CAM02 - Lightness (J) +HISTORY_MSG_181;CAM02 - Хроматичність (C) +HISTORY_MSG_182;CAM02 - Автоматичне CAT02 +HISTORY_MSG_183;CAM02 - Контраст (J) +HISTORY_MSG_184;CAM02 - Оточення сцени +HISTORY_MSG_185;CAM02 - Котроль гамуту +HISTORY_MSG_186;CAM02 - Алгоритм +HISTORY_MSG_187;CAM02 - Збереження тонів шкіри і червоних тонів +HISTORY_MSG_188;CAM02 - Яскравість (Q) +HISTORY_MSG_189;CAM02 - Контраст (Q) +HISTORY_MSG_190;CAM02 - Насиченість (S) +HISTORY_MSG_191;CAM02 - Барвистість (M) +HISTORY_MSG_192;CAM02 - Відтінок (hue, h) +HISTORY_MSG_193;CAM02 - Тональна крива 1 +HISTORY_MSG_194;CAM02 - Тональна крива 2 +HISTORY_MSG_195;CAM02 - Тональна крива 1 +HISTORY_MSG_196;CAM02 - Тональна крива 2 +HISTORY_MSG_197;CAM02 - Крива кольору +HISTORY_MSG_198;CAM02 - Крива кольору +HISTORY_MSG_199;CAM02 - Визідні гістограми +HISTORY_MSG_200;CAMO2 - Тональне відображення +HISTORY_MSG_201;Усування шумів - Хроматичність - R&G +HISTORY_MSG_202;Усування шумів - Хроматичність - B&Y +HISTORY_MSG_204;Покрокове поліпшення LMMSE +HISTORY_MSG_205;CAM02 - Галячі/пошкоджені пікселі +HISTORY_MSG_206;CAT02 - Авто-світність сцени +HISTORY_MSG_207;Усування віньєтки - Крива відтінків +HISTORY_MSG_208;BB - Вирівнювач N/C +HISTORY_MSG_210;FP - Кут +HISTORY_MSG_211;Градієнтний фільтр +HISTORY_MSG_212;Віньєтування - Сила +HISTORY_MSG_213;Віньєтування +HISTORY_MSG_214;Чорно-біле (B&W) +HISTORY_MSG_215;B&W - CM - Червоний +HISTORY_MSG_216;B&W - CM - Зелений +HISTORY_MSG_217;B&W - CM - Синій +HISTORY_MSG_218;B&W - Гамма - Червоний +HISTORY_MSG_219;B&W - Гамма - Зелений +HISTORY_MSG_220;B&W - Гамма - Синій +HISTORY_MSG_221;B&W - Кольоровий фільтр +HISTORY_MSG_222;B&W - Налаштування +HISTORY_MSG_223;B&W - CM - Оранжевий +HISTORY_MSG_224;B&W - CM - Жовтий +HISTORY_MSG_225;B&W - CM - Ціановий +HISTORY_MSG_226;B&W - CM - Маджента +HISTORY_MSG_227;B&W - CM - Пурпуровий +HISTORY_MSG_228;B&W - Вирівнювач люмінації +HISTORY_MSG_229;B&W - Вирівнювач люмінації +HISTORY_MSG_230;B&W - Tryb +HISTORY_MSG_231;B&W - Крива 'перед' +HISTORY_MSG_232;B&W - Тип кривої 'перед' +HISTORY_MSG_233;B&W - Крива 'після' +HISTORY_MSG_234;B&W - Тип кривої 'після' +HISTORY_MSG_236;- +HISTORY_MSG_238;FP - Wtapianie +HISTORY_MSG_239;FP - Siła +HISTORY_MSG_240;FP - Środek +HISTORY_MSG_241;Віньєтування - Wtapianie +HISTORY_MSG_242;Віньєтування - Округлість +HISTORY_MSG_243;Віньєтування - Радіус +HISTORY_MSG_244;Віньєтування - Сила +HISTORY_MSG_245;Віньєтування - Środek +HISTORY_MSG_246;Крива CL +HISTORY_MSG_247;Крива LH +HISTORY_MSG_248;Крива HH +HISTORY_MSG_249;KwgPS - Próg +HISTORY_MSG_250;RS - Ulepszona +HISTORY_MSG_251;B&W - Алгоритм +HISTORY_MSG_252;KwgPS - Odcienie skóry +HISTORY_MSG_253;KwgPS - Redukcja błędów +HISTORY_MSG_254;KwgPS - Odcienie skóry +HISTORY_MSG_255;RS - Filtr mediana +HISTORY_MSG_257;Koloryzacja +HISTORY_MSG_258;Koloryzacja - Kolor +HISTORY_MSG_259;Koloryzacja - Przezroczystość +HISTORY_MSG_260;Koloryzacja - Przezroczystość a*[b*] +HISTORY_MSG_261;Koloryzacja - Metoda +HISTORY_MSG_262;Koloryzacja - Przezroczystość b* +HISTORY_MSG_263;Koloryzacja - Cienie - Червоний +HISTORY_MSG_264;Koloryzacja - Cienie - Зелений +HISTORY_MSG_265;Koloryzacja - Cienie - Niebiski +HISTORY_MSG_266;Koloryzacja - Þółcienie - Czerwone +HISTORY_MSG_267;Koloryzacja - Þółcienie - Zielone +HISTORY_MSG_268;Koloryzacja - Þółcienie - Синійe +HISTORY_MSG_269;Koloryzacja - Podświetlenia - Czerwone +HISTORY_MSG_270;Koloryzacja - Podświetlenia - Zielona +HISTORY_MSG_271;Koloryzacja - Podświetlenia - Синійe +HISTORY_MSG_272;Koloryzacja - Balans +HISTORY_MSG_274;Koloryzacja - Nasycenie cieni +HISTORY_MSG_275;Koloryzacja - Nasycenie jasnych +HISTORY_MSG_276;Koloryzacja - Przezroczystość +HISTORY_MSG_277;--unused-- +HISTORY_MSG_278;Koloryzacja - Zachowaj luminancję +HISTORY_MSG_279;Koloryzacja - Cienie +HISTORY_MSG_280;Koloryzacja - Tony jasne +HISTORY_MSG_281;Koloryzacja - Siła nasycenia +HISTORY_MSG_282;Koloryzacja - Próg nasycenia +HISTORY_MSG_283;Koloryzacja - Siła +HISTORY_MSG_284;Koloryzacja - Auto ochrona przesycenia +HISTORY_MSG_285;RS - Mediana - Metoda +HISTORY_MSG_286;RS - Mediana - Typ +HISTORY_MSG_287;RS - Mediana - Powtarzanie +HISTORY_MSG_288;Puste pole - Zabezp. przed obcinaniem +HISTORY_MSG_289;Puste pole - Auto-zabezp. przed obcinaniem +HISTORY_MSG_290;Próg czerni - Червоний +HISTORY_MSG_291;Próg czerni - Зелений +HISTORY_MSG_292;Próg czerni - Синій +HISTORY_MSG_293;Symulacja Kliszy +HISTORY_MSG_294;Symulacja Kliszy - Siła +HISTORY_MSG_295;Symulacja Kliszy - Klisza +HISTORY_MSG_296;RS - Modulacja люмінації +HISTORY_MSG_298;Filtrowanie martwych pikseli +HISTORY_NEWSNAPSHOT;Nowa migawka +HISTORY_NEWSNAPSHOT_TOOLTIP;Skrót: Alt-s +HISTORY_SNAPSHOT;Migawka +HISTORY_SNAPSHOTS;Migawki +IPTCPANEL_CATEGORY;Kategoria +IPTCPANEL_CITY;Miasto +IPTCPANEL_COPYHINT;Kopiuje ustawienia IPTC do schowka +IPTCPANEL_COUNTRY;Kraj +IPTCPANEL_CREDIT;Zasługa +IPTCPANEL_CREDITHINT;Identyfikuje dostawcę zdjęcia, niekoniecznie właściciela lub autora (Credit). +IPTCPANEL_DATECREATED;Data utworzenia +IPTCPANEL_EMBEDDED;Osadzony +IPTCPANEL_EMBEDDEDHINT;Resetuje dane IPTC do domyślnych ustawień osadzonych w orginalnym zdjęciu +IPTCPANEL_HEADLINE;Nagłówek +IPTCPANEL_INSTRUCTIONS;Instrukcje +IPTCPANEL_KEYWORDS;Słowa kluczowe +IPTCPANEL_PASTEHINT;Wstawia ustawienia IPTC ze schowka +IPTCPANEL_RESET;Reset +IPTCPANEL_RESETHINT;Resetuje do domyślnych ustawień profilu +IPTCPANEL_SOURCE;Źródło +IPTCPANEL_TITLE;Tytuł +MAIN_BUTTON_FULLSCREEN;Pełen ekran +MAIN_BUTTON_NAVNEXT_TOOLTIP;Przejdź do następnego zdjęcia względem zdjęcia otwartego w Edytorze.\nSkrót: Shift-F4\n\nAby przejść do następnego zdjęcia względem miniaturki wybranej w Nawigatorze Zdjęć:\nSkrót: F4 +MAIN_BUTTON_NAVPREV_TOOLTIP;Przejdź do poprzedniego zdjęcia wzgledem zdjęcia otwartego w Edytorze.\nSkrót: Shift-F3 \n\nAby przejść do poprzedniego zdjęcia względem miniaturki wybranej w Nawigatorze Zdjęć:\nSkrót: F3 +MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronizuj Nawigator Zdjęć z Edytorem aby ukazać miniaturkę obecnie otwartego zdjęcia, oraz usuń filtry w Nawigatorze Zdjęć.\nSkrót: x\n\nJak wyżej, ale bez usuwania filtrów:\nSkrót: y\n(Miniaturka otwartego zdjęcia nie zostanie wyświetlona jesli filtr ją ukrywa). +MAIN_BUTTON_PREFERENCES;Ustawienia +MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Dodaj bieżące zdjęcie do kolejki przetwarzania Ctrl+B +MAIN_BUTTON_SAVE_TOOLTIP;Zapisz bieżące zdjęcieCtrl+S +MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Otwórz bieżące zdjęcie w zewnętrznym edytorze.\nSkrót: Ctrl+e +MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Pokaż/Ukryj wszystkie panele boczne.\nSkrót: m +MAIN_BUTTON_UNFULLSCREEN;Zwolnij ekran +MAIN_FRAME_BATCHQUEUE;Kolejka +MAIN_FRAME_BATCHQUEUE_TOOLTIP;Przetwarzanie wsadowe\nSkrót: Ctrl-F3 +MAIN_FRAME_EDITOR;Edytor +MAIN_FRAME_EDITOR_TOOLTIP;Edytor.\nSkrót: Ctrl-F4 +MAIN_FRAME_FILEBROWSER;Przeglądarka plików +MAIN_FRAME_FILEBROWSER_TOOLTIP; Przeglądarka plików.\nSkrót: Ctrl-F2 +MAIN_FRAME_PLACES;Miejsca +MAIN_FRAME_PLACES_ADD;Dodaj +MAIN_FRAME_PLACES_DEL;Usuń +MAIN_FRAME_RECENT;Ostatnio używane foldery +MAIN_MSG_ALREADYEXISTS;Plik już istnieje. +MAIN_MSG_CANNOTLOAD;Nie można wczytać obrazu +MAIN_MSG_CANNOTSAVE;Błąd zapisu pliku +MAIN_MSG_CANNOTSTARTEDITOR;Nie mozna uruchomic edytora. +MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Proszę wprowadzić prawidłową ścieżkę w Ustawieniach. +MAIN_MSG_EMPTYFILENAME;Nie podano nazwy pliku! +MAIN_MSG_IMAGEUNPROCESSED;Ta komenda wymaga aby wszystkie wybrane zdjęcia były wpierw wywołane poprzez kolejkę. +MAIN_MSG_NAVIGATOR;Nawigator +MAIN_MSG_OPERATIONCANCELLED;Operację anulowano +MAIN_MSG_PATHDOESNTEXIST;Ścieżka\n\n%1\n\nnie istnieje. Wybierz przawidłową ścieżkę w Ustawieniach. +MAIN_MSG_QOVERWRITE;Zastąpić? +MAIN_MSG_SETPATHFIRST;Aby użyć tej funkcji należy wpierw wybrać odpowiednią ścieżkę docelową w Ustawieniach! +MAIN_MSG_WRITEFAILED;Zapis nie powiódł się:\n\n"%1"\n\nUpewnij się, że folder istnieje oraz że można do niego zapisywać. +MAIN_TAB_COLOR;Kolor +MAIN_TAB_COLOR_TOOLTIP;Skrót: Alt-c +MAIN_TAB_DETAIL;Szczegóły +MAIN_TAB_DETAIL_TOOLTIP;Skrót: Alt-d +MAIN_TAB_DEVELOP; Przetwarzanie +MAIN_TAB_EXIF;Exif +MAIN_TAB_EXPORT; Szybki eksport +MAIN_TAB_EXPOSURE;Ekspozycja +MAIN_TAB_EXPOSURE_TOOLTIP;Skrót: Alt-e +MAIN_TAB_FILTER; Filtr +MAIN_TAB_IPTC;IPTC +MAIN_TAB_METADATA;Метадані +MAIN_TAB_METADATA_TOOLTIP;Skrót: Alt-m +MAIN_TAB_RAW;Raw +MAIN_TAB_RAW_TOOLTIP;Skrót: Alt-r +MAIN_TAB_TRANSFORM;Transformacje +MAIN_TAB_TRANSFORM_TOOLTIP;Skrót: Alt-t +MAIN_TOOLTIP_BACKCOLOR0;Kolor tła podglądu: Tematyczny\nSkrót: 9 +MAIN_TOOLTIP_BACKCOLOR1;Kolor tła podglądu: Czarny\nSkrót: 9 +MAIN_TOOLTIP_BACKCOLOR2;Kolor tła podglądu: Biały\nSkrót: 9 +MAIN_TOOLTIP_BEFOREAFTERLOCK;Zablokuj / Odblokuj widok Przed\n\nZablokuj: nie zmieniaj widoku Przed - \nPrzydatne w porównywaniu zablokowanego obrazu z obrazem na ktorym wykonano wiele zmian.\n\nOdblokuj: widok Przed będzie śledził widok Po o jeden krok do tyłu, pokazując obraz przed efektem aktualnie użytego narzędzia. +MAIN_TOOLTIP_HIDEHP;Pokaż/ukryj lewy panel (razem z historią).\nSkrót: l +MAIN_TOOLTIP_INDCLIPPEDH;Pokaż obcięte prześwietlenia.\nSkrót: < +MAIN_TOOLTIP_INDCLIPPEDS;Pokaż obcięte niedoświetlenia.\nSkrót: > +MAIN_TOOLTIP_PREVIEWB;Podgląd kanału Синійego.\nSkrót: b +MAIN_TOOLTIP_PREVIEWFOCUSMASK;Podgląd maski ostrości.\nSkrót: Shift-f\n\nDokładniejsze w przypadku zdjęc o płytkiej głębi ostrości, niskim pozimie szumów i o większym przybliżeniu. W przypadku zdjęć o wyższym poziomie szumów maska ostrości będzie dokładniejsza przy mniejszym zoomie (10-30%). +MAIN_TOOLTIP_PREVIEWG;Podgląd kanału zielonego.\nSkrót: g +MAIN_TOOLTIP_PREVIEWL;Podgląd kanału jasności.\nSkrót: v\n\n0.299*R + 0.587*G + 0.114*B +MAIN_TOOLTIP_PREVIEWR;Podgląd kanału czerwonego.\nSkrót: r +MAIN_TOOLTIP_QINFO;Informacje o zdjęciu.\nSkrót: i +MAIN_TOOLTIP_SHOWHIDELP1;Pokaż/Ukryj lewy panel.\nSkrót: l +MAIN_TOOLTIP_SHOWHIDERP1;Pokaż/Ukryj prawy panel.\nSkrót: Alt-l +MAIN_TOOLTIP_SHOWHIDETP1;Pokaż/Ukryj górny panel.\nSkrót: Shift-l +MAIN_TOOLTIP_THRESHOLD;Próg +MAIN_TOOLTIP_TOGGLE;Przełącz widok Przed/Po.\nSkrót: Shift-b +NAVIGATOR_B;B: +NAVIGATOR_G;G: +NAVIGATOR_H;H: +NAVIGATOR_LAB_A;a*: +NAVIGATOR_LAB_B;b*: +NAVIGATOR_LAB_L;L*: +NAVIGATOR_NA; -- +NAVIGATOR_R;R: +NAVIGATOR_S;S: +NAVIGATOR_V;V: +NAVIGATOR_XY_FULL;Szerokość: %1, Wysokość: %2 +NAVIGATOR_XY_NA;x: --, y: -- +PARTIALPASTE_BASICGROUP;Podstawowe ustawienia +PARTIALPASTE_CACORRECTION;Korekcja aberacji chr. +PARTIALPASTE_CHANNELMIXER;Mieszacz kanałów +PARTIALPASTE_CHANNELMIXERBW;Czarno-białe +PARTIALPASTE_COARSETRANS;Obrót dyskretny / odbicie +PARTIALPASTE_COLORAPP;CIECAM02 +PARTIALPASTE_COLORGROUP;Ustawienia związane z kolorem +PARTIALPASTE_COLORTONING;Koloryzacja +PARTIALPASTE_COMMONTRANSFORMPARAMS;Auto-wypełnianie +PARTIALPASTE_COMPOSITIONGROUP;Ustawienia kompozycji +PARTIALPASTE_CROP;Kadrowanie +PARTIALPASTE_DARKFRAMEAUTOSELECT;Auto-wybór czarnej klatki +PARTIALPASTE_DARKFRAMEFILE;Wybór czarnej klatki +PARTIALPASTE_DEFRINGE;Usuwanie widma +PARTIALPASTE_DETAILGROUP;Ustawienia szczegółowe +PARTIALPASTE_DIALOGLABEL;Częściowe wklejenie profilu przetwarzania +PARTIALPASTE_DIRPYRDENOISE;Redukcja szumu +PARTIALPASTE_DIRPYREQUALIZER;Контраст wg. poziomu detali +PARTIALPASTE_DISTORTION;Korekcja zniekształcenia +PARTIALPASTE_EPD;Tone Mapping +PARTIALPASTE_EVERYTHING;Wszystko +PARTIALPASTE_EXIFCHANGES;Exif +PARTIALPASTE_EXPOSURE;Ekspozycja +PARTIALPASTE_FILMSIMULATION;Symulacja kliszy +PARTIALPASTE_FLATFIELDAUTOSELECT;Puste pole - Auto-wybór +PARTIALPASTE_FLATFIELDBLURRADIUS;Puste pole - Promień +PARTIALPASTE_FLATFIELDBLURTYPE;Puste pole - Typ +PARTIALPASTE_FLATFIELDCLIPCONTROL;Puste pole - Zabezp. przed obcinaniem +PARTIALPASTE_FLATFIELDFILE;Puste pole - Wybór +PARTIALPASTE_GRADIENT;Filtr połówkowy +PARTIALPASTE_HSVEQUALIZER;Ekwalizator HSV +PARTIALPASTE_ICMSETTINGS;Ustawienia ICM +PARTIALPASTE_IMPULSEDENOISE;Redukcja szumów impulsowych +PARTIALPASTE_IPTCINFO;IPTC +PARTIALPASTE_LABCURVE;Regulacje L*a*b* +PARTIALPASTE_LENSGROUP;Ustawienia związane z obiektywem +PARTIALPASTE_LENSPROFILE;Profil korekcji obiektywu LCP +PARTIALPASTE_METAGROUP;Метадані +PARTIALPASTE_PCVIGNETTE;Віньєтування +PARTIALPASTE_PERSPECTIVE;Perspektywa +PARTIALPASTE_PREPROCESS_DEADPIXFILT;Filtr martwych pikseli +PARTIALPASTE_PREPROCESS_GREENEQUIL;Wyrównanie zieleni +PARTIALPASTE_PREPROCESS_HOTPIXFILT;Filtr gorących pikseli +PARTIALPASTE_PREPROCESS_LINEDENOISE;Redukcja szumów liniowych +PARTIALPASTE_RAWCACORR_AUTO;Autokorekcja aberracji chr. +PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni +PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli +PARTIALPASTE_RAWEXPOS_PRESER;Zachowanie prześwietleń +PARTIALPASTE_RAWGROUP;Ustawienia raw +PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawę DCB +PARTIALPASTE_RAW_DCBITERATIONS;Liczba powtórzeń DCB +PARTIALPASTE_RAW_DMETHOD;Алгоритм demozaikowania +PARTIALPASTE_RAW_FALSECOLOR;Tłumienie fałszowania koloru +PARTIALPASTE_RAW_LMMSEITERATIONS;Kroki poprawy LMMSE +PARTIALPASTE_RESIZE;Zmiana rozmiaru +PARTIALPASTE_RGBCURVES;Krzywe RGB +PARTIALPASTE_ROTATION;Obrót +PARTIALPASTE_SHADOWSHIGHLIGHTS;Cienie/Podświetlenia +PARTIALPASTE_SHARPENEDGE;Krawędzie +PARTIALPASTE_SHARPENING;Wyostrzanie +PARTIALPASTE_SHARPENMICRO;MikroКонтраст +PARTIALPASTE_VIBRANCE;Світність +PARTIALPASTE_VIGNETTING;Korekcja winietowania +PARTIALPASTE_WHITEBALANCE;Balans bieli +PREFERENCES_ADD;Dodaj +PREFERENCES_APPLNEXTSTARTUP;wymaga ponownego uruchomienia +PREFERENCES_AUTOMONPROFILE;Automatycznie użyj systemowego profilu monitora +PREFERENCES_BATCH_PROCESSING;Przetwarzanie wsadowe +PREFERENCES_BEHADDALL;'Dodaj' wszystkie +PREFERENCES_BEHADDALLHINT;Ustaw wszystkie narzędzia w tryb Dodaj.\nZmiany parametrów w panelu edycji zbiorczej zostaną traktowane jako różnicę do poprzednich wartości. +PREFERENCES_BEHAVIOR;Zachowanie +PREFERENCES_BEHSETALL;'Ustaw' wszystkie +PREFERENCES_BEHSETALLHINT;Ustaw wszystkie narzędzia w tryb Ustaw.\nZmiany parametrów w panelu edycji zbiorczej zostaną traktowane jako absolutne, nie biorąc pod uwagę poprzednich wartości. +PREFERENCES_BLACKBODY;Wolfram +PREFERENCES_CACHEMAXENTRIES;Maksymalna liczba wpisów w pamięci podręcznej +PREFERENCES_CACHEOPTS;Opcje pamięci podręcznej +PREFERENCES_CACHETHUMBHEIGHT;Maksymalna wysokość miniatury +PREFERENCES_CIEART;CIECAM02 optymalizacja +PREFERENCES_CIEART_LABEL;Użyj precyzję zmiennoprzecinkową zamiast podwójną. +PREFERENCES_CIEART_TOOLTIP;Gdy umożliwione, kalkulacje CIECAM02 są wykonywane w notacji zmiennoprzecinkowej o pojedyńczej precyzji zamiast podwójnej. Skraca to czas egzekucji kosztem nieistotnej zmiany w jakości. +PREFERENCES_CLIPPINGIND;Pokazywanie obciętych prześwietleń/cieni +PREFERENCES_CLUTSDIR;Folder obrazów HaldCLUT +PREFERENCES_CUSTPROFBUILD;Zewnętrzny kreator profilów przetwarzania +PREFERENCES_CUSTPROFBUILDHINT;Plik wykonywalny (lub skrypt) uruchamiany kiedy trzeba wygenerować profil przetwarzania dla zdjęcia.\n\nScieżka pliku nośnego (w stylu *.ini czyli sekcje i klucze/parametry) występuje jako parametr wiersza poleceń. Plik ten zawiera przeróżne parametry oraz dane Exif dzięki którym odpowiedni program bądź skrypt może wygenerować plik PP3 według reguł.\n\nUWAGA: Twoją odpowiedzialnością jest prawidłowe użycie cudzysłowiów w przypadku ścieżek zawierających spacje i znaki specjalne. +PREFERENCES_CUSTPROFBUILDKEYFORMAT;Rodzaj kluczy +PREFERENCES_CUSTPROFBUILDKEYFORMAT_NAME;Nazwa +PREFERENCES_CUSTPROFBUILDKEYFORMAT_TID;TagID +PREFERENCES_CUSTPROFBUILDPATH;Ścieżka pliku wykonywalnego +PREFERENCES_CUTOVERLAYBRUSH;Kolor/przezroczystość maski kadrowania +PREFERENCES_D50;5000K +PREFERENCES_D55;5500K +PREFERENCES_D60;6000K +PREFERENCES_D65;6500K +PREFERENCES_DARKFRAMEFOUND;Znaleziono +PREFERENCES_DARKFRAMESHOTS;zdjęć(ia) +PREFERENCES_DARKFRAMETEMPLATES;szablonów(ny) +PREFERENCES_DATEFORMAT;Format daty +PREFERENCES_DATEFORMATHINT;Dozwolone są następujące kody formatujące:\n%y - rok\n%m - miesiąc\n%d - dzień\n\nNa przykład według standardu ISO 8601 format daty wygląda następująco:\n%y-%m-%d +PREFERENCES_DIRDARKFRAMES;Katalog z czarnymi klatkami +PREFERENCES_DIRHOME;Katalog domowy +PREFERENCES_DIRLAST;Ostatnio odwiedzony katalog +PREFERENCES_DIROTHER;Inny +PREFERENCES_DIRSELECTDLG;Wybierz katalog z obrazami po uruchomieniu... +PREFERENCES_DIRSOFTWARE;Katalog instalacyjny +PREFERENCES_EDITORLAYOUT;Układ edytora +PREFERENCES_EXTERNALEDITOR;Zewnętrzny edytor +PREFERENCES_FBROWSEROPTS;Opcje przeglądarki plików +PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Pojedynczy wiersz paska narzędzi (odznaczyć dla niskich rozdzielczości) +PREFERENCES_FILEFORMAT;Format pliku +PREFERENCES_FLATFIELDFOUND;Znaleziono +PREFERENCES_FLATFIELDSDIR;Katalog z pustymi polami +PREFERENCES_FLATFIELDSHOTS;kadry +PREFERENCES_FLATFIELDTEMPLATES;szablony +PREFERENCES_FLUOF2;Fluorescent F2 +PREFERENCES_FLUOF7;Fluorescent F7 +PREFERENCES_FLUOF11;Fluorescent F11 +PREFERENCES_FORIMAGE;Dla zdjęć innych niż raw +PREFERENCES_FORRAW;Dla zdjęć raw +PREFERENCES_GIMPPATH;Katalog, w którym zainstalowany jest GIMP +PREFERENCES_GREY;Світність Yb urządzenia wyjściowego (%) +PREFERENCES_GREY05;Yb=05 CIE L#30 +PREFERENCES_GREY10;Yb=10 CIE L#40 +PREFERENCES_GREY15;Yb=15 CIE L#45 +PREFERENCES_GREY18;Yb=18 CIE L#50 +PREFERENCES_GREY23;Yb=23 CIE L#55 +PREFERENCES_GREY30;Yb=30 CIE L#60 +PREFERENCES_GREY40;Yb=40 CIE L#70 +PREFERENCES_HISTOGRAMPOSITIONLEFT;Histogram w lewym panelu +PREFERENCES_HISTOGRAMWORKING;Zastosuj profil roboczy do obliczenia głównego histogramu i Nawigatora +PREFERENCES_HISTOGRAM_TOOLTIP;Jeśli opcja jest włączona profil roboczy jest użyty do obliczenia głównego histogramu oraz panelu Nawigatora, inaczej profil wyjściowy z korektą gamma zostanie użyty. +PREFERENCES_HLTHRESHOLD;Próg dla prześwietleń +PREFERENCES_ICCDIR;Katalog z profilami koloru ICC +PREFERENCES_IMPROCPARAMS;Domyślne parametry przetwarzania obrazu +PREFERENCES_INTENT_ABSOLUTE;Absolutnie kolorymetryczny +PREFERENCES_INTENT_PERCEPTUAL;Percepcyjny +PREFERENCES_INTENT_RELATIVE;Względnie kolorymetryczny +PREFERENCES_INTENT_SATURATION;Nasyceniowy +PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Pokaż osadzoną miniaturę JPEG jeśli plik raw jest nieedytowany +PREFERENCES_LANGAUTODETECT;Użyj języka systemowego +PREFERENCES_MENUGROUPEXTPROGS;Grupuj "Otwórz za pomocą" +PREFERENCES_MENUGROUPFILEOPERATIONS;Grupuj operacje plików +PREFERENCES_MENUGROUPLABEL;Grupuj operacje etykiet +PREFERENCES_MENUGROUPPROFILEOPERATIONS;Grupuj operacje profili przetwarzania +PREFERENCES_MENUGROUPRANK;Grupuj operacje oceny +PREFERENCES_MENUOPTIONS;Opcje menu +PREFERENCES_METADATA;Метадані +PREFERENCES_MULTITAB;Tryb wielu zakładek +PREFERENCES_MULTITABDUALMON;Tryb wielu zakładek (na drugim monitorze jeśli dostępny) +PREFERENCES_NAVGUIDEBRUSH;Kolor ramki Nawigatora +PREFERENCES_OUTDIR;Katalog wyjściowy +PREFERENCES_OUTDIRFOLDER;Zapisz do katalogu +PREFERENCES_OUTDIRFOLDERHINT;Umieszcza zapisywane zdjęcia w wybranym katalogu +PREFERENCES_OUTDIRTEMPLATE;Użyj schemat +PREFERENCES_OUTDIRTEMPLATEHINT;Dozwolone są następujące kody formatujące:\n%f, %d1, %d2, ..., %p1, %p2, ..., %r, %s1, %s2, ...\n\nKody formatujące odnoszą się do różnych elementów ścieżki zdjęcia, atrybutów zdjęcia oraz do arbitralnego ciągu numerycznego operacji wsadowej.\n\nPrzykładowo, jeśli zdjęcie obrabiane ma następującą ścieżkę:\n/home/andrzej/zdjecia/2010-10-31/dsc0042.nef\nznaczenie kodów formatujących jest następujące:\n%d4 = home\n%d3 = andrzej\n%d2 = zdjecia\n%d1 = 2010-10-31\n%f = dsc0042\n%p1 = /home/tom/photos/2010-10-31/\n%p2 = /home/andrzej/zdjecia/\n%p3 = /home/andrzej/\n%p4 = /home/\n\n%r zostanie zastąpione oceną zdjęcia. Jeśli zdjęcie nie posiada oceny, %r zostanie zastąpione liczbą '0'. Jeśli zdjęcie leży w śmietniku, %r zostanie zastąpione znakiem 'x'.\n\n%s1, %s2, etc. zostanie zastąpione ciągniem numerycznym dopełnionym od jednej do dziewięciu cyfr. Ciąg ten zostanie rozpocznięty od "1" za każdym razem gdy kolejka przetwarzania zostanie uruchomiona, i liczba jest zwiększona o "1" dla każdego zapisanego obrazu.\n\nJeśli chcesz zapisać obraz wyjściowy obok obrazu wejściowego, napisz:\n%p1/%f\n\nJeśli chcesz zapisać obraz wyjściowy w folderze o nazwie "wywolane" znajdującego się w katalogu zawierającym otwarty obraz, napisz:\n%p1/wywolane/%f\n\nJeśli chcesz zapisać obraz wyjściowy w folderze o nazwie "/home/andrzej/zdjecia/wywolane/2010-10-31", napisz:\n%p2/wywolane/%d1/%f +PREFERENCES_OVERLAY_FILENAMES;Nakładaj nazwy pliku na miniatury +PREFERENCES_OVERWRITEOUTPUTFILE;Nadpisuj istniejące pliki +PREFERENCES_PANFACTORLABEL;Współczynnik +PREFERENCES_PARSEDEXT;Przetwarzane rozszerzenia +PREFERENCES_PARSEDEXTADD;Dodaj rozszerzenie +PREFERENCES_PARSEDEXTADDHINT;Proszę wprowadzić rozszerzenie i zatwierdzić przyciskiem, by dodać do listy +PREFERENCES_PARSEDEXTDELHINT;Skasuje wybrane rozszerzenie z listy +PREFERENCES_PROFILEHANDLING;Obsługa profili +PREFERENCES_PROFILELOADPR;Priorytet wczytywania profilu +PREFERENCES_PROFILEPRCACHE;Profil w pamięci podręcznej +PREFERENCES_PROFILEPRFILE;Profil przy pliku wejściowym +PREFERENCES_PROFILESAVECACHE;Zapisz parametry przetwarzania w pamięci podręcznej +PREFERENCES_PROFILESAVEINPUT;Zapisz parametry przetwarzania obok pliku wejściowego +PREFERENCES_PROPERTY;Własność +PREFERENCES_PSPATH;Katalog w którym zainstalowany jest Adobe Photoshop +PREFERENCES_SELECTFONT;Wybierz czcionkę +PREFERENCES_SELECTLANG;Wybierz język +PREFERENCES_SELECTTHEME;Wybierz temat +PREFERENCES_SET;Ustaw +PREFERENCES_SHOWBASICEXIF;Pokaż podstawowe dane Exif +PREFERENCES_SHOWDATETIME;Pokaż datę i czas +PREFERENCES_SHOWEXPOSURECOMPENSATION;Pokaż korektę ekspozycji +PREFERENCES_SHTHRESHOLD;Próg dla niedoświetleń +PREFERENCES_SINGLETAB;Tryb pojedynczej zakładki +PREFERENCES_SINGLETABVERTAB;Tryb pojedynczej zakładki, pionowy układ +PREFERENCES_SND_BATCHQUEUEDONE;Zakończono przetwarzanie wsadowe +PREFERENCES_SND_HELP;Należy wprowadzić ścieżkę do pliku, bądź pozostawić niewypełnione (brak dźwięków).\nW systemie Windows można stosować "SystemDefault", "SystemAsterisk" itp. dla dźwięków systemowych.\nW systemie Linux można stosować "complete", "window-attention" etc. dla dzwięków systemowych. +PREFERENCES_SND_LNGEDITPROCDONE;Praca edytora wykonana +PREFERENCES_SND_THRESHOLDSECS;po sekundach +PREFERENCES_STARTUPIMDIR;Katalog startowy +PREFERENCES_TAB_BROWSER;Przeglądarka plików +PREFERENCES_TAB_COLORMGR;Zarządzanie kolorami +PREFERENCES_TAB_GENERAL;Ogólne +PREFERENCES_TAB_IMPROC;Przetwarzanie obrazu +PREFERENCES_TAB_SOUND;Dźwięki +PREFERENCES_TP_LABEL;Panel narzędzi: +PREFERENCES_TP_VSCROLLBAR;Ukry pionowy pasek przesuwania +PREFERENCES_USEBUNDLEDPROFILES;Użyj załączone profile przetwarzania +PREFERENCES_VIEW;Balans bieli urządzenia wyjściowego (monitora, TV, projektora, widowni, etc.) +PREFERENCES_WORKFLOW;Tok pracy +PROFILEPANEL_COPYPPASTE;Parametry do skopiowania +PROFILEPANEL_GLOBALPROFILES;Załączone profile przetwarzania +PROFILEPANEL_LABEL;Profil przetwarzania +PROFILEPANEL_LOADDLGLABEL;Wczytaj profil przetwarzania końcowego... +PROFILEPANEL_LOADPPASTE;Parametry do załadowania +PROFILEPANEL_MODE_TIP;Tryb wypełnienia parametrów przetwarzania.\n\nWduszone: częściowe profile zostaną przetworzone w profile pełne; brakujące wartości zostana wypełnione domyślnymi, zakodowanymi w silniku RawTherapee.\n\nWyłączone: profile zostaną zastosowane takie, jakie są, zmieniając tylko te wartości, które zawierają. +PROFILEPANEL_MYPROFILES;Moje profile przetwarzania +PROFILEPANEL_PASTEPPASTE;Parametry do wklejenia +PROFILEPANEL_PCUSTOM;Własny +PROFILEPANEL_PFILE;Z pliku +PROFILEPANEL_PINTERNAL;Neutralny +PROFILEPANEL_PLASTSAVED;Ostatnio zapisany +PROFILEPANEL_SAVEDLGLABEL;Zapisz profil przetwarzania... +PROFILEPANEL_SAVEPPASTE;Parametry do zapisania +PROFILEPANEL_TOOLTIPCOPY;Skopiuj aktualny profil do schowka +PROFILEPANEL_TOOLTIPLOAD;Ładuj profil z pliku.\nCtrl+klik aby wybrać parametry do ładowania. +PROFILEPANEL_TOOLTIPPASTE;Wklej profil ze schowka.\nCtrl+klik aby wybrać parametry do wklejenia. +PROFILEPANEL_TOOLTIPSAVE;Zapisz aktualny profil.\nCtrl+klik aby wybrać parametry do zapisania. +PROGRESSBAR_LOADING;Wczytywanie obrazu... +PROGRESSBAR_LOADINGTHUMBS;Wczytywanie miniatur... +PROGRESSBAR_LOADJPEG;Ładowanie pliku JPEG... +PROGRESSBAR_LOADPNG;Ładowanie pliku PNG... +PROGRESSBAR_LOADTIFF;Ładowanie pliku TIFF... +PROGRESSBAR_NOIMAGES;Nie znaleziono żadnych obrazów +PROGRESSBAR_PROCESSING;Przetwarzanie obrazu... +PROGRESSBAR_PROCESSING_PROFILESAVED;Zapisano profil przetwarzania +PROGRESSBAR_READY;Gotowe +PROGRESSBAR_SAVEJPEG;Zapisywanie pliku JPEG... +PROGRESSBAR_SAVEPNG;Zapisywanie pliku PNG... +PROGRESSBAR_SAVETIFF;Zapisywanie pliku TIFF... +PROGRESSBAR_SNAPSHOT_ADDED;Dodano migawkę +PROGRESSDLG_PROFILECHANGEDINBROWSER;Profil zmieniony w przeglądarce +QINFO_ISO;ISO +QINFO_NOEXIF;Dane Exif niedostępne. +SAVEDLG_AUTOSUFFIX;Automatycznie dodaj przyrostek, jeżeli plik już istnieje +SAVEDLG_FILEFORMAT;Format pliku +SAVEDLG_FORCEFORMATOPTS;Wymuś opcje zapisu +SAVEDLG_JPEGQUAL;Jakość JPEG +SAVEDLG_PNGCOMPR;Kompresja PNG +SAVEDLG_PUTTOQUEUE;Umieść w kolejce przetwarzania +SAVEDLG_PUTTOQUEUEHEAD;Umieść na początku kolejki przetwarzania +SAVEDLG_PUTTOQUEUETAIL;Umieść na końcu kolejki przetwarzania +SAVEDLG_SAVEIMMEDIATELY;Zapisz natychmiast +SAVEDLG_SAVESPP;Zapisz parametry przetwarzania wraz z obrazem +SAVEDLG_SUBSAMP;Subsampling +SAVEDLG_SUBSAMP_1;Najlepsza kompresja +SAVEDLG_SUBSAMP_2;Pomiędzy +SAVEDLG_SUBSAMP_3;Najlepsza jakość +SAVEDLG_TIFFUNCOMPRESSED;Nieskompresowany TIFF +SAVEDLG_WARNFILENAME;Plik zostanie nazwany +SHCSELECTOR_TOOLTIP;Kliknij prawym przyciskiem myszki aby zresetować poycję trzech suwaków. +THRESHOLDSELECTOR_B;Dolny +THRESHOLDSELECTOR_BL;Dolny lewy +THRESHOLDSELECTOR_BR;Dolny prawy +THRESHOLDSELECTOR_HINT;Użyj Shift aby przesuwać poszczególne punkty kontrolne. +THRESHOLDSELECTOR_T;Top +THRESHOLDSELECTOR_TL;Górny lewy +THRESHOLDSELECTOR_TR;Górny prawy +TOOLBAR_TOOLTIP_CROP;Kadruj.\nSkrót: c\nMożna przesuwać obszar kadrowania za pomocą Shift-przeciągnięcia myszki +TOOLBAR_TOOLTIP_HAND;Przesuń.\nSkrót: h +TOOLBAR_TOOLTIP_STRAIGHTEN;Wyprostuj / obróć.\nSkrót: s\n\nWyznacz pionową lub poziomą poprzez narysowanie linii prowadnicy na podglądzie. Kąt obrotu zostanie pokazany obok linii prowadnicy. Punktem obrotu jest geometryczny środek obrazu. +TOOLBAR_TOOLTIP_WB;Wskaż balans bieli.\nSkrót: w +TP_BWMIX_ALGO;Алгоритм PZCRM +TP_BWMIX_ALGO_LI;Liniowy +TP_BWMIX_ALGO_SP;Efekty specjalne +TP_BWMIX_ALGO_TOOLTIP;Liniowy: mieszanie kanałów liniowo.\nEfekty specjalne: kanały zostaną mieszane nieliniowo. +TP_BWMIX_AUTOCH;Auto +TP_BWMIX_CC_ENABLED;Dopasuj barwy dopełniające +TP_BWMIX_CC_TOOLTIP;Włącz aby umożliwić automatyczne dopasowanie barw dopełniających w trybie CPŻZCNPM. +TP_BWMIX_CHANNEL;Ekwalizator люмінації +TP_BWMIX_CURVEEDITOR1;Крива 'Przed' +TP_BWMIX_CURVEEDITOR2;Крива 'Po' +TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Крива po konwersji obrazu na czarnobiały. +TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Крива przed konwersją obrazu na czarnobiały.\nWspółczynniki koloru mogą mieć wpływ. +TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Світність według odcieni (hue) L=f(H).\nNależy zwrócić uwagę na ekstremalne ustawienia ponieważ mogą pojawić się zniekształcenia sygnału w obrazie. +TP_BWMIX_FILTER;Filtr barwny +TP_BWMIX_FILTER_BLUE;Синій +TP_BWMIX_FILTER_BLUEGREEN;Синій-Зелений +TP_BWMIX_FILTER_GREEN;Зелений +TP_BWMIX_FILTER_GREENYELLOW;Зелений-Жовтий +TP_BWMIX_FILTER_NONE;Brak +TP_BWMIX_FILTER_PURPLE;Пурпуровий +TP_BWMIX_FILTER_RED;Червоний +TP_BWMIX_FILTER_REDYELLOW;Червоний-Жовтий +TP_BWMIX_FILTER_TOOLTIP;Filtr barwny symuluje działanie prawdziwego filtru barwnego usytuowanego przed obiektywem. Filtry barwne obniżają transmitancję specyficznych kolorów a zatem mają wpływ na ich jasność, np. filtr Червоний przyciemnia Синійe niebo. +TP_BWMIX_FILTER_YELLOW;Жовтий +TP_BWMIX_GAMMA;Корекція гами +TP_BWMIX_GAM_TOOLTIP;Корекція для каналів RGB. +TP_BWMIX_LABEL;Чорно-білий +TP_BWMIX_MET;Метод +TP_BWMIX_MET_CHANMIX;Міксер каналів +TP_BWMIX_MET_DESAT;Знебарвлення +TP_BWMIX_MET_LUMEQUAL;Ekwalizator люмінації +TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% Total: %4%% +TP_BWMIX_RGBLABEL_HINT;Ostateczne wartości RGB które uwzględniają wszystkie opcje mieszacza.\n"Total" wyświetla sumę wartości RGB:\n- zawsze 100% w trybie relatywnym,\n- ponad (jaśniej) lub poniżej (ciemniej) 100% w trybie absolutnym. +TP_BWMIX_RGB_TOOLTIP;Miesza kanały RGB. Kieruj się gotowymi ustawieniami.\nNależy zwrócić uwagę na ujemne wartości ponieważ mogą pojawić się zniekształcenia sygnału w obrazie lub działać w sposób nieprzewidywalny. +TP_BWMIX_SETTING;Gotowe ustawienia +TP_BWMIX_SETTING_TOOLTIP;Różne gotowe ustawienia (klisza, krajobraz, etc.) oraz ręcznie ustawienia mieszacza kanałów. +TP_BWMIX_SET_HIGHCONTAST;Високий контраст +TP_BWMIX_SET_HIGHSENSIT;Висока чутливість +TP_BWMIX_SET_HYPERPANCHRO;Гіпер панхроматичний +TP_BWMIX_SET_INFRARED;Інфрачервоний +TP_BWMIX_SET_LANDSCAPE;Горизонтально +TP_BWMIX_SET_LOWSENSIT;Низька чутливість +TP_BWMIX_SET_LUMINANCE;Світність +TP_BWMIX_SET_NORMCONTAST;Нормальний контраст +TP_BWMIX_SET_ORTHOCHRO;Ортохроматично +TP_BWMIX_SET_PANCHRO;Панхроматично +TP_BWMIX_SET_PORTRAIT;Вертикально +TP_BWMIX_SET_RGBABS;Абсолютний RGB +TP_BWMIX_SET_RGBREL;Відносний RGB +TP_BWMIX_SET_ROYGCBPMABS;Абсолютний ROYGCBPMABS +TP_BWMIX_SET_ROYGCBPMREL;Відносний ROYGCBPMABS +TP_BWMIX_TCMODE_FILMLIKE;B&W Klisza +TP_BWMIX_TCMODE_SATANDVALBLENDING;B&W Mieszanie Nasycenia i Mocy Światła Białego +TP_BWMIX_TCMODE_STANDARD;B&W Standardowa +TP_BWMIX_TCMODE_WEIGHTEDSTD;B&W Ważona Standardowa +TP_BWMIX_VAL;L +TP_CACORRECTION_BLUE;Синій +TP_CACORRECTION_LABEL;Korekcja aberracji chromatycznej +TP_CACORRECTION_RED;Червоний +TP_CHMIXER_BLUE;Синій +TP_CHMIXER_GREEN;Зелений +TP_CHMIXER_LABEL;Mieszacz kanałów +TP_CHMIXER_RED;Червоний +TP_CHROMATABERR_LABEL;Aberracja chromatyczna +TP_COARSETRAF_TOOLTIP_HFLIP;Odbij w poziomie +TP_COARSETRAF_TOOLTIP_ROTLEFT;Obróć w lewo.\n\nSkróty:\n[ - Tryb wielu zakładek,\nAlt-[ - Tryb jednej zakładki. +TP_COARSETRAF_TOOLTIP_ROTRIGHT;Obróć w prawo.\n\nSkróty:\n] - Tryb wielu zakładek,\nAlt-] - Tryb jednej zakładki. +TP_COARSETRAF_TOOLTIP_VFLIP;Odbij w pionie +TP_COLORAPP_ADAPTSCENE;люмінації sceny +TP_COLORAPP_ADAPTSCENE_TOOLTIP;Bezwzględna Світність sceny (cd/m²).\n1)Obliczona za pomocą Exif:\nCzas naświetlania - ISO - Przysłona - Korekcja ekspozycji EV w aparacie.\n2)Obliczona również na podstawie punktu bieli raw oraz korekty ekspozycji w RawTherapee +TP_COLORAPP_ADAPTVIEWING;люмінації widowni (cd/m²) +TP_COLORAPP_ADAPTVIEWING_TOOLTIP;Bezwzględna Світність widowni\n(zazwyczaj 16cd/m²). +TP_COLORAPP_ADAP_AUTO_TOOLTIP;Jesli zaznaczone (polecamy), RawTherapee obliczy optymalną wartość na podstawie Exif.\nAby ustawic wartość ręcznie, należy wpierw odznaczyc pudło. +TP_COLORAPP_ALGO;Алгоритм +TP_COLORAPP_ALGO_ALL;Wszystkie +TP_COLORAPP_ALGO_JC;Światłość + Chroma (JC) +TP_COLORAPP_ALGO_JS;Światłość + Nasycenie (JS) +TP_COLORAPP_ALGO_QM;Jasność + Barwistość (QM) +TP_COLORAPP_ALGO_TOOLTIP;Umożliwia wybór wszystkich parametrów lub ich podzespół. +TP_COLORAPP_BADPIXSL;Filtr pikseli gorących/uszkodzonych +TP_COLORAPP_BADPIXSL_TOOLTIP;Usuwanie gorących/uszkodzonych (świecących) pikseli.\n0 = Wyłączone\n1 = Metodą Mediana\n2 = Metodą Gaussa.\nMożna również dostroić zdjęcie tak, aby unikać bardzo ciemnych miejsc.\n\nTe anomalie wynikają z limitacji CIECAM02. +TP_COLORAPP_BRIGHT;Jasność (Q) +TP_COLORAPP_BRIGHT_TOOLTIP;Jasność w CIECAM02 bierze pod uwagę luminancję bieli i różni się od jasności L*a*b* oraz RGB. +TP_COLORAPP_CHROMA;Chroma (C) +TP_COLORAPP_CHROMA_M;Barwistość (M) +TP_COLORAPP_CHROMA_M_TOOLTIP;Barwistość w CIECAM02 różni się od barwistości L*a*b* oraz RGB. +TP_COLORAPP_CHROMA_S;Nasycenie (S) +TP_COLORAPP_CHROMA_S_TOOLTIP;Nasycenie w CIECAM02 różni się od nasycenia L*a*b* oraz RGB. +TP_COLORAPP_CHROMA_TOOLTIP;Chroma w CIECAM02 różni się od chromy L*a*b* oraz RGB. +TP_COLORAPP_CIECAT_DEGREE;Adaptacja CAT02 +TP_COLORAPP_CONTRAST;Контраст (J) +TP_COLORAPP_CONTRAST_Q;Контраст (Q) +TP_COLORAPP_CONTRAST_Q_TOOLTIP;Контраст w CIECAM02 dla suwaka Q różni się od Контрастu L*a*b* oraz RGB. +TP_COLORAPP_CONTRAST_TOOLTIP;Контраст w CIECAM02 dla suwaka J różni się od Контрастu L*a*b* oraz RGB. +TP_COLORAPP_CURVEEDITOR1;Крива тональна 1 +TP_COLORAPP_CURVEEDITOR1_TOOLTIP;Pokazuje histogram L* (L*a*b*) przed CIECAM02.\nJeśli opcja "Pokaż histogramy wyjściowe CIECAM02 za krzywymi" jest włączona, pokazuje histogram J i Q po CIECAM02.\n\nJ i Q nie są pokazywane w głównym histogramie.\n\nEfekt końcowy jest przedstawiony w głównym histogramie. +TP_COLORAPP_CURVEEDITOR2;Крива тональна 2 +TP_COLORAPP_CURVEEDITOR2_TOOLTIP;Tak samo działa jak Крива тональна 1. +TP_COLORAPP_CURVEEDITOR3;Крива koloru +TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Ustawienie chromy, nasycenia bądź barwistości.\n\nPokazuje histogram chromatyczności (L*a*b*) przed CIECAM02.\nJeśli opcja "Pokaż histogramy wyjściowe CIECAM02 za krzywymi" jest włączona, pokazuje histogram C, s bądź M po CIECAM02.\n\nC, s oraz M nie są pokazywane w głównym histogramie.\nEfekt końcowy jest przedstawiony w głównym histogramie. +TP_COLORAPP_DATACIE;Pokaż histogramy wyjściowe CIECAM02 za krzywymi +TP_COLORAPP_DATACIE_TOOLTIP;Kiedy opcja jest włączona, histogramy za krzywymi CIECAM02 pokazują przybliżone wartości/zakresy J lub Q, oraz C, s lub M po korekcjach CIECAM02.\nTen wybór nie ma wpływu na główny histogram.\n\nKiedy opcja jest wyłączona, histogramy za krzywymi CIECAM02 pokazują wartości L*a*b* przed korekcjami CIECAM02. +TP_COLORAPP_DEGREE_AUTO_TOOLTIP;Jeśli opcja jest zaznaczona (zalecane), RawTherapee kalkuluje wartość optymalną, która jest potem użyta przez CAT02 oraz przez całość CIECAM02.\nAby ustawić wartość ręcznie, odznacz wpierw opcję (wartości powyżej 65 zalecane). +TP_COLORAPP_DEGREE_TOOLTIP;Siła CIE Chromatic Adaptation Transform 2002 +TP_COLORAPP_GAMUT;Kontrola gamma (L*a*b*). +TP_COLORAPP_GAMUT_TOOLTIP;Włącz kontrolę gamma w trybie L*a*b*. +TP_COLORAPP_HUE;Відтінок (hue, h) +TP_COLORAPP_HUE_TOOLTIP;Відтінок (hue, h) - kąt pomiędzy 0° a 360°. +TP_COLORAPP_LABEL;CIE Color Appearance Model 2002 +TP_COLORAPP_LABEL_CAM02;Ustawienia Obrazu +TP_COLORAPP_LABEL_SCENE;Ustawienia Sceny +TP_COLORAPP_LABEL_VIEWING;Własności Widowni +TP_COLORAPP_LIGHT;Światłość (J) +TP_COLORAPP_LIGHT_TOOLTIP;Światłość w CIECAM02 różni się od światłości CIELab oraz RGB +TP_COLORAPP_MODEL;Model PB +TP_COLORAPP_MODEL_TOOLTIP;Model punktu bieli.\n\nBB [RT] + [wyjściowy]:\nBalans bieli RawTherapee jest użyty dla sceny, CIECAM02 jest ustawione na D50, i balans bieli urządzenia wyjściowego ustawiony jest w Ustawieniach > Zarządzanie Kolorami\n\nBB [RT+CAT02] + [wyjściowe]:\nUstawienia balansu bieli RawTherapee są używane przez CAT02, i balans bieli urządzenia wyjściowego jest ustawione w Ustawieniach > Zarządzanie Kolorami. +TP_COLORAPP_RSTPRO;Ochrona odcieni skóry i czerwieni +TP_COLORAPP_RSTPRO_TOOLTIP;Ochrona odcieni skóry i czerwieni (suwaki i krzywe) +TP_COLORAPP_SHARPCIE;- +TP_COLORAPP_SHARPCIE_TOOLTIP;- +TP_COLORAPP_SURROUND;Otoczenie +TP_COLORAPP_SURROUND_AVER;Średnie +TP_COLORAPP_SURROUND_DARK;Ciemne +TP_COLORAPP_SURROUND_DIM;Przyćmione +TP_COLORAPP_SURROUND_EXDARK;Bardzo Ciemne (Cut-sheet) +TP_COLORAPP_SURROUND_TOOLTIP;Zmienia barwy i kolory aby wziąć pod uwagę własności widowni urządzenia wyjściowego.\n\nŚrednie:\nŚrednie światło otoczenia (standardowe). Obraz się nie zmieni.\n\nPrzyćmione:\nPrzyćmione otoczenie (TV). Obraz stanie się troszkę ciemniejszy.\n\nCiemne:\nCiemne otoczenie (projektor). Obraz stanie się jeszczę ciemniejszy.\n\nBardzo Ciemne:\nBardzo ciemne otoczenie (cut-sheet). Obraz stanie się bardzo ciemny. +TP_COLORAPP_SURSOURCE;Ciemne otoczenie +TP_COLORAPP_SURSOURCE_TOOLTIP;Można użyć kiedy np. obraz wejściowy ma ciemne krawędzie. +TP_COLORAPP_TCMODE_BRIGHTNESS;Jasność +TP_COLORAPP_TCMODE_CHROMA;Chroma +TP_COLORAPP_TCMODE_COLORF;Barwistość +TP_COLORAPP_TCMODE_LABEL1;Tryb krzywej 1 +TP_COLORAPP_TCMODE_LABEL2;Tryb krzywej 2 +TP_COLORAPP_TCMODE_LABEL3;Tryb krzywej chromy +TP_COLORAPP_TCMODE_LIGHTNESS;Światłość +TP_COLORAPP_TCMODE_SATUR;Nasycenie +TP_COLORAPP_TONECIE;Tone mapping za pomocą jasności CIECAM02 (Q) +TP_COLORAPP_TONECIE_TOOLTIP;Jeśli ta opcja jest wyłączona, tone mapping odbywa się w przestrzeni kolorów L*a*b*, zaś jeśli jest włączona, w przestrzeni kolorów CIECAM02.\nNarzędzie Tone Mapping musi być włączone aby to utawienie działało. +TP_COLORAPP_WBCAM;BB [RT+CAT02] + [wyjściowy] +TP_COLORAPP_WBRT;BB [RT] + [wyjściowy] +TP_COLORTONING_AB;o C/L +TP_COLORTONING_AUTOSAT;Automatyczna +TP_COLORTONING_BALANCE;Balans +TP_COLORTONING_BY;o C/L +TP_COLORTONING_CHROMAC;Przezroczystość +TP_COLORTONING_COLOR;Kolor +TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP;Przezroczystość chromy według люмінації oC=f(L) +TP_COLORTONING_HIGHLIGHT;Podświetlenia +TP_COLORTONING_HUE;Відтінок (hue) +TP_COLORTONING_LAB;Mieszanie L*a*b* +TP_COLORTONING_LABEL;Koloryzacja +TP_COLORTONING_LUMA;Світність +TP_COLORTONING_LUMAMODE;Zachowaj luminancję +TP_COLORTONING_LUMAMODE_TOOLTIP;Світність zostanie zachowana przy zmianie kolorów. +TP_COLORTONING_METHOD;Metoda +TP_COLORTONING_METHOD_TOOLTIP;"Mieszanie L*a*b*", "Suwaki RGB" oraz "Krzywe RGB" stosują interpolację do mieszania kolorów.\n"Balansowanie kolorów (cienie, półcienie, podświetlenia)" oraz "Nasycenie - Dwa Kolory" stosują kolory bezpośrednio.\n\nNarzędzie "Czarno-białe" można używac jednocześnie z narzędziem "Koloryzacji", co umożliwi tonowanie zdjęcia. +TP_COLORTONING_MIDTONES;Półcienie +TP_COLORTONING_NEUTRAL;Zresetuj suwaki +TP_COLORTONING_NEUTRAL_TIP;Zresetuj wszystkie wartości (cienie, półcienie, podświetlenia) na domyślne. +TP_COLORTONING_OPACITY;Przezroczystość +TP_COLORTONING_RGBCURVES;RGB - Krzywe +TP_COLORTONING_RGBSLIDERS;RGB - Suwaki +TP_COLORTONING_SA;Ochrona przed przesyceniem +TP_COLORTONING_SATURATEDOPACITY;Śiła +TP_COLORTONING_SATURATIONTHRESHOLD;Próg +TP_COLORTONING_SHADOWS;Cienie +TP_COLORTONING_SPLITCO;Cienie/półcienie/podświetlenia +TP_COLORTONING_SPLITCOCO;Balans kolorów - cienie/półcienie/podświetlenia +TP_COLORTONING_SPLITLR;Nasycenie - dwa kolory +TP_COLORTONING_STR;Siła +TP_COLORTONING_STRENGTH;Siła +TP_COLORTONING_TWO2;Specjalna chroma 'dwa kolory' +TP_COLORTONING_TWOALL;Specjalna chroma +TP_COLORTONING_TWOBY;Specjalne a* i b* +TP_COLORTONING_TWOCOLOR_TOOLTIP;Standardowa chroma:\nLiniowe mieszanie kanałów, a* = b*.\n\nSpecjalna chroma:\nLiniowe mieszanie kanałów, a* = b*, ale nieograniczone - spróbuj krzywą zagiąc pod przekątną.\n\nSpecialne a* i b*:\nLiniowe nieograniczone mieszanie kanałów z osobnymi krzywymi dla a* i b*. Przeznaczone dla efektów specjalnych.\n\nSpecjalna chroma - dwa kolory:\nBardziej nieprzewidywalne. +TP_COLORTONING_TWOSTD;Standardowa chroma +TP_CROP_FIXRATIO;Zablokuj proporcje +TP_CROP_GTDIAGONALS;Przekątna +TP_CROP_GTEPASSPORT;Paszport biometryczny +TP_CROP_GTFRAME;Ramka +TP_CROP_GTGRID;Siatka +TP_CROP_GTNONE;Nic +TP_CROP_GTRULETHIRDS;Trójpodział +TP_CROP_GUIDETYPE;Typ pomocy: +TP_CROP_H;Wysokość +TP_CROP_LABEL;Kadrowanie +TP_CROP_PPI;PPI= +TP_CROP_SELECTCROP;Wybierz kadr +TP_CROP_W;Szerokość +TP_CROP_X;X +TP_CROP_Y;Y +TP_DARKFRAME_AUTOSELECT;Autowybór +TP_DARKFRAME_LABEL;Czarna klatka +TP_DEFRINGE_LABEL;Usuwanie widma +TP_DEFRINGE_RADIUS;Promień +TP_DEFRINGE_THRESHOLD;Próg +TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Chrominancja - Błękit-żółć +TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominancja - Główna +TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;Chrominancja - Czerwień-zieleń +TP_DIRPYRDENOISE_ENH;Tryb ulepszony +TP_DIRPYRDENOISE_ENH_TOOLTIP;Ulepsza jakość usuwania szumów kosztem około 20% wzrostu czasu przetwarzania. +TP_DIRPYRDENOISE_LUMINANCE_CURVE;Крива люмінації +TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Szczegółowość люмінації +TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminacja +TP_DIRPYRDENOISE_MAIN_COLORSPACE;Metoda +TP_DIRPYRDENOISE_MAIN_COLORSPACE_LABEL;Redukcja szumu +TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB +TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;Dla obrazów raw można używać metody RGB oraz L*a*b*.\n\nDla obrazów nie-raw metoda L*a*b* zostanie użyta niezależnie od wyboru. +TP_DIRPYRDENOISE_MAIN_GAMMA;Gamma +TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Gamma skupia siłę redukcji szumów na danym predziale zakresu tonalnego. Mniejsze wartości gamma powodują skupienie na ciemniejszych barwach, natomiast większe wartości rozciągną zakres działania również na barwy jasne. +TP_DIRPYRDENOISE_MAIN_MODE;Jakość +TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Wysoka +TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Standardowa +TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;Jakość może zostać dopasowana do wzoru szumów. Ustawienie "wysoka" ulepsza odszumianie około 20% wzrostu czasu przetwarzania. +TP_DIRPYRDENOISE_MEDIAN_METHOD;Metoda mediana +TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b* +TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Filtr Mediana +TP_DIRPYRDENOISE_MEDIAN_METHOD_LUMINANCE;Tylko Світність +TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB +TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;Przy użyciu metod "tylko Світність" oraz "L*a*b*", filtrowanie mediana zostanie wykonane prosto po funkcji falki w procesie odszumiania.\nW trybie "RGB" filtrowanie to zostanie wykonana pod koniec calego procesu. +TP_DIRPYRDENOISE_MEDIAN_PASSES;Liczba powtórzeń mediana +TP_DIRPYRDENOISE_MEDIAN_TYPE;Rodzaj mediana +TP_DIRPYREQUALIZER_ALGO;Zakres odcieni skóry +TP_DIRPYREQUALIZER_ALGO_TOOLTIP;- +TP_DIRPYREQUALIZER_HUESKIN;Відтінок skóry +TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;Piramida wyznacza zakres kolorów uważany jako zakres odcieni skóry. Większość odcieni skóry - białej, czarnej, i pomiędzy - ma tę samą Відтінок. Małe poprawki są dopuszczalne, jednak jeśli potrzebna jest większa zmiana w lewo lub prawo, lub jeśli są widoczne artefakty, to najprawdopobniej balans bieli jest niepoprawny. +TP_DIRPYREQUALIZER_LABEL;Контраст wg. precyzji detali +TP_DIRPYREQUALIZER_LUMACOARSEST;Zgrubne +TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Контраст- +TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Контраст+ +TP_DIRPYREQUALIZER_LUMAFINEST;Delikatne +TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutralne +TP_DIRPYREQUALIZER_SKIN;Ochrona/celowanie odcieni skóry +TP_DIRPYREQUALIZER_SKIN_TOOLTIP;Przy -100 oddziaływanie efektu odbywa się wyłącznie na odcieniach skóry.\nPrzy 0 oddziaływanie efektu odbywa się jednakowo na wszystkich odcieniach.\nPrzy +100 odcienie skóry są pomijane podczas gdy oddziaływanie odbywa się na wszystkich pozostałych odcieniach. +TP_DIRPYREQUALIZER_THRESHOLD;Próg +TP_DIRPYREQUALIZER_TOOLTIP;Zapobiega artefaktom w strefach przejścia pomiędzy odcieniom skóry (hue, chrominancja, Світність) a pozostałym odcieniom. +TP_DISTORTION_AMOUNT;Siła +TP_DISTORTION_LABEL;Dystorsja +TP_EPD_EDGESTOPPING;Wyszukiwanie krawędzi +TP_EPD_LABEL;Tone Mapping +TP_EPD_REWEIGHTINGITERATES;Powtarzanie rozważania +TP_EPD_SCALE;Skala +TP_EPD_STRENGTH;Siła +TP_EPD_TOOLTIP;Tone mapping może się odbyć w przestrzeni kolorów L*a*b* (domyślnie) oraz CIECAM02.\n\nAby wykonać tone mapping w przestrzeni CIECAM02 należy włączyć następujące ustawienia:\n1. CIECAM02\n2. Алгоритм="Jasność + Barwistość (QM)"\n3. "Tone mapping za pomocą jasności CIECAM02 (Q)" +TP_EXPOSURE_AUTOLEVELS;Wyrównaj poziomy +TP_EXPOSURE_AUTOLEVELS_TIP;Dokonaj automatycznego ustawienia parametrów ekspozycji na podstawie analizy obrazu +TP_EXPOSURE_BLACKLEVEL;Czerń +TP_EXPOSURE_BRIGHTNESS;Jasność +TP_EXPOSURE_CLIP;Przytnij % +TP_EXPOSURE_CLIP_TIP;Ułamek pikseli ktore mają zostać rozjaśnione do punktu prześwietlenia podczas automatycznego wyrównania poziomów. +TP_EXPOSURE_COMPRHIGHLIGHTS;Kompresja podświetleń +TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Próg kompresji podświetleń +TP_EXPOSURE_COMPRSHADOWS;Kompresja cieni +TP_EXPOSURE_CONTRAST;Контраст +TP_EXPOSURE_CURVEEDITOR;Крива тональна +TP_EXPOSURE_CURVEEDITOR1;Крива тональна 1 +TP_EXPOSURE_CURVEEDITOR2;Крива тональна 2 +TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Więcej informacji na temat optymalnego wykorzystania obu krzywych jest dostępne w podręczniku (RawTherapee Manual) w dziale:\nThe Toolbox > Exposure Tab > Exposure Panel > Tone Curve\n(Narzędzie > Zakładka Ekspozycji > Krzywe Tonalne) +TP_EXPOSURE_EXPCOMP;Korekcja ekspozycji (EV) +TP_EXPOSURE_LABEL;Ekspozycja +TP_EXPOSURE_SATURATION;Nasycenie +TP_EXPOSURE_TCMODE_FILMLIKE;Klisza +TP_EXPOSURE_TCMODE_LABEL1;Tryb krzywej 1 +TP_EXPOSURE_TCMODE_LABEL2;Tryb krzywej 2 +TP_EXPOSURE_TCMODE_SATANDVALBLENDING;Mieszanie nasycenia i mocy światła białego +TP_EXPOSURE_TCMODE_STANDARD;Standardowa +TP_EXPOSURE_TCMODE_WEIGHTEDSTD;Ważona standardowa +TP_EXPOS_BLACKPOINT_LABEL;Punkt czerni raw +TP_EXPOS_WHITEPOINT_LABEL;Punkt bieli raw +TP_FILMSIMULATION_LABEL;Symulacja Kliszy +TP_FILMSIMULATION_STRENGTH;Siła +TP_FILMSIMULATION_ZEROCLUTSFOUND;Ustaw folder HaldCLUT w Ustawieniach +TP_FLATFIELD_AUTOSELECT;Autowybór +TP_FLATFIELD_BLURRADIUS;Promień rozmycia +TP_FLATFIELD_BLURTYPE;Typ rozmycia +TP_FLATFIELD_BT_AREA;Obszar +TP_FLATFIELD_BT_HORIZONTAL;Poziomy +TP_FLATFIELD_BT_VERTHORIZ;Poziomy + pionowy +TP_FLATFIELD_BT_VERTICAL;Pionowy +TP_FLATFIELD_CLIPCONTROL;Zabezpieczenie przed obcinaniem +TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Funkcja ta chroni przed obcinaniem podświetleń które może zaistnieć przy stosowaniu obrazów type "puste pole". Należy zachować ostrożność, ponieważ jeśli obcięte rejony istnieją przed zastosowaniem pustego pola, funkcja ta może spowodować zabarwienie tych rejonów które powinny być białe. +TP_FLATFIELD_LABEL;Puste pole +TP_GAMMA_CURV;Gamma +TP_GAMMA_FREE;Dowolna gamma +TP_GAMMA_OUTPUT;Wyjściowa gamma +TP_GAMMA_SLOP;Nachylenie (liniowy) +TP_GENERAL_11SCALE_TOOLTIP;Efekty tego narzędzia są widoczne bądź poprawne przy przybliżeniu 100% lub więcej. +TP_GRADIENT_CENTER;Środek +TP_GRADIENT_CENTER_X;Środek X +TP_GRADIENT_CENTER_X_TOOLTIP;Przesuń filtr do lewej (ujemne wartości) lub prawej (dodatne wartości). +TP_GRADIENT_CENTER_Y;Środek Y +TP_GRADIENT_CENTER_Y_TOOLTIP;Przesuń filtr do góry (ujemne wartości) lub do dołu (dodatne wartości). +TP_GRADIENT_DEGREE;Kąt +TP_GRADIENT_DEGREE_TOOLTIP;Kąt obrotu filtra w stopniach. +TP_GRADIENT_FEATHER;Wtapianie +TP_GRADIENT_FEATHER_TOOLTIP;Szerokośc nachylenia zbocza w procentach przekątnej. +TP_GRADIENT_LABEL;Filtr Połówkowy +TP_GRADIENT_STRENGTH;Siła +TP_GRADIENT_STRENGTH_TOOLTIP;Śiła filtru w jednostkach EV. +TP_HLREC_BLEND;Mieszanie +TP_HLREC_CIELAB;Mieszanie koloru CIELab +TP_HLREC_COLOR;Propagacja koloru +TP_HLREC_ENA_TOOLTIP;Może zostać automatycznie włączone w skutek działania automatycznej ekspozycji +TP_HLREC_LABEL;Odzyskiwanie prześwietleń +TP_HLREC_LUMINANCE;Odzyskiwanie люмінації +TP_HLREC_METHOD;Metoda: +TP_HSVEQUALIZER_CHANNEL;Kanał +TP_HSVEQUALIZER_HUE;H +TP_HSVEQUALIZER_LABEL;Ekwalizator HSV +TP_HSVEQUALIZER_SAT;S +TP_HSVEQUALIZER_VAL;V +TP_ICM_BLENDCMSMATRIX;Tłumienie prześwietleń danymi z matrycy +TP_ICM_BLENDCMSMATRIX_TOOLTIP;Włącz odzyskiwanie prześwietlonych regionow jesli profil ICC wykorzystuje LUT (tablicowanie). +TP_ICM_DCPILLUMINANT;Iluminant +TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolowany +TP_ICM_DCPILLUMINANT_TOOLTIP;Wybierz który osadzony iluminant DCP należy użyć. Domyślną opcją jest "interpolowany", czyli wartość jest mieszaniną pomiędzy dwoma osadzonymi wartościami iluminantu zależnie od balansu bieli. Ten wybór jest możliwy jedynie kiedy DCP zawiera dwa iluminanty z możliwościa interpolacji. +TP_ICM_INPUTCAMERA;Domyślny aparatu +TP_ICM_INPUTCAMERAICC;Domyślny aparatu lub ICC +TP_ICM_INPUTCAMERAICC_TOOLTIP;Uzyj profil ICC stworzony specjalnie na potrzeby RawTherapee. Jest bardziej dokładny niż domyślny matrycowy profil ICC, lecz dostępny tylko dla niektórych aparatów. +TP_ICM_INPUTCAMERA_TOOLTIP;Użyj prostej domyślnej matrycy kolorów z DCRAW bądź zapisanej w DNG. +TP_ICM_INPUTCUSTOM;Własny +TP_ICM_INPUTCUSTOM_TOOLTIP;Wczytaj własny profil ICC z pliku. +TP_ICM_INPUTDLGLABEL;Wybierz wejściowy profil ICC... +TP_ICM_INPUTEMBEDDED;Jeśli to możliwe, użyj osadzonego +TP_ICM_INPUTEMBEDDED_TOOLTIP;Użyj profil ICC zapisany w plikach innych niż raw. +TP_ICM_INPUTNONE;Bez profilu +TP_ICM_INPUTNONE_TOOLTIP;Nie używaj żadnego profilu kolorów. Pożyteczne jedynie w wyjątkowych przypadkach. +TP_ICM_INPUTPROFILE;Profil wejściowy +TP_ICM_LABEL;ICM +TP_ICM_NOICM;Brak ICM: Wyjście sRGB +TP_ICM_OUTPUTPROFILE;Profil wyjściowy +TP_ICM_SAVEREFERENCE_TOOLTIP;Zapisz liniowy obraz TIFF zanim profil wejściowy zostanie zastosowany. Obraz ten można użyć do kalibracji oraz do wytworzenia profilu aparatu. +TP_ICM_TONECURVE;Użyj krzywą tonalną z DCP +TP_ICM_TONECURVE_TOOLTIP;Włącz aby użyć krzywą tonalną znajdującą się w profilu DCP. Opcja ta jest tylko aktywna jeśli profil DCP zawiera krzywą tonalną. +TP_ICM_WORKINGPROFILE;Profil roboczy +TP_IMPULSEDENOISE_LABEL;Redukcja Szumów Impulsowych +TP_IMPULSEDENOISE_THRESH;Próg +TP_LABCURVE_AVOIDCOLORSHIFT;Zapobiegaj zmianom koloru +TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Umieszcza kolory w gamie roboczej przestrzeni kolorów i stosuje korektę Munsell'a +TP_LABCURVE_BRIGHTNESS;Światłość +TP_LABCURVE_CHROMATICITY;Chromatyczność +TP_LABCURVE_CHROMA_TOOLTIP;Aby zastosować tonowanie zdjęcia B&W, ustaw chromatyczność na -100. +TP_LABCURVE_CONTRAST;Контраст +TP_LABCURVE_CURVEEDITOR;Крива luminacji +TP_LABCURVE_CURVEEDITOR_A_RANGE1;Zielone Nasycone +TP_LABCURVE_CURVEEDITOR_A_RANGE2;Zielone Pastelowe +TP_LABCURVE_CURVEEDITOR_A_RANGE3;Czerwone Pastelowe +TP_LABCURVE_CURVEEDITOR_A_RANGE4;Czerwone Nasycone +TP_LABCURVE_CURVEEDITOR_B_RANGE1;Синійe Nasycone +TP_LABCURVE_CURVEEDITOR_B_RANGE2;Синійe Pastelowe +TP_LABCURVE_CURVEEDITOR_B_RANGE3;Żółte Pastelowe +TP_LABCURVE_CURVEEDITOR_B_RANGE4;Żółte Nasycone +TP_LABCURVE_CURVEEDITOR_CC;CC +TP_LABCURVE_CURVEEDITOR_CC_RANGE1;Neutralne +TP_LABCURVE_CURVEEDITOR_CC_RANGE2;Mętne +TP_LABCURVE_CURVEEDITOR_CC_RANGE3;Pastelowe +TP_LABCURVE_CURVEEDITOR_CC_RANGE4;Nasycone +TP_LABCURVE_CURVEEDITOR_CC_TOOLTIP;Chromatyczność według chromatyczności C=f(C). +TP_LABCURVE_CURVEEDITOR_CH;CH +TP_LABCURVE_CURVEEDITOR_CH_TOOLTIP;Chromatyczność według odcieni (hue) C=f(H) +TP_LABCURVE_CURVEEDITOR_CL;CL +TP_LABCURVE_CURVEEDITOR_CL_TOOLTIP;Chromatyczność według люмінації C=f(L) +TP_LABCURVE_CURVEEDITOR_HH;HH +TP_LABCURVE_CURVEEDITOR_HH_TOOLTIP;Відтінок (hue) według odcieni H=f(H) +TP_LABCURVE_CURVEEDITOR_LC;LC +TP_LABCURVE_CURVEEDITOR_LC_TOOLTIP;Світність według chromatyczności L=f(C) +TP_LABCURVE_CURVEEDITOR_LH;LH +TP_LABCURVE_CURVEEDITOR_LH_TOOLTIP;Luminance według odcieni (hue) L=f(H) +TP_LABCURVE_CURVEEDITOR_LL_TOOLTIP;Світність według люмінації L=f(L) +TP_LABCURVE_LABEL;Regulacja L*a*b* +TP_LABCURVE_LCREDSK;Ogranicz LC do odcieni skóry oraz czerwieni +TP_LABCURVE_LCREDSK_TIP;Kiedy opcja jest włączona, wpływ krzywej LC (Світність według chromatyczności) jest ograniczony do odcieni skóry oraz czerwieni.\nKiedy opcja jest wyłączona, Крива LC wpływa na wszystkie barwy. +TP_LABCURVE_RSTPROTECTION;Ochrona skóry oraz czerwieni +TP_LABCURVE_RSTPRO_TOOLTIP;Ma wpływ na suwak Chromatyczności oraz na krzywą CC. +TP_LENSGEOM_AUTOCROP;Auto-kadrowanie +TP_LENSGEOM_FILL;Auto-wypełnienie +TP_LENSGEOM_LABEL;Obiektyw / Geometria +TP_LENSPROFILE_LABEL;Profil korekcji obiektywu LCP +TP_LENSPROFILE_USECA;Korekja aberacji chromatycznej +TP_LENSPROFILE_USEDIST;Korekcja dystorsji +TP_LENSPROFILE_USEVIGN;Korekcja winietowania +TP_NEUTRAL_TIP;Zresetuj ustawienia do wartości neutralnych.\nDziała na tych samych suwakach na których funkcja "Wyrównaj poziomy" działa, niezależnie od tego czy funkcja ta była użyta czy nie. +TP_PCVIGNETTE_FEATHER;Wtapianie +TP_PCVIGNETTE_FEATHER_TOOLTIP;Wtapianie:\n0 = tylko brzegi,\n50 = w pół drogi do środka,\n100 = aż do środka. +TP_PCVIGNETTE_LABEL;Віньєтування +TP_PCVIGNETTE_ROUNDNESS;Okrągłość +TP_PCVIGNETTE_ROUNDNESS_TOOLTIP;Okrągłość:\n0 = prostokąt,\n50 = dopasowana elipsa,\n100 = okrąg. +TP_PCVIGNETTE_STRENGTH;Śiła +TP_PCVIGNETTE_STRENGTH_TOOLTIP;Siła filtru w kątach w jednostkach EV. +TP_PERSPECTIVE_HORIZONTAL;Pozioma +TP_PERSPECTIVE_LABEL;Perspektywa +TP_PERSPECTIVE_VERTICAL;Pionowa +TP_PFCURVE_CURVEEDITOR_CH;Відтінок +TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Ogranicza natężenie usuwania widma według kolorów.\nWyżej = bardziej,\nNiżej = mniej. +TP_PREPROCESS_DEADPIXFILT;Filtr martwych pikseli +TP_PREPROCESS_DEADPIXFILT_TOOLTIP;Łata martwe piksele (pojedyńcze czarne piksele). +TP_PREPROCESS_GREENEQUIL;Wyrównanie zieleni +TP_PREPROCESS_HOTPIXFILT;Filtr gorących pikseli +TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Łata gorące piksele (pojedyńcze świecące, przesycone piksele). +TP_PREPROCESS_LABEL;Przetwarzanie początkowe +TP_PREPROCESS_LINEDENOISE;Filtr zakłóceń liniowych +TP_PREPROCESS_NO_FOUND;Nic nie znaleziono +TP_RAWCACORR_AUTO;Autokorekcja +TP_RAWCACORR_CABLUE;Синій +TP_RAWCACORR_CARED;Червоний +TP_RAWEXPOS_BLACKS;Poziomy czerni +TP_RAWEXPOS_BLACK_0;Зелений 1 (główny) +TP_RAWEXPOS_BLACK_1;Червоний +TP_RAWEXPOS_BLACK_2;Синій +TP_RAWEXPOS_BLACK_3;Зелений 2 +TP_RAWEXPOS_BLACK_BLUE;Синій +TP_RAWEXPOS_BLACK_GREEN;Зелений +TP_RAWEXPOS_BLACK_RED;Червоний +TP_RAWEXPOS_LINEAR;Liniowy współczynnik korekcji +TP_RAWEXPOS_PRESER;Zachowanie prześwietleń +TP_RAWEXPOS_RGB;Червоний, Зелений, Синій +TP_RAWEXPOS_TWOGREEN;Połącz obie zielenie +TP_RAW_DCBENHANCE;Zastosuj poprawę DCB +TP_RAW_DCBITERATIONS;Liczba powtórzeń DCB +TP_RAW_DMETHOD;Metoda +TP_RAW_DMETHOD_PROGRESSBAR;Demozaikowanie %1... +TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Udoskonalanie demozaikowania... +TP_RAW_DMETHOD_TOOLTIP;IGV oraz LMMSE są przeznaczone dla zdjęć raw o wysokim poziomie szumów (wysokie ISO) aby zapobiec utworzeniu się wzorków w kształcie małych labiryntów, posteryzacji oraz mydlanego wyglądu. +TP_RAW_FALSECOLOR;Kroki zapobiegające fałszowaniu kolorów +TP_RAW_LABEL;Demozaikowanie +TP_RAW_LMMSEITERATIONS;Ilość kroków udoskonalenia LMMSE +TP_RAW_LMMSE_TOOLTIP;Aby zmniejszyć ilość artefaktów i poprawić stosunek sygnału do szumów, można wykorzystać następujące ustawienia:\n1: Gamma\n2-4: Średnia mediana\n5-6: Rafinowanie +TP_RAW_SENSOR_BAYER_LABEL;Matryca z filtrem Bayera +TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;Trzy powtórzenia prowadzą do najlepszych rezultatów (zalecane dla zdjęć o niskim ISO).\nJedno powtórzenie jest prawie nie do odróżnienia od trzech dla zdjęć o wysokim ISO a jest znacznie szybsze. +TP_RAW_SENSOR_XTRANS_LABEL;Matryca z filtrem X-Trans +TP_RESIZE_APPLIESTO;Dotyczy: +TP_RESIZE_CROPPEDAREA;Obszaru kadrowanego +TP_RESIZE_FITBOX;Wymiary obwodu +TP_RESIZE_FULLIMAGE;Całego zdjęcia +TP_RESIZE_H;Wysokość: +TP_RESIZE_HEIGHT;Wysokość +TP_RESIZE_LABEL;Zmiana rozmiaru +TP_RESIZE_LANCZOS;Lanczos +TP_RESIZE_METHOD;Metoda: +TP_RESIZE_NEAREST;Najbliższa +TP_RESIZE_SCALE;Skalę +TP_RESIZE_SPECIFY;Określ: +TP_RESIZE_W;Szerokość +TP_RESIZE_WIDTH;Szerokość +TP_RGBCURVES_BLUE;B +TP_RGBCURVES_CHANNEL;Kanał +TP_RGBCURVES_GREEN;G +TP_RGBCURVES_LABEL;Krzywe RGB +TP_RGBCURVES_LUMAMODE;Tryb люмінації +TP_RGBCURVES_LUMAMODE_TOOLTIP;Tryb люмінації pozwala na zmianę wpływu kanałów R, G i B na luminancję obrazu bez zmian kolorów. +TP_RGBCURVES_RED;R +TP_ROTATE_DEGREE;Stopnie +TP_ROTATE_LABEL;Obrót +TP_ROTATE_SELECTLINE;Wyprostuj obraz +TP_SAVEDIALOG_OK_TIP;Skrót: Ctrl-Enter +TP_SHADOWSHLIGHTS_HIGHLIGHTS;Podświetlenia +TP_SHADOWSHLIGHTS_HLTONALW;Szerokość тональна +TP_SHADOWSHLIGHTS_LABEL;Cienie/Podświetlenia +TP_SHADOWSHLIGHTS_LOCALCONTR;Контраст lokalny +TP_SHADOWSHLIGHTS_RADIUS;Promień +TP_SHADOWSHLIGHTS_SHADOWS;Cienie +TP_SHADOWSHLIGHTS_SHARPMASK;Ostra maska +TP_SHADOWSHLIGHTS_SHTONALW;Szerokość тональна +TP_SHARPENEDGE_AMOUNT;Siła +TP_SHARPENEDGE_LABEL;Krawędzie +TP_SHARPENEDGE_PASSES;Powtórzenia +TP_SHARPENEDGE_THREE;Tylko Світність +TP_SHARPENING_AMOUNT;Siła +TP_SHARPENING_EDRADIUS;Promień +TP_SHARPENING_EDTOLERANCE;Tolerancja krawędzi +TP_SHARPENING_HALOCONTROL;Kontrola poświaty +TP_SHARPENING_HCAMOUNT;Siła +TP_SHARPENING_LABEL;Wyostrzanie +TP_SHARPENING_METHOD;Metoda +TP_SHARPENING_ONLYEDGES;Wyostrz tylko krawędzie +TP_SHARPENING_RADIUS;Promień +TP_SHARPENING_RLD;Dekonwolucja RL +TP_SHARPENING_RLD_AMOUNT;Siła +TP_SHARPENING_RLD_DAMPING;Tłumienie +TP_SHARPENING_RLD_ITERATIONS;Powtórzenia +TP_SHARPENING_THRESHOLD;Próg +TP_SHARPENING_USM;Maska wyostrzająca +TP_SHARPENMICRO_AMOUNT;Siła +TP_SHARPENMICRO_LABEL;MikroКонтраст +TP_SHARPENMICRO_MATRIX;Matryca 3×3 zamiast 5×5 +TP_SHARPENMICRO_UNIFORMITY;Jednolitość +TP_VIBRANCE_AVOIDCOLORSHIFT;Zapobiegaj przesunięcia kolorów +TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH +TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Odcienie skóry +TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1;Czerwone/Purpurowe +TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE2;Czerwone +TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE3;Czerwone/Żółte +TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE4;Żółte +TP_VIBRANCE_CURVEEDITOR_SKINTONES_TOOLTIP;Відтінок (hue) według odcieni H=f(H) +TP_VIBRANCE_LABEL;Світність +TP_VIBRANCE_PASTELS;Odcienie pastelowe +TP_VIBRANCE_PASTSATTOG;Połącz odcienie pastelowe i nasycone +TP_VIBRANCE_PROTECTSKINS;Zachowaj odcienie skóry +TP_VIBRANCE_PSTHRESHOLD;Próg odcieni pastelowych/nasyconych +TP_VIBRANCE_PSTHRESHOLD_SATTHRESH;Próg nasycenia +TP_VIBRANCE_PSTHRESHOLD_TOOLTIP;Oś pionowa odpowiada barwą pastelowym na dole oraz nasyconym na górze.\nOś pozioma przedstawia zakres nasycenia. +TP_VIBRANCE_PSTHRESHOLD_WEIGTHING;Ważenie przejścia barw pastelowych/nasyconych +TP_VIBRANCE_SATURATED;Odcienie nasycone +TP_VIGNETTING_AMOUNT;Ilość +TP_VIGNETTING_CENTER;Środek +TP_VIGNETTING_CENTER_X;Środek X +TP_VIGNETTING_CENTER_Y;Środek Y +TP_VIGNETTING_LABEL;Korekcja winietowania +TP_VIGNETTING_RADIUS;Promień +TP_VIGNETTING_STRENGTH;Siła +TP_WBALANCE_AUTO;Auto +TP_WBALANCE_CAMERA;Z aparatu +TP_WBALANCE_CLOUDY;Pochmurnie +TP_WBALANCE_CUSTOM;Własny +TP_WBALANCE_DAYLIGHT;Światło dzienne (słonecznie) +TP_WBALANCE_EQBLUERED;Ekwalizator niebieskości/czerwieni +TP_WBALANCE_EQBLUERED_TOOLTIP;Pozwala na odchyłkę od typowego użytku balansu bieli poprzez modulację balansu niebieskości/czerwieni.\nJest to przydatne kiedy:\na) warunki miejsca fotografii są oddalone od standardowego iluminantu (światła o określonych parametrach za pomocą którego kalibruje się profil wejściowy aparatu), np. zdjęcia robione pod wodą,\nb) warunki fotografii są oddalone od warunków pod którymi kalibracje zostały wykonane,\nc) macierze oraz profile ICC/DCP są z jakiegos powodu nieodpowiednie. +TP_WBALANCE_FLASH55;Leica +TP_WBALANCE_FLASH60;Standardowe, Canon, Pentax, Olympus +TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta +TP_WBALANCE_FLASH_HEADER;Flash +TP_WBALANCE_FLUO1;F1 - Światło dzienne +TP_WBALANCE_FLUO2;F2 - Chłodne białe +TP_WBALANCE_FLUO3;F3 - Białe +TP_WBALANCE_FLUO4;F4 - Ciepłe białe +TP_WBALANCE_FLUO5;F5 - Światło dzienne +TP_WBALANCE_FLUO6;F6 - Białe Lite +TP_WBALANCE_FLUO7;F7 - D65 Symulator światła dziennego +TP_WBALANCE_FLUO8;F8 - D50 / Sylvania F40 Design +TP_WBALANCE_FLUO9;F9 - Chłodne białe deluxe +TP_WBALANCE_FLUO10;F10 - Philips TL85 +TP_WBALANCE_FLUO11;F11 - Philips TL84 +TP_WBALANCE_FLUO12;F12 - Philips TL83 +TP_WBALANCE_FLUO_HEADER;Jarzeniowe +TP_WBALANCE_GREEN;Відтінок +TP_WBALANCE_GTI;GTI +TP_WBALANCE_HMI;HMI +TP_WBALANCE_JUDGEIII;JudgeIII +TP_WBALANCE_LABEL;Balans bieli +TP_WBALANCE_LAMP_HEADER;Lamp +TP_WBALANCE_LED_CRS;CRS SP12 WWMR16 +TP_WBALANCE_LED_HEADER;LED +TP_WBALANCE_LED_LSI;LSI Lumelex 2040 +TP_WBALANCE_METHOD;Metoda +TP_WBALANCE_SHADE;Ćień +TP_WBALANCE_SIZE;Wielkość: +TP_WBALANCE_SOLUX35;Solux 3500K +TP_WBALANCE_SOLUX41;Solux 4100K +TP_WBALANCE_SOLUX47;Solux 4700K (vendor) +TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) +TP_WBALANCE_SPOTWB;Punktowy +TP_WBALANCE_TEMPERATURE;Temperatura +TP_WBALANCE_TUNGSTEN;Wolfram +TP_WBALANCE_WATER1;Pod wodą 1 +TP_WBALANCE_WATER2;Pod wodą 2 +TP_WBALANCE_WATER_HEADER;Pod wodą +ZOOMPANEL_100;(100%) +ZOOMPANEL_NEWCROPWINDOW;Otwórz (nową) lupę +ZOOMPANEL_ZOOM100;Powiększ do 100%\nSkrót: z +ZOOMPANEL_ZOOMFITCROPSCREEN;Dopasuj kadr do ekranu\nSkrót: f +ZOOMPANEL_ZOOMFITSCREEN;Dopasuj cały obraz do ekranu\nSkrót: Alt-f +ZOOMPANEL_ZOOMIN;Przybliż\nSkrót: + +ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - + +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!ADJUSTER_RESET_TO_DEFAULT;Click - reset to default value.\nCtrl+click - reset to initial value. +!BATCHQUEUE_STARTSTOPHINT;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s +!CURVEEDITOR_AXIS_IN;I: +!CURVEEDITOR_AXIS_LEFT_TAN;LT: +!CURVEEDITOR_AXIS_OUT;O: +!CURVEEDITOR_AXIS_RIGHT_TAN;RT: +!CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node. +!DONT_SHOW_AGAIN;Don't show this message again. +!DYNPROFILEEDITOR_DELETE;Delete +!DYNPROFILEEDITOR_EDIT;Edit +!DYNPROFILEEDITOR_EDIT_RULE;Edit Dynamic Profile Rule +!DYNPROFILEEDITOR_ENTRY_TOOLTIP;The matching is case insensitive.\nUse the "re:" prefix to enter\na regular expression. +!DYNPROFILEEDITOR_MOVE_DOWN;Move Down +!DYNPROFILEEDITOR_MOVE_UP;Move Up +!DYNPROFILEEDITOR_NEW;New +!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule +!DYNPROFILEEDITOR_PROFILE;Processing Profile +!EXIFFILTER_IMAGETYPE;Image type +!EXIFPANEL_SHOWALL;Show all +!EXPORT_BYPASS;Processing steps to bypass +!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels +!EXPORT_PIPELINE;Processing pipeline +!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image) +!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality. +!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end) +!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default +!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images. +!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. +!FILECHOOSER_FILTER_ANY;All files +!FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc) +!FILECHOOSER_FILTER_CURVE;Curve files +!FILECHOOSER_FILTER_LCP;Lens correction profiles +!FILECHOOSER_FILTER_PP;Processing profiles +!FILECHOOSER_FILTER_SAME;Same format as current photo +!FILECHOOSER_FILTER_TIFF;TIFF files +!GENERAL_APPLY;Apply +!GENERAL_ASIMAGE;As Image +!GENERAL_OPEN;Open +!GENERAL_RESET;Reset +!GENERAL_SAVE_AS;Save as... +!GENERAL_SLIDER;Slider +!GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. +!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. +!HISTORY_MSG_166;Exposure - Reset +!HISTORY_MSG_173;NR - Detail recovery +!HISTORY_MSG_203;NR - Color space +!HISTORY_MSG_235;B&W - CM - Auto +!HISTORY_MSG_237;B&W - CM +!HISTORY_MSG_256;NR - Median - Type +!HISTORY_MSG_273;CT - Color Balance SMH +!HISTORY_MSG_297;NR - Mode +!HISTORY_MSG_299;NR - Chrominance curve +!HISTORY_MSG_300;- +!HISTORY_MSG_301;NR - Luma control +!HISTORY_MSG_302;NR - Chroma method +!HISTORY_MSG_303;NR - Chroma method +!HISTORY_MSG_304;W - Contrast levels +!HISTORY_MSG_305;Wavelet Levels +!HISTORY_MSG_306;W - Process +!HISTORY_MSG_307;W - Process +!HISTORY_MSG_308;W - Process direction +!HISTORY_MSG_309;W - ES - Detail +!HISTORY_MSG_310;W - Residual - Sky tar/prot +!HISTORY_MSG_311;W - Wavelet levels +!HISTORY_MSG_312;W - Residual - Shadows threshold +!HISTORY_MSG_313;W - Chroma - Sat/past +!HISTORY_MSG_314;W - Gamut - Reduce artifacts +!HISTORY_MSG_315;W - Residual - Contrast +!HISTORY_MSG_316;W - Gamut - Skin tar/prot +!HISTORY_MSG_317;W - Gamut - Skin hue +!HISTORY_MSG_318;W - Contrast - Highlight levels +!HISTORY_MSG_319;W - Contrast - Highlight range +!HISTORY_MSG_320;W - Contrast - Shadow range +!HISTORY_MSG_321;W - Contrast - Shadow levels +!HISTORY_MSG_322;W - Gamut - Avoid color shift +!HISTORY_MSG_323;W - ES - Local contrast +!HISTORY_MSG_324;W - Chroma - Pastel +!HISTORY_MSG_325;W - Chroma - Saturated +!HISTORY_MSG_326;W - Chroma - Method +!HISTORY_MSG_327;W - Contrast - Apply to +!HISTORY_MSG_328;W - Chroma - Link strength +!HISTORY_MSG_329;W - Toning - Opacity RG +!HISTORY_MSG_330;W - Toning - Opacity BY +!HISTORY_MSG_331;W - Contrast levels - Extra +!HISTORY_MSG_332;W - Tiling method +!HISTORY_MSG_333;W - Residual - Shadows +!HISTORY_MSG_334;W - Residual - Chroma +!HISTORY_MSG_335;W - Residual - Highlights +!HISTORY_MSG_336;W - Residual - Highlights threshold +!HISTORY_MSG_337;W - Residual - Sky hue +!HISTORY_MSG_338;W - ES - Radius +!HISTORY_MSG_339;W - ES - Strength +!HISTORY_MSG_340;W - Strength +!HISTORY_MSG_341;W - Edge performance +!HISTORY_MSG_342;W - ES - First level +!HISTORY_MSG_343;W - Chroma levels +!HISTORY_MSG_344;W - Meth chroma sl/cur +!HISTORY_MSG_345;W - ES - Local contrast +!HISTORY_MSG_346;W - ES - Local contrast method +!HISTORY_MSG_347;W - Denoise - Level 1 +!HISTORY_MSG_348;W - Denoise - Level 2 +!HISTORY_MSG_349;W - Denoise - Level 3 +!HISTORY_MSG_350;W - ES - Edge detection +!HISTORY_MSG_351;W - Residual - HH curve +!HISTORY_MSG_352;W - Background +!HISTORY_MSG_353;W - ES - Gradient sensitivity +!HISTORY_MSG_354;W - ES - Enhanced +!HISTORY_MSG_355;W - ES - Threshold low +!HISTORY_MSG_356;W - ES - Threshold high +!HISTORY_MSG_357;W - Denoise - Link with ES +!HISTORY_MSG_358;W - Gamut - CH +!HISTORY_MSG_359;Hot/Dead - Threshold +!HISTORY_MSG_360;TM - Gamma +!HISTORY_MSG_361;W - Final - Chroma balance +!HISTORY_MSG_362;W - Residual - Compression method +!HISTORY_MSG_363;W - Residual - Compression strength +!HISTORY_MSG_364;W - Final - Contrast balance +!HISTORY_MSG_365;W - Final - Delta balance +!HISTORY_MSG_366;W - Residual - Compression gamma +!HISTORY_MSG_367;W - Final - 'After' contrast curve +!HISTORY_MSG_368;W - Final - Contrast balance +!HISTORY_MSG_369;W - Final - Balance method +!HISTORY_MSG_370;W - Final - Local contrast curve +!HISTORY_MSG_371;Post-Resize Sharpening +!HISTORY_MSG_372;PRS USM - Radius +!HISTORY_MSG_373;PRS USM - Amount +!HISTORY_MSG_374;PRS USM - Threshold +!HISTORY_MSG_375;PRS USM - Sharpen only edges +!HISTORY_MSG_376;PRS USM - Edge detection radius +!HISTORY_MSG_377;PRS USM - Edge tolerance +!HISTORY_MSG_378;PRS USM - Halo control +!HISTORY_MSG_379;PRS USM - Halo control amount +!HISTORY_MSG_380;PRS - Method +!HISTORY_MSG_381;PRS RLD - Radius +!HISTORY_MSG_382;PRS RLD - Amount +!HISTORY_MSG_383;PRS RLD - Damping +!HISTORY_MSG_384;PRS RLD - Iterations +!HISTORY_MSG_385;W - Residual - Color Balance +!HISTORY_MSG_386;W - Residual - CB green high +!HISTORY_MSG_387;W - Residual - CB blue high +!HISTORY_MSG_388;W - Residual - CB green mid +!HISTORY_MSG_389;W - Residual - CB blue mid +!HISTORY_MSG_390;W - Residual - CB green low +!HISTORY_MSG_391;W - Residual - CB blue low +!HISTORY_MSG_392;W - Residual - Color Balance +!HISTORY_MSG_393;DCP - Look table +!HISTORY_MSG_394;DCP - Baseline exposure +!HISTORY_MSG_395;DCP - Base table +!HISTORY_MSG_396;W - Contrast sub-tool +!HISTORY_MSG_397;W - Chroma sub-tool +!HISTORY_MSG_398;W - ES sub-tool +!HISTORY_MSG_399;W - Residual sub-tool +!HISTORY_MSG_400;W - Final sub-tool +!HISTORY_MSG_401;W - Toning sub-tool +!HISTORY_MSG_402;W - Denoise sub-tool +!HISTORY_MSG_403;W - ES - Edge sensitivity +!HISTORY_MSG_404;W - ES - Base amplification +!HISTORY_MSG_405;W - Denoise - Level 4 +!HISTORY_MSG_406;W - ES - Neighboring pixels +!HISTORY_MSG_407;Retinex - Method +!HISTORY_MSG_408;Retinex - Radius +!HISTORY_MSG_409;Retinex - Contrast +!HISTORY_MSG_410;Retinex - Offset +!HISTORY_MSG_411;Retinex - Strength +!HISTORY_MSG_412;Retinex - Gaussian gradient +!HISTORY_MSG_413;Retinex - Contrast +!HISTORY_MSG_414;Retinex - Histogram - Lab +!HISTORY_MSG_415;Retinex - Transmission +!HISTORY_MSG_416;Retinex +!HISTORY_MSG_417;Retinex - Transmission median +!HISTORY_MSG_418;Retinex - Threshold +!HISTORY_MSG_419;Retinex - Color space +!HISTORY_MSG_420;Retinex - Histogram - HSL +!HISTORY_MSG_421;Retinex - Gamma +!HISTORY_MSG_422;Retinex - Gamma +!HISTORY_MSG_423;Retinex - Gamma slope +!HISTORY_MSG_424;Retinex - HL threshold +!HISTORY_MSG_425;Retinex - Log base +!HISTORY_MSG_426;Retinex - Hue equalizer +!HISTORY_MSG_427;Output rendering intent +!HISTORY_MSG_428;Monitor rendering intent +!HISTORY_MSG_429;Retinex - Iterations +!HISTORY_MSG_430;Retinex - Transmission gradient +!HISTORY_MSG_431;Retinex - Strength gradient +!HISTORY_MSG_432;Retinex - M - Highlights +!HISTORY_MSG_433;Retinex - M - Highlights TW +!HISTORY_MSG_434;Retinex - M - Shadows +!HISTORY_MSG_435;Retinex - M - Shadows TW +!HISTORY_MSG_436;Retinex - M - Radius +!HISTORY_MSG_437;Retinex - M - Method +!HISTORY_MSG_438;Retinex - M - Equalizer +!HISTORY_MSG_439;Retinex - Process +!HISTORY_MSG_440;CbDL - Method +!HISTORY_MSG_441;Retinex - Gain transmission +!HISTORY_MSG_442;Retinex - Scale +!HISTORY_MSG_443;Output black point compensation +!HISTORY_MSG_444;WB - Temp bias +!HISTORY_MSG_445;Raw sub-image +!HISTORY_MSG_449;PS - ISO adaption +!HISTORY_MSG_452;PS - Show motion +!HISTORY_MSG_453;PS - Show mask only +!HISTORY_MSG_457;PS - Check red/blue +!HISTORY_MSG_462;PS - Check green +!HISTORY_MSG_464;PS - Blur motion mask +!HISTORY_MSG_465;PS - Blur radius +!HISTORY_MSG_468;PS - Fill holes +!HISTORY_MSG_469;PS - Median +!HISTORY_MSG_471;PS - Motion correction +!HISTORY_MSG_472;PS - Smooth transitions +!HISTORY_MSG_473;PS - Use LMMSE +!HISTORY_MSG_474;PS - Equalize +!HISTORY_MSG_475;PS - Equalize channel +!HISTORY_MSG_476;CAM02 - Temp out +!HISTORY_MSG_477;CAM02 - Green out +!HISTORY_MSG_478;CAM02 - Yb out +!HISTORY_MSG_479;CAM02 - CAT02 adaptation out +!HISTORY_MSG_480;CAM02 - Automatic CAT02 out +!HISTORY_MSG_481;CAM02 - Temp scene +!HISTORY_MSG_482;CAM02 - Green scene +!HISTORY_MSG_483;CAM02 - Yb scene +!HISTORY_MSG_484;CAM02 - Auto Yb scene +!HISTORY_MSG_485;Lens Correction +!HISTORY_MSG_486;Lens Correction - Camera +!HISTORY_MSG_487;Lens Correction - Lens +!HISTORY_MSG_488;Dynamic Range Compression +!HISTORY_MSG_490;DRC - Amount +!HISTORY_MSG_491;White Balance +!HISTORY_MSG_492;RGB Curves +!HISTORY_MSG_493;L*a*b* Adjustments +!HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors +!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction +!HISTORY_MSG_DUALDEMOSAIC_CONTRAST;AMaZE+VNG4 - Contrast threshold +!HISTORY_MSG_HISTMATCHING;Auto-matched tone curve +!HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries +!HISTORY_MSG_ICM_OUTPUT_TEMP;Output - ICC-v4 illuminant D +!HISTORY_MSG_ICM_OUTPUT_TYPE;Output - Type +!HISTORY_MSG_ICM_WORKING_GAMMA;Working - Gamma +!HISTORY_MSG_ICM_WORKING_SLOPE;Working - Slope +!HISTORY_MSG_ICM_WORKING_TRC_METHOD;Working - TRC method +!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount +!HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness +!HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast +!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness +!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius +!HISTORY_MSG_METADATA_MODE;Metadata copy mode +!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold +!HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion +!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction +!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold +!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations +!HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift +!HISTORY_MSG_RAW_BORDER;Raw border +!HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold +!HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light +!HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength +!HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor +!ICCPROFCREATOR_COPYRIGHT;Copyright: +!ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to "RawTherapee, CC0" +!ICCPROFCREATOR_CUSTOM;Custom +!ICCPROFCREATOR_DESCRIPTION;Description: +!ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description +!ICCPROFCREATOR_DESCRIPTION_TOOLTIP;Leave empty to set the default description. +!ICCPROFCREATOR_GAMMA;Gamma +!ICCPROFCREATOR_ICCVERSION;ICC version: +!ICCPROFCREATOR_ILL;Illuminant: +!ICCPROFCREATOR_ILL_41;D41 +!ICCPROFCREATOR_ILL_50;D50 +!ICCPROFCREATOR_ILL_55;D55 +!ICCPROFCREATOR_ILL_60;D60 +!ICCPROFCREATOR_ILL_65;D65 +!ICCPROFCREATOR_ILL_80;D80 +!ICCPROFCREATOR_ILL_DEF;Default +!ICCPROFCREATOR_ILL_INC;StdA 2856K +!ICCPROFCREATOR_ILL_TOOLTIP;You can only set the illuminant for ICC v4 profiles. +!ICCPROFCREATOR_PRIMARIES;Primaries: +!ICCPROFCREATOR_PRIM_ACESP0;ACES AP0 +!ICCPROFCREATOR_PRIM_ACESP1;ACES AP1 +!ICCPROFCREATOR_PRIM_ADOBE;Adobe RGB (1998) +!ICCPROFCREATOR_PRIM_BEST;BestRGB +!ICCPROFCREATOR_PRIM_BETA;BetaRGB +!ICCPROFCREATOR_PRIM_BLUX;Blue X +!ICCPROFCREATOR_PRIM_BLUY;Blue Y +!ICCPROFCREATOR_PRIM_BRUCE;BruceRGB +!ICCPROFCREATOR_PRIM_GREX;Green X +!ICCPROFCREATOR_PRIM_GREY;Green Y +!ICCPROFCREATOR_PRIM_PROPH;Prophoto +!ICCPROFCREATOR_PRIM_REC2020;Rec2020 +!ICCPROFCREATOR_PRIM_REDX;Red X +!ICCPROFCREATOR_PRIM_REDY;Red Y +!ICCPROFCREATOR_PRIM_SRGB;sRGB +!ICCPROFCREATOR_PRIM_TOOLTIP;You can only set custom primaries for ICC v4 profiles. +!ICCPROFCREATOR_PRIM_WIDEG;Widegamut +!ICCPROFCREATOR_PROF_V2;ICC v2 +!ICCPROFCREATOR_PROF_V4;ICC v4 +!ICCPROFCREATOR_SAVEDIALOG_TITLE;Save ICC profile as... +!ICCPROFCREATOR_SLOPE;Slope +!ICCPROFCREATOR_TRC_PRESET;Tone response curve: +!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. +!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. +!IPTCPANEL_COPYRIGHT;Copyright notice +!IPTCPANEL_COPYRIGHTHINT;Enter a Notice on the current owner of the Copyright for this image, such as ©2008 Jane Doe. +!IPTCPANEL_COUNTRYHINT;Enter the name of the country pictured in this image. +!IPTCPANEL_CREATOR;Creator +!IPTCPANEL_CREATORHINT;Enter the name of the person that created this image. +!IPTCPANEL_CREATORJOBTITLE;Creator's job title +!IPTCPANEL_CREATORJOBTITLEHINT;Enter the Job Title of the person listed in the Creator field. +!IPTCPANEL_DATECREATEDHINT;Enter the Date the image was taken. +!IPTCPANEL_DESCRIPTION;Description +!IPTCPANEL_DESCRIPTIONHINT;Enter a "caption" describing the who, what, and why of what is happening in this image, this might include names of people, and/or their role in the action that is taking place within the image. +!IPTCPANEL_DESCRIPTIONWRITER;Description writer +!IPTCPANEL_DESCRIPTIONWRITERHINT;Enter the name of the person involved in writing, editing or correcting the description of the image. +!IPTCPANEL_HEADLINEHINT;Enter a brief publishable synopsis or summary of the contents of the image. +!IPTCPANEL_INSTRUCTIONSHINT;Enter information about embargoes, or other restrictions not covered by the Copyright field. +!IPTCPANEL_KEYWORDSHINT;Enter any number of keywords, terms or phrases used to express the subject matter in the image. +!IPTCPANEL_PROVINCE;Province or state +!IPTCPANEL_PROVINCEHINT;Enter the name of the province or state pictured in this image. +!IPTCPANEL_SOURCEHINT;Enter or edit the name of a person or party who has a role in the content supply chain, such as a person or entity from whom you received this image from. +!IPTCPANEL_SUPPCATEGORIES;Supplemental categories +!IPTCPANEL_SUPPCATEGORIESHINT;Further refines the subject of the image. +!IPTCPANEL_TITLEHINT;Enter a short verbal and human readable name for the image, this may be the file name. +!IPTCPANEL_TRANSREFERENCE;Job ID +!IPTCPANEL_TRANSREFERENCEHINT;Enter a number or identifier needed for workflow control or tracking. +!LENSPROFILE_CORRECTION_AUTOMATCH;Auto-matched correction parameters +!LENSPROFILE_CORRECTION_LCPFILE;LCP File +!LENSPROFILE_CORRECTION_MANUAL;Manual correction parameters +!LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong. +!MAIN_BUTTON_ICCPROFCREATOR;ICC Profile Creator +!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor +!MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. +!MAIN_TAB_ADVANCED;Advanced +!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_INSPECT; Inspect +!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9 +!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%. +!MONITOR_PROFILE_SYSTEM;System default +!OPTIONS_BUNDLED_MISSING;The bundled profile "%1" could not be found!\n\nYour installation could be damaged.\n\nDefault internal values will be used instead. +!OPTIONS_DEFIMG_MISSING;The default profile for non-raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead. +!OPTIONS_DEFRAW_MISSING;The default profile for raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead. +!PARTIALPASTE_ADVANCEDGROUP;Advanced Settings +!PARTIALPASTE_EQUALIZER;Wavelet levels +!PARTIALPASTE_LOCALCONTRAST;Local contrast +!PARTIALPASTE_METADATA;Metadata mode +!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!PARTIALPASTE_PRSHARPENING;Post-resize sharpening +!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift +!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue +!PARTIALPASTE_RAW_BORDER;Raw border +!PARTIALPASTE_RAW_IMAGENUM;Sub-image +!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift +!PARTIALPASTE_RETINEX;Retinex +!PARTIALPASTE_SOFTLIGHT;Soft light +!PARTIALPASTE_TM_FATTAL;Dynamic range compression +!PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting +!PREFERENCES_CLUTSCACHE;HaldCLUT Cache +!PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs +!PREFERENCES_CMMBPC;Black point compensation +!PREFERENCES_CROP;Crop editing +!PREFERENCES_CROP_AUTO_FIT;Automatically zoom to fit the crop area +!PREFERENCES_CROP_GUIDES;Guides shown when not editing the crop +!PREFERENCES_CROP_GUIDES_FRAME;Frame +!PREFERENCES_CROP_GUIDES_FULL;Original +!PREFERENCES_CROP_GUIDES_NONE;None +!PREFERENCES_CURVEBBOXPOS;Position of curve copy & paste buttons +!PREFERENCES_CURVEBBOXPOS_ABOVE;Above +!PREFERENCES_CURVEBBOXPOS_BELOW;Below +!PREFERENCES_CURVEBBOXPOS_LEFT;Left +!PREFERENCES_CURVEBBOXPOS_RIGHT;Right +!PREFERENCES_D50_OLD;5000K +!PREFERENCES_DIRECTORIES;Directories +!PREFERENCES_EDITORCMDLINE;Custom command line +!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser +!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. +!PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 +!PREFERENCES_GREYSC;Scene Yb luminance (%) +!PREFERENCES_GREYSC18;Yb=18 CIE L#50 +!PREFERENCES_GREYSCA;Automatic +!PREFERENCES_IMG_RELOAD_NEEDED;These changes require the image to be reloaded (or a new image to be opened) to take effect. +!PREFERENCES_INSPECT_LABEL;Inspect +!PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images +!PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. +!PREFERENCES_LANG;Language +!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders +!PREFERENCES_MONINTENT;Default rendering intent +!PREFERENCES_MONITOR;Monitor +!PREFERENCES_MONPROFILE;Default color profile +!PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. +!PREFERENCES_NAVIGATIONFRAME;Navigation +!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel +!PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. +!PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. +!PREFERENCES_PERFORMANCE_THREADS;Threads +!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) +!PREFERENCES_PREVDEMO;Preview Demosaic Method +!PREFERENCES_PREVDEMO_FAST;Fast +!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: +!PREFERENCES_PREVDEMO_SIDECAR;As in PP3 +!PREFERENCES_PRINTER;Printer (Soft-Proofing) +!PREFERENCES_PROFILESAVEBOTH;Save processing profile both to the cache and next to the input file +!PREFERENCES_PROFILESAVELOCATION;Processing profile saving location +!PREFERENCES_PROFILE_NONE;None +!PREFERENCES_PRTINTENT;Rendering intent +!PREFERENCES_PRTPROFILE;Color profile +!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset +!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3". +!PREFERENCES_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now +!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font +!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings +!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files +!PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. +!PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar +!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules +!PREFERENCES_TAB_PERFORMANCE;Performance +!PREFERENCES_THEME;Theme +!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview +!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering +!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise +!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file +!PROFILEPANEL_PDYNAMIC;Dynamic +!QINFO_FRAMECOUNT;%2 frames +!QINFO_HDR;HDR / %2 frame(s) +!QINFO_PIXELSHIFT;Pixel Shift / %2 frame(s) +!SAMPLEFORMAT_0;Unknown data format +!SAMPLEFORMAT_1;8-bit unsigned +!SAMPLEFORMAT_2;16-bit unsigned +!SAMPLEFORMAT_4;24-bit LogLuv +!SAMPLEFORMAT_8;32-bit LogLuv +!SAMPLEFORMAT_16;16-bit floating-point +!SAMPLEFORMAT_32;24-bit floating-point +!SAMPLEFORMAT_64;32-bit floating-point +!SAVEDLG_FILEFORMAT_FLOAT; floating-point +!SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. +!SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. +!SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. +!TOOLBAR_TOOLTIP_COLORPICKER;Lockable Color Picker\n\nWhen enabled:\nClick in the preview with left mouse button to add a color picker\nDrag it around while pressing the left mouse button\nDelete the color picker with a right mouse button click\nDelete all color pickers with Shift + Right mouse button click\nRight click away from any color picker to go back to the Hand tool +!TP_BWMIX_MIXC;Channel Mixer +!TP_BWMIX_NEUTRAL;Reset +!TP_CBDL_AFT;After Black-and-White +!TP_CBDL_BEF;Before Black-and-White +!TP_CBDL_METHOD;Process located +!TP_CBDL_METHOD_TOOLTIP;Choose whether the Contrast by Detail Levels tool is to be positioned after the Black-and-White tool, which makes it work in L*a*b* space, or before it, which makes it work in RGB space. +!TP_COLORAPP_FREE;Free temp+green + CAT02 + [output] +!TP_COLORAPP_NEUTRAL;Reset +!TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values +!TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 +!TP_COLORAPP_YB;Yb% (mean luminance) +!TP_COLORAPP_YBSCENE;Yb% (mean luminance) +!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORTONING_LABGRID;L*a*b* color correction grid +!TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 +!TP_CROP_GTHARMMEANS;Harmonic Means +!TP_CROP_GTTRIANGLE1;Golden Triangles 1 +!TP_CROP_GTTRIANGLE2;Golden Triangles 2 +!TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Auto multi-zones +!TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Automatic global +!TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL_TOOLTIP;Try to evaluate chroma noise\nBe careful, this calculation is average, and is quite subjective ! +!TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Chrominance curve +!TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. +!TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Chrominance +!TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;Manual +!TP_DIRPYRDENOISE_CHROMINANCE_METHOD;Method +!TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. +!TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. +!TP_DIRPYRDENOISE_CHROMINANCE_PMZ;Preview multi-zones +!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW;Preview +!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP;Displays the remaining noise levels of the part of the image visible in the preview after wavelet.\n\n>300 Very noisy\n100-300 Noisy\n50-100 A little noisy\n<50 Very low noise\n\nBeware, the values will differ between RGB and L*a*b* mode. The RGB values are less accurate because the RGB mode does not completely separate luminance and chrominance. +!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_INFO;Preview size=%1, Center: Px=%2 Py=%3 +!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;Preview noise: Mean=%1 High=%2 +!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;Preview noise: Mean= - High= - +!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Tile size=%1, Center: Tx=%2 Ty=%3 +!TP_DIRPYRDENOISE_LABEL;Noise Reduction +!TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Luminance control +!TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance +!TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* +!TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Chroma only +!TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;Weighted L* (little) + a*b* (normal) +!TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Applying three median filter iterations with a 3×3 window size often leads to better results than using one median filter iteration with a 7×7 window size. +!TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Apply a median filter of the desired window size. The larger the window's size, the longer it takes.\n\n3×3 soft: treats 5 pixels in a 3×3 pixel window.\n3×3: treats 9 pixels in a 3×3 pixel window.\n5×5 soft: treats 13 pixels in a 5×5 pixel window.\n5×5: treats 25 pixels in a 5×5 pixel window.\n7×7: treats 49 pixels in a 7×7 pixel window.\n9×9: treats 81 pixels in a 9×9 pixel window.\n\nSometimes it is possible to achieve higher quality running several iterations with a smaller window size than one iteration with a larger one. +!TP_DIRPYRDENOISE_SLI;Slider +!TP_DIRPYRDENOISE_TYPE_3X3;3×3 +!TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3 soft +!TP_DIRPYRDENOISE_TYPE_5X5;5×5 +!TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 soft +!TP_DIRPYRDENOISE_TYPE_7X7;7×7 +!TP_DIRPYRDENOISE_TYPE_9X9;9×9 +!TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts +!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. +!TP_EPD_GAMMA;Gamma +!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors +!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve +!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. +!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance +!TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual +!TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? +!TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure +!TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. +!TP_ICM_APPLYHUESATMAP;Base table +!TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only available if the selected DCP has one. +!TP_ICM_APPLYLOOKTABLE;Look table +!TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only available if the selected DCP has one. +!TP_ICM_BPC;Black Point Compensation +!TP_ICM_PROFILEINTENT;Rendering Intent +!TP_ICM_SAVEREFERENCE;Save Reference Image +!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance +!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles. +!TP_ICM_WORKING_TRC;Tone response curve: +!TP_ICM_WORKING_TRC_CUSTOM;Custom +!TP_ICM_WORKING_TRC_GAMMA;Gamma +!TP_ICM_WORKING_TRC_NONE;None +!TP_ICM_WORKING_TRC_SLOPE;Slope +!TP_ICM_WORKING_TRC_TOOLTIP;Only for built-in profiles. +!TP_LOCALCONTRAST_AMOUNT;Amount +!TP_LOCALCONTRAST_DARKNESS;Darkness level +!TP_LOCALCONTRAST_LABEL;Local Contrast +!TP_LOCALCONTRAST_LIGHTNESS;Lightness level +!TP_LOCALCONTRAST_RADIUS;Radius +!TP_METADATA_EDIT;Apply modifications +!TP_METADATA_MODE;Metadata copy mode +!TP_METADATA_STRIP;Strip all metadata +!TP_METADATA_TUNNEL;Copy unchanged +!TP_NEUTRAL;Reset +!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction +!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both +!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal +!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows +!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical +!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter +!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. +!TP_PRSHARPENING_LABEL;Post-Resize Sharpening +!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. +!TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift +!TP_RAWCACORR_CASTR;Strength +!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) +!TP_RAW_2PASS;1-pass+fast +!TP_RAW_3PASSBEST;3-pass (Markesteijn) +!TP_RAW_4PASS;3-pass+fast +!TP_RAW_AHD;AHD +!TP_RAW_AMAZE;AMaZE +!TP_RAW_AMAZEVNG4;AMaZE+VNG4 +!TP_RAW_BORDER;Border +!TP_RAW_DCB;DCB +!TP_RAW_DCBVNG4;DCB+VNG4 +!TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold +!TP_RAW_EAHD;EAHD +!TP_RAW_FAST;Fast +!TP_RAW_HD;Threshold +!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear. +!TP_RAW_HPHD;HPHD +!TP_RAW_IGV;IGV +!TP_RAW_IMAGENUM;Sub-image +!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. +!TP_RAW_LMMSE;LMMSE +!TP_RAW_MONO;Mono +!TP_RAW_NONE;None (Shows sensor pattern) +!TP_RAW_PIXELSHIFT;Pixel Shift +!TP_RAW_PIXELSHIFTBLUR;Blur motion mask +!TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion +!TP_RAW_PIXELSHIFTEPERISO;Sensitivity +!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images. +!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames +!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel +!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels. +!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction. +!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion +!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask +!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask +!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts +!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images. +!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts +!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects. +!TP_RAW_PIXELSHIFTMM_AUTO;Automatic +!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom +!TP_RAW_PIXELSHIFTMM_OFF;Off +!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction +!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used. +!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion +!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask +!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask +!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image. +!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion. +!TP_RAW_PIXELSHIFTSIGMA;Blur radius +!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value. +!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions +!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected. +!TP_RAW_RCD;RCD +!TP_RAW_RCDVNG4;RCD+VNG4 +!TP_RAW_VNG4;VNG4 +!TP_RESIZE_ALLOW_UPSCALING;Allow Upscaling +!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL +!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* +!TP_RETINEX_CONTEDIT_LH;Hue equalizer +!TP_RETINEX_CONTEDIT_MAP;Mask equalizer +!TP_RETINEX_CURVEEDITOR_CD;L=f(L) +!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. +!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) +!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. +!TP_RETINEX_CURVEEDITOR_MAP;L=f(L) +!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts! +!TP_RETINEX_EQUAL;Equalizer +!TP_RETINEX_FREEGAMMA;Free gamma +!TP_RETINEX_GAIN;Gain +!TP_RETINEX_GAINOFFS;Gain and Offset (brightness) +!TP_RETINEX_GAINTRANSMISSION;Gain transmission +!TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. +!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. +!TP_RETINEX_GAMMA;Gamma +!TP_RETINEX_GAMMA_FREE;Free +!TP_RETINEX_GAMMA_HIGH;High +!TP_RETINEX_GAMMA_LOW;Low +!TP_RETINEX_GAMMA_MID;Middle +!TP_RETINEX_GAMMA_NONE;None +!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). +!TP_RETINEX_GRAD;Transmission gradient +!TP_RETINEX_GRADS;Strength gradient +!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely. +!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely. +!TP_RETINEX_HIGH;High +!TP_RETINEX_HIGHLIG;Highlight +!TP_RETINEX_HIGHLIGHT;Highlight threshold +!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. +!TP_RETINEX_HSLSPACE_LIN;HSL-Linear +!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic +!TP_RETINEX_ITER;Iterations (Tone-mapping) +!TP_RETINEX_ITERF;Tone mapping +!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time. +!TP_RETINEX_LABEL;Retinex +!TP_RETINEX_LABEL_MASK;Mask +!TP_RETINEX_LABSPACE;L*a*b* +!TP_RETINEX_LOW;Low +!TP_RETINEX_MAP;Mask method +!TP_RETINEX_MAP_GAUS;Gaussian mask +!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial) +!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total) +!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above (Radius, Method) to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow. +!TP_RETINEX_MAP_NONE;None +!TP_RETINEX_MEDIAN;Transmission median filter +!TP_RETINEX_METHOD;Method +!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light.\nUniform = Equalize action.\nHigh = Reinforce high light.\nHighlights = Remove magenta in highlights. +!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 +!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. +!TP_RETINEX_NEIGHBOR;Radius +!TP_RETINEX_NEUTRAL;Reset +!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. +!TP_RETINEX_OFFSET;Offset (brightness) +!TP_RETINEX_SCALES;Gaussian gradient +!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and radius are reduced when iterations increase, and conversely. +!TP_RETINEX_SETTINGS;Settings +!TP_RETINEX_SKAL;Scale +!TP_RETINEX_SLOPE;Free gamma slope +!TP_RETINEX_STRENGTH;Strength +!TP_RETINEX_THRESHOLD;Threshold +!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. +!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 +!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 +!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma.\nTm=Min TM=Max of transmission map. +!TP_RETINEX_TRANF;Transmission +!TP_RETINEX_TRANSMISSION;Transmission map +!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. +!TP_RETINEX_UNIFORM;Uniform +!TP_RETINEX_VARIANCE;Contrast +!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. +!TP_RETINEX_VIEW;Process +!TP_RETINEX_VIEW_MASK;Mask +!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible. +!TP_RETINEX_VIEW_NONE;Standard +!TP_RETINEX_VIEW_TRAN;Transmission - Auto +!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed +!TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_CONTRAST;Contrast threshold +!TP_SHARPENMICRO_CONTRAST;Contrast threshold +!TP_SOFTLIGHT_LABEL;Soft Light +!TP_SOFTLIGHT_STRENGTH;Strength +!TP_TM_FATTAL_AMOUNT;Amount +!TP_TM_FATTAL_ANCHOR;Anchor +!TP_TM_FATTAL_LABEL;Dynamic Range Compression +!TP_WAVELET_1;Level 1 +!TP_WAVELET_2;Level 2 +!TP_WAVELET_3;Level 3 +!TP_WAVELET_4;Level 4 +!TP_WAVELET_5;Level 5 +!TP_WAVELET_6;Level 6 +!TP_WAVELET_7;Level 7 +!TP_WAVELET_8;Level 8 +!TP_WAVELET_9;Level 9 +!TP_WAVELET_APPLYTO;Apply To +!TP_WAVELET_AVOID;Avoid color shift +!TP_WAVELET_B0;Black +!TP_WAVELET_B1;Grey +!TP_WAVELET_B2;Residual +!TP_WAVELET_BACKGROUND;Background +!TP_WAVELET_BACUR;Curve +!TP_WAVELET_BALANCE;Contrast balance d/v-h +!TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified. +!TP_WAVELET_BALCHRO;Chroma balance +!TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance. +!TP_WAVELET_BANONE;None +!TP_WAVELET_BASLI;Slider +!TP_WAVELET_BATYPE;Contrast balance method +!TP_WAVELET_CBENAB;Toning and Color Balance +!TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted +!TP_WAVELET_CCURVE;Local contrast +!TP_WAVELET_CH1;Whole chroma range +!TP_WAVELET_CH2;Saturated/pastel +!TP_WAVELET_CH3;Link contrast levels +!TP_WAVELET_CHCU;Curve +!TP_WAVELET_CHR;Chroma-contrast link strength +!TP_WAVELET_CHRO;Saturated/pastel threshold +!TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored. +!TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength" +!TP_WAVELET_CHSL;Sliders +!TP_WAVELET_CHTYPE;Chrominance method +!TP_WAVELET_COLORT;Opacity Red-Green +!TP_WAVELET_COMPCONT;Contrast +!TP_WAVELET_COMPGAMMA;Compression gamma +!TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. +!TP_WAVELET_COMPTM;Tone mapping +!TP_WAVELET_CONTEDIT;'After' contrast curve +!TP_WAVELET_CONTR;Gamut +!TP_WAVELET_CONTRA;Contrast +!TP_WAVELET_CONTRAST_MINUS;Contrast - +!TP_WAVELET_CONTRAST_PLUS;Contrast + +!TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. +!TP_WAVELET_CTYPE;Chrominance control +!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). +!TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) +!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. +!TP_WAVELET_CURVEEDITOR_CL;L +!TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. +!TP_WAVELET_CURVEEDITOR_HH;HH +!TP_WAVELET_CURVEEDITOR_HH_TOOLTIP;Modifies the residual image's hue as a function of hue. +!TP_WAVELET_DALL;All directions +!TP_WAVELET_DAUB;Edge performance +!TP_WAVELET_DAUB2;D2 - low +!TP_WAVELET_DAUB4;D4 - standard +!TP_WAVELET_DAUB6;D6 - standard plus +!TP_WAVELET_DAUB10;D10 - medium +!TP_WAVELET_DAUB14;D14 - high +!TP_WAVELET_DAUB_TOOLTIP;Changes Daubechies coefficients:\nD4 = Standard,\nD14 = Often best performance, 10% more time-intensive.\n\nAffects edge detection as well as the general quality of the firsts levels. However the quality is not strictly related to this coefficient and can vary with images and uses. +!TP_WAVELET_DONE;Vertical +!TP_WAVELET_DTHR;Diagonal +!TP_WAVELET_DTWO;Horizontal +!TP_WAVELET_EDCU;Curve +!TP_WAVELET_EDGCONT;Local contrast +!TP_WAVELET_EDGCONT_TOOLTIP;Adjusting the points to the left decreases contrast, and to the right increases it.\nBottom-left, top-left, top-right and bottom-right represent respectively local contrast for low values, mean, mean+stdev and maxima. +!TP_WAVELET_EDGE;Edge Sharpness +!TP_WAVELET_EDGEAMPLI;Base amplification +!TP_WAVELET_EDGEDETECT;Gradient sensitivity +!TP_WAVELET_EDGEDETECTTHR;Threshold low (noise) +!TP_WAVELET_EDGEDETECTTHR2;Threshold high (detection) +!TP_WAVELET_EDGEDETECTTHR_TOOLTIP;This adjuster lets you target edge detection for example to avoid applying edge sharpness to fine details, such as noise in the sky. +!TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sensitivity. This affects local contrast, edge settings and noise. +!TP_WAVELET_EDGESENSI;Edge sensitivity +!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged. +!TP_WAVELET_EDGTHRESH;Detail +!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts. +!TP_WAVELET_EDRAD;Radius +!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect. +!TP_WAVELET_EDSL;Threshold Sliders +!TP_WAVELET_EDTYPE;Local contrast method +!TP_WAVELET_EDVAL;Strength +!TP_WAVELET_FINAL;Final Touchup +!TP_WAVELET_FINEST;Finest +!TP_WAVELET_HIGHLIGHT;Highlight luminance range +!TP_WAVELET_HS1;Whole luminance range +!TP_WAVELET_HS2;Shadows/Highlights +!TP_WAVELET_HUESKIN;Skin hue +!TP_WAVELET_HUESKIN_TOOLTIP;The bottom points set the beginning of the transition zone, and the upper points the end of it, where the effect is at its maximum.\n\nIf you need to move the area significantly, or if there are artifacts, then the white balance is incorrect. +!TP_WAVELET_HUESKY;Sky hue +!TP_WAVELET_HUESKY_TOOLTIP;The bottom points set the beginning of the transition zone, and the upper points the end of it, where the effect is at its maximum.\n\nIf you need to move the area significantly, or if there are artifacts, then the white balance is incorrect. +!TP_WAVELET_ITER;Delta balance levels +!TP_WAVELET_ITER_TOOLTIP;Left: increase low levels and reduce high levels,\nRight: reduce low levels and increase high levels. +!TP_WAVELET_LABEL;Wavelet Levels +!TP_WAVELET_LARGEST;Coarsest +!TP_WAVELET_LEVCH;Chroma +!TP_WAVELET_LEVDIR_ALL;All levels in all directions +!TP_WAVELET_LEVDIR_INF;Below or equal the level +!TP_WAVELET_LEVDIR_ONE;One level +!TP_WAVELET_LEVDIR_SUP;Above the level +!TP_WAVELET_LEVELS;Wavelet levels +!TP_WAVELET_LEVELS_TOOLTIP;Choose the number of detail levels the image is to be decomposed into. More levels require more RAM and require a longer processing time. +!TP_WAVELET_LEVF;Contrast +!TP_WAVELET_LEVLABEL;Preview maximum possible levels = %1 +!TP_WAVELET_LEVONE;Level 2 +!TP_WAVELET_LEVTHRE;Level 4 +!TP_WAVELET_LEVTWO;Level 3 +!TP_WAVELET_LEVZERO;Level 1 +!TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength +!TP_WAVELET_LIPST;Enhanced algoritm +!TP_WAVELET_LOWLIGHT;Shadow luminance range +!TP_WAVELET_MEDGREINF;First level +!TP_WAVELET_MEDI;Reduce artifacts in blue sky +!TP_WAVELET_MEDILEV;Edge detection +!TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. +!TP_WAVELET_NEUTRAL;Neutral +!TP_WAVELET_NOIS;Denoise +!TP_WAVELET_NOISE;Denoise and Refine +!TP_WAVELET_NPHIGH;High +!TP_WAVELET_NPLOW;Low +!TP_WAVELET_NPNONE;None +!TP_WAVELET_NPTYPE;Neighboring pixels +!TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. +!TP_WAVELET_OPACITY;Opacity Blue-Yellow +!TP_WAVELET_OPACITYW;Contrast balance d/v-h curve +!TP_WAVELET_OPACITYWL;Final local contrast +!TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right. +!TP_WAVELET_PASTEL;Pastel chroma +!TP_WAVELET_PROC;Process +!TP_WAVELET_RE1;Reinforced +!TP_WAVELET_RE2;Unchanged +!TP_WAVELET_RE3;Reduced +!TP_WAVELET_RESCHRO;Chroma +!TP_WAVELET_RESCON;Shadows +!TP_WAVELET_RESCONH;Highlights +!TP_WAVELET_RESID;Residual Image +!TP_WAVELET_SAT;Saturated chroma +!TP_WAVELET_SETTINGS;Wavelet Settings +!TP_WAVELET_SKIN;Skin targetting/protection +!TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. +!TP_WAVELET_SKY;Sky targetting/protection +!TP_WAVELET_SKY_TOOLTIP;At -100 sky-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 sky-tones are protected while all other tones are affected. +!TP_WAVELET_STREN;Strength +!TP_WAVELET_STRENGTH;Strength +!TP_WAVELET_SUPE;Extra +!TP_WAVELET_THR;Shadows threshold +!TP_WAVELET_THRESHOLD;Highlight levels +!TP_WAVELET_THRESHOLD2;Shadow levels +!TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels between 9 and 9 minus the value will be affected by the shadow luminance range. Other levels will be fully treated. The highest level possible is limited by the highlight level value (9 minus highlight level value). +!TP_WAVELET_THRESHOLD_TOOLTIP;Only levels beyond the chosen value will be affected by the highlight luminance range. Other levels will be fully treated. The chosen value here limits the highest possible value of the shadow levels. +!TP_WAVELET_THRH;Highlights threshold +!TP_WAVELET_TILESBIG;Big tiles +!TP_WAVELET_TILESFULL;Full image +!TP_WAVELET_TILESIZE;Tiling method +!TP_WAVELET_TILESLIT;Little tiles +!TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. +!TP_WAVELET_TMSTRENGTH;Compression strength +!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. +!TP_WAVELET_TMTYPE;Compression method +!TP_WAVELET_TON;Toning +!TP_WBALANCE_TEMPBIAS;AWB temperature bias +!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias". From b39b3e932fa3edfc0a5772c46ce630ad2595dabf Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Wed, 9 Jan 2019 22:50:07 +0100 Subject: [PATCH 06/23] generateTranslationDiffs --- rtdata/languages/Catala | 4 + rtdata/languages/Chinese (Simplified) | 4 + rtdata/languages/Chinese (Traditional) | 4 + rtdata/languages/Czech | 8 ++ rtdata/languages/Dansk | 4 + rtdata/languages/Deutsch | 8 ++ rtdata/languages/English (UK) | 4 + rtdata/languages/English (US) | 4 + rtdata/languages/Espanol | 4 + rtdata/languages/Euskara | 4 + rtdata/languages/Francais | 8 ++ rtdata/languages/Greek | 4 + rtdata/languages/Hebrew | 4 + rtdata/languages/Italiano | 4 + rtdata/languages/Japanese | 8 ++ rtdata/languages/Latvian | 4 + rtdata/languages/Magyar | 4 + rtdata/languages/Nederlands | 4 + rtdata/languages/Norsk BM | 4 + rtdata/languages/Polish | 4 + rtdata/languages/Polish (Latin Characters) | 4 + rtdata/languages/Portugues (Brasil) | 4 + rtdata/languages/Russian | 4 + rtdata/languages/Serbian (Cyrilic Characters) | 4 + rtdata/languages/Serbian (Latin Characters) | 4 + rtdata/languages/Slovak | 4 + rtdata/languages/Suomi | 4 + rtdata/languages/Swedish | 4 + rtdata/languages/Turkish | 4 + rtdata/languages/Ukrainian | 131 ++++++++++++++---- rtdata/languages/default | 4 +- 31 files changed, 238 insertions(+), 29 deletions(-) diff --git a/rtdata/languages/Catala b/rtdata/languages/Catala index ce7e9e378..235f35401 100644 --- a/rtdata/languages/Catala +++ b/rtdata/languages/Catala @@ -1358,6 +1358,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1442,6 +1443,8 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !MAIN_MSG_WRITEFAILED;Failed to write\n"%1"\n\nMake sure that the folder exists and that you have write permission to it. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. @@ -2132,6 +2135,7 @@ ZOOMPANEL_ZOOMOUT;Allunya\nDrecera: - !TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity mode allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color. !TP_SAVEDIALOG_OK_TIP;Shortcut: Ctrl-Enter !TP_SHADOWSHLIGHTS_SHARPMASK;Sharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Chinese (Simplified) b/rtdata/languages/Chinese (Simplified) index f0d50ec3e..ad3104b5f 100644 --- a/rtdata/languages/Chinese (Simplified) +++ b/rtdata/languages/Chinese (Simplified) @@ -1429,6 +1429,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1511,6 +1512,8 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !MAIN_MSG_WRITEFAILED;Failed to write\n"%1"\n\nMake sure that the folder exists and that you have write permission to it. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TOOLTIP_BACKCOLOR0;Background color of the preview: theme-based\nShortcut: 9 !MAIN_TOOLTIP_BACKCOLOR1;Background color of the preview: black\nShortcut: 9 !MAIN_TOOLTIP_BACKCOLOR2;Background color of the preview: white\nShortcut: 9 @@ -2102,6 +2105,7 @@ ZOOMPANEL_ZOOMOUT;缩放拉远\n快捷键: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SHARPENMICRO_LABEL;Microcontrast diff --git a/rtdata/languages/Chinese (Traditional) b/rtdata/languages/Chinese (Traditional) index b6e4dedbc..8b3c23fbd 100644 --- a/rtdata/languages/Chinese (Traditional) +++ b/rtdata/languages/Chinese (Traditional) @@ -1026,6 +1026,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1125,6 +1126,8 @@ TP_WBALANCE_TEMPERATURE;色溫 !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2067,6 +2070,7 @@ TP_WBALANCE_TEMPERATURE;色溫 !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Czech b/rtdata/languages/Czech index 56900e28b..fd61b1ab0 100644 --- a/rtdata/languages/Czech +++ b/rtdata/languages/Czech @@ -2344,3 +2344,11 @@ ZOOMPANEL_ZOOMFITSCREEN;Přizpůsobit celý obrázek obrazovce\nZkratka: Alt< ZOOMPANEL_ZOOMIN;Přiblížit\nZkratka: + ZOOMPANEL_ZOOMOUT;Oddálit\nZkratka: - +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u +!TP_SHARPENING_BLUR;Blur radius diff --git a/rtdata/languages/Dansk b/rtdata/languages/Dansk index 72b795c29..367747256 100644 --- a/rtdata/languages/Dansk +++ b/rtdata/languages/Dansk @@ -1021,6 +1021,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1121,6 +1122,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2065,6 +2068,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Deutsch b/rtdata/languages/Deutsch index 4bf12cbed..5ec13a759 100644 --- a/rtdata/languages/Deutsch +++ b/rtdata/languages/Deutsch @@ -2408,3 +2408,11 @@ ZOOMPANEL_ZOOMFITSCREEN;An Bildschirm anpassen.\nTaste: Alt + f ZOOMPANEL_ZOOMIN;Hineinzoomen\nTaste: + ZOOMPANEL_ZOOMOUT;Herauszoomen\nTaste: - +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u +!TP_SHARPENING_BLUR;Blur radius diff --git a/rtdata/languages/English (UK) b/rtdata/languages/English (UK) index edde8946e..db2c57068 100644 --- a/rtdata/languages/English (UK) +++ b/rtdata/languages/English (UK) @@ -865,6 +865,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light !HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength @@ -1002,6 +1003,8 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE;Exposure !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_FILTER; Filter !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_IPTC;IPTC @@ -2044,6 +2047,7 @@ TP_WBALANCE_EQBLUERED_TOOLTIP;Allows to deviate from the normal behaviour of "wh !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only !TP_SHARPENING_AMOUNT;Amount +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENING_EDRADIUS;Radius !TP_SHARPENING_EDTOLERANCE;Edge tolerance diff --git a/rtdata/languages/English (US) b/rtdata/languages/English (US) index 078989905..dacd13b4f 100644 --- a/rtdata/languages/English (US) +++ b/rtdata/languages/English (US) @@ -776,6 +776,7 @@ !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -915,6 +916,8 @@ !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE;Exposure !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_FILTER; Filter !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_IPTC;IPTC @@ -2034,6 +2037,7 @@ !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only !TP_SHARPENING_AMOUNT;Amount +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENING_EDRADIUS;Radius !TP_SHARPENING_EDTOLERANCE;Edge tolerance diff --git a/rtdata/languages/Espanol b/rtdata/languages/Espanol index 3260d167c..9cb020dcd 100644 --- a/rtdata/languages/Espanol +++ b/rtdata/languages/Espanol @@ -2459,3 +2459,7 @@ ZOOMPANEL_ZOOMOUT;Reducir Zoom\nTecla de Atajo: - !!!!!!!!!!!!!!!!!!!!!!!!! !CURVEEDITOR_CATMULLROM;Flexible +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u +!TP_SHARPENING_BLUR;Blur radius diff --git a/rtdata/languages/Euskara b/rtdata/languages/Euskara index 6d947cdd9..d763c24e3 100644 --- a/rtdata/languages/Euskara +++ b/rtdata/languages/Euskara @@ -1022,6 +1022,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1122,6 +1123,8 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2066,6 +2069,7 @@ TP_WBALANCE_TEMPERATURE;Tenperatura !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Francais b/rtdata/languages/Francais index 987774546..7f63a8796 100644 --- a/rtdata/languages/Francais +++ b/rtdata/languages/Francais @@ -2333,3 +2333,11 @@ ZOOMPANEL_ZOOMFITSCREEN;Affiche l'image entière\nRaccourci: Alt-f ZOOMPANEL_ZOOMIN;Zoom Avant\nRaccourci: + ZOOMPANEL_ZOOMOUT;Zoom Arrière\nRaccourci: - +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u +!TP_SHARPENING_BLUR;Blur radius diff --git a/rtdata/languages/Greek b/rtdata/languages/Greek index eba373871..94dba53b7 100644 --- a/rtdata/languages/Greek +++ b/rtdata/languages/Greek @@ -1021,6 +1021,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1121,6 +1122,8 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2065,6 +2068,7 @@ TP_WBALANCE_TEMPERATURE;Θερμοκρασία !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Hebrew b/rtdata/languages/Hebrew index faa279860..4fd30cfc0 100644 --- a/rtdata/languages/Hebrew +++ b/rtdata/languages/Hebrew @@ -1022,6 +1022,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1122,6 +1123,8 @@ TP_WBALANCE_TEMPERATURE;מידת חום !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2066,6 +2069,7 @@ TP_WBALANCE_TEMPERATURE;מידת חום !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Italiano b/rtdata/languages/Italiano index 0c0f66576..0ec22370d 100644 --- a/rtdata/languages/Italiano +++ b/rtdata/languages/Italiano @@ -1605,6 +1605,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1681,6 +1682,8 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. @@ -2141,6 +2144,7 @@ ZOOMPANEL_ZOOMOUT;Rimpicciolisci.\nScorciatoia: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Japanese b/rtdata/languages/Japanese index ad8996907..302a2ee75 100644 --- a/rtdata/languages/Japanese +++ b/rtdata/languages/Japanese @@ -2337,3 +2337,11 @@ ZOOMPANEL_ZOOMFITSCREEN;画像全体を画面に合わせる\nショートカッ ZOOMPANEL_ZOOMIN;ズームイン\nショートカット: + ZOOMPANEL_ZOOMOUT;ズームアウト\nショートカット: - +!!!!!!!!!!!!!!!!!!!!!!!!! +! Untranslated keys follow; remove the ! prefix after an entry is translated. +!!!!!!!!!!!!!!!!!!!!!!!!! + +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u +!TP_SHARPENING_BLUR;Blur radius diff --git a/rtdata/languages/Latvian b/rtdata/languages/Latvian index 83fd32895..a15ec130d 100644 --- a/rtdata/languages/Latvian +++ b/rtdata/languages/Latvian @@ -1022,6 +1022,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1122,6 +1123,8 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2066,6 +2069,7 @@ TP_WBALANCE_TEMPERATURE;Temperatūra !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Magyar b/rtdata/languages/Magyar index d13d6d5a4..19033e458 100644 --- a/rtdata/languages/Magyar +++ b/rtdata/languages/Magyar @@ -1291,6 +1291,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1375,6 +1376,8 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !MAIN_MSG_WRITEFAILED;Failed to write\n"%1"\n\nMake sure that the folder exists and that you have write permission to it. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TOOLTIP_BACKCOLOR0;Background color of the preview: theme-based\nShortcut: 9 !MAIN_TOOLTIP_BACKCOLOR1;Background color of the preview: black\nShortcut: 9 @@ -2124,6 +2127,7 @@ ZOOMPANEL_ZOOMOUT;Kicsinyítés - !TP_RGBCURVES_LUMAMODE_TOOLTIP;Luminosity mode allows to vary the contribution of R, G and B channels to the luminosity of the image, without altering image color. !TP_SAVEDIALOG_OK_TIP;Shortcut: Ctrl-Enter !TP_SHADOWSHLIGHTS_SHARPMASK;Sharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Nederlands b/rtdata/languages/Nederlands index 225b3ecf4..8c91bf3c8 100644 --- a/rtdata/languages/Nederlands +++ b/rtdata/languages/Nederlands @@ -2135,6 +2135,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -2185,6 +2186,8 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. !OPTIONS_BUNDLED_MISSING;The bundled profile "%1" could not be found!\n\nYour installation could be damaged.\n\nDefault internal values will be used instead. @@ -2343,6 +2346,7 @@ ZOOMPANEL_ZOOMOUT;Zoom uit\nSneltoets: - !TP_RETINEX_GAINTRANSMISSION;Gain transmission !TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_MAP;Method +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Norsk BM b/rtdata/languages/Norsk BM index 1fd3e18c1..245c3befc 100644 --- a/rtdata/languages/Norsk BM +++ b/rtdata/languages/Norsk BM @@ -1021,6 +1021,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1121,6 +1122,8 @@ TP_WBALANCE_TEMPERATURE;Temperatur !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2065,6 +2068,7 @@ TP_WBALANCE_TEMPERATURE;Temperatur !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Polish b/rtdata/languages/Polish index 916ea2b90..d0ac7f833 100644 --- a/rtdata/languages/Polish +++ b/rtdata/languages/Polish @@ -1687,6 +1687,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1763,6 +1764,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. @@ -2147,6 +2150,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Polish (Latin Characters) b/rtdata/languages/Polish (Latin Characters) index 6b18c604e..b19183f5e 100644 --- a/rtdata/languages/Polish (Latin Characters) +++ b/rtdata/languages/Polish (Latin Characters) @@ -1687,6 +1687,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1763,6 +1764,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. @@ -2147,6 +2150,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrot: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Portugues (Brasil) b/rtdata/languages/Portugues (Brasil) index 1b25b43dc..030e838ec 100644 --- a/rtdata/languages/Portugues (Brasil) +++ b/rtdata/languages/Portugues (Brasil) @@ -2248,8 +2248,11 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries !HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !PARTIALPASTE_DEHAZE;Haze removal !PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift !PREFERENCES_APPEARANCE;Appearance @@ -2313,5 +2316,6 @@ ZOOMPANEL_ZOOMOUT;Menos Zoom\nAtalho: - !TP_RETINEX_CONTEDIT_MAP;Equalizer !TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. !TP_RETINEX_MAP;Method +!TP_SHARPENING_BLUR;Blur radius !TP_TM_FATTAL_THRESHOLD;Detail !TP_WBALANCE_PICKER;Pick diff --git a/rtdata/languages/Russian b/rtdata/languages/Russian index b440470a3..28231e869 100644 --- a/rtdata/languages/Russian +++ b/rtdata/languages/Russian @@ -1770,6 +1770,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !ICCPROFCREATOR_COPYRIGHT;Copyright: @@ -1814,6 +1815,8 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !IPTCPANEL_TRANSREFERENCEHINT;Enter a number or identifier needed for workflow control or tracking. !MAIN_BUTTON_ICCPROFCREATOR;ICC Profile Creator !MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. !MONITOR_PROFILE_SYSTEM;System default @@ -2158,6 +2161,7 @@ ZOOMPANEL_ZOOMOUT;Отдалить\nГорячая клавиша: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 diff --git a/rtdata/languages/Serbian (Cyrilic Characters) b/rtdata/languages/Serbian (Cyrilic Characters) index d6e357068..29ec6210f 100644 --- a/rtdata/languages/Serbian (Cyrilic Characters) +++ b/rtdata/languages/Serbian (Cyrilic Characters) @@ -1581,6 +1581,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1656,6 +1657,8 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. @@ -2142,6 +2145,7 @@ ZOOMPANEL_ZOOMOUT;Умањује приказ слике - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Serbian (Latin Characters) b/rtdata/languages/Serbian (Latin Characters) index 4d833d202..35bbecbf0 100644 --- a/rtdata/languages/Serbian (Latin Characters) +++ b/rtdata/languages/Serbian (Latin Characters) @@ -1581,6 +1581,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1656,6 +1657,8 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. @@ -2142,6 +2145,7 @@ ZOOMPANEL_ZOOMOUT;Umanjuje prikaz slike - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Slovak b/rtdata/languages/Slovak index 0ceeab884..ff2051053 100644 --- a/rtdata/languages/Slovak +++ b/rtdata/languages/Slovak @@ -1083,6 +1083,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1177,6 +1178,8 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2075,6 +2078,7 @@ ZOOMPANEL_ZOOMOUT;Oddialiť - !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Suomi b/rtdata/languages/Suomi index 3c3cdc6c5..338107277 100644 --- a/rtdata/languages/Suomi +++ b/rtdata/languages/Suomi @@ -1023,6 +1023,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1123,6 +1124,8 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2066,6 +2069,7 @@ TP_WBALANCE_TEMPERATURE;Lämpötila [K] !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Swedish b/rtdata/languages/Swedish index 5032496a3..f36493695 100644 --- a/rtdata/languages/Swedish +++ b/rtdata/languages/Swedish @@ -1940,6 +1940,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -2015,6 +2016,8 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 !MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. !OPTIONS_BUNDLED_MISSING;The bundled profile "%1" could not be found!\n\nYour installation could be damaged.\n\nDefault internal values will be used instead. @@ -2271,6 +2274,7 @@ ZOOMPANEL_ZOOMOUT;Förminska.\nKortkommando: - !TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. !TP_RETINEX_VIEW_MASK;Mask !TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible. +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light diff --git a/rtdata/languages/Turkish b/rtdata/languages/Turkish index 39302869d..e89df45f0 100644 --- a/rtdata/languages/Turkish +++ b/rtdata/languages/Turkish @@ -1022,6 +1022,7 @@ TP_WBALANCE_TEMPERATURE;Isı !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold !HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light @@ -1122,6 +1123,8 @@ TP_WBALANCE_TEMPERATURE;Isı !MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d !MAIN_TAB_EXPORT; Fast Export !MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect !MAIN_TAB_METADATA_TOOLTIP;Shortcut: Alt-m !MAIN_TAB_RAW;Raw @@ -2065,6 +2068,7 @@ TP_WBALANCE_TEMPERATURE;Isı !TP_SHARPENEDGE_LABEL;Edges !TP_SHARPENEDGE_PASSES;Iterations !TP_SHARPENEDGE_THREE;Luminance only +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_AMOUNT;Quantity !TP_SHARPENMICRO_CONTRAST;Contrast threshold diff --git a/rtdata/languages/Ukrainian b/rtdata/languages/Ukrainian index b84516877..94c959fd5 100644 --- a/rtdata/languages/Ukrainian +++ b/rtdata/languages/Ukrainian @@ -1423,12 +1423,17 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !CURVEEDITOR_AXIS_LEFT_TAN;LT: !CURVEEDITOR_AXIS_OUT;O: !CURVEEDITOR_AXIS_RIGHT_TAN;RT: +!CURVEEDITOR_CATMULLROM;Flexible !CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node. !DONT_SHOW_AGAIN;Don't show this message again. !DYNPROFILEEDITOR_DELETE;Delete !DYNPROFILEEDITOR_EDIT;Edit !DYNPROFILEEDITOR_EDIT_RULE;Edit Dynamic Profile Rule !DYNPROFILEEDITOR_ENTRY_TOOLTIP;The matching is case insensitive.\nUse the "re:" prefix to enter\na regular expression. +!DYNPROFILEEDITOR_IMGTYPE_ANY;Any +!DYNPROFILEEDITOR_IMGTYPE_HDR;HDR +!DYNPROFILEEDITOR_IMGTYPE_PS;Pixel Shift +!DYNPROFILEEDITOR_IMGTYPE_STD;Standard !DYNPROFILEEDITOR_MOVE_DOWN;Move Down !DYNPROFILEEDITOR_MOVE_UP;Move Up !DYNPROFILEEDITOR_NEW;New @@ -1442,6 +1447,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image) !EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality. !EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end) +!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles +!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles !FILEBROWSER_RESETDEFAULTPROFILE;Reset to default !FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images. !FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. @@ -1454,12 +1461,14 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !FILECHOOSER_FILTER_TIFF;TIFF files !GENERAL_APPLY;Apply !GENERAL_ASIMAGE;As Image +!GENERAL_CURRENT;Current !GENERAL_OPEN;Open !GENERAL_RESET;Reset !GENERAL_SAVE_AS;Save as... !GENERAL_SLIDER;Slider !GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. !HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. +!HISTORY_MSG_95;L*a*b* - Chromaticity !HISTORY_MSG_166;Exposure - Reset !HISTORY_MSG_173;NR - Detail recovery !HISTORY_MSG_203;NR - Color space @@ -1642,13 +1651,32 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_486;Lens Correction - Camera !HISTORY_MSG_487;Lens Correction - Lens !HISTORY_MSG_488;Dynamic Range Compression +!HISTORY_MSG_489;DRC - Detail !HISTORY_MSG_490;DRC - Amount !HISTORY_MSG_491;White Balance !HISTORY_MSG_492;RGB Curves !HISTORY_MSG_493;L*a*b* Adjustments !HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors !HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_DUALDEMOSAIC_CONTRAST;AMaZE+VNG4 - Contrast threshold +!HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction +!HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT - Channel +!HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;CT - region C mask +!HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;CT - H mask +!HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;CT - Lightness +!HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;CT - L mask +!HISTORY_MSG_COLORTONING_LABREGION_LIST;CT - List +!HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;CT - region mask blur +!HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - region offset +!HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - region power +!HISTORY_MSG_COLORTONING_LABREGION_SATURATION;CT - Saturation +!HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;CT - region show mask +!HISTORY_MSG_COLORTONING_LABREGION_SLOPE;CT - region slope +!HISTORY_MSG_DEHAZE_DEPTH;Dehaze - Depth +!HISTORY_MSG_DEHAZE_ENABLED;Haze Removal +!HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map +!HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength +!HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold +!HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold !HISTORY_MSG_HISTMATCHING;Auto-matched tone curve !HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries !HISTORY_MSG_ICM_OUTPUT_TEMP;Output - ICC-v4 illuminant D @@ -1671,7 +1699,9 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift !HISTORY_MSG_RAW_BORDER;Raw border !HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling +!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius !HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold +!HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace !HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light !HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength !HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor @@ -1741,23 +1771,22 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !IPTCPANEL_TITLEHINT;Enter a short verbal and human readable name for the image, this may be the file name. !IPTCPANEL_TRANSREFERENCE;Job ID !IPTCPANEL_TRANSREFERENCEHINT;Enter a number or identifier needed for workflow control or tracking. -!LENSPROFILE_CORRECTION_AUTOMATCH;Auto-matched correction parameters -!LENSPROFILE_CORRECTION_LCPFILE;LCP File -!LENSPROFILE_CORRECTION_MANUAL;Manual correction parameters -!LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong. !MAIN_BUTTON_ICCPROFCREATOR;ICC Profile Creator !MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor !MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. !MAIN_TAB_ADVANCED;Advanced !MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w +!MAIN_TAB_FAVORITES;Favorites +!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u !MAIN_TAB_INSPECT; Inspect -!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: Middle grey\nShortcut: 9 -!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the Sharpening Contrast Mask.\nShortcut: None\n\nOnly works when sharpening is enabled and zoom >= 100%. +!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 +!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. !MONITOR_PROFILE_SYSTEM;System default !OPTIONS_BUNDLED_MISSING;The bundled profile "%1" could not be found!\n\nYour installation could be damaged.\n\nDefault internal values will be used instead. !OPTIONS_DEFIMG_MISSING;The default profile for non-raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead. !OPTIONS_DEFRAW_MISSING;The default profile for raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead. !PARTIALPASTE_ADVANCEDGROUP;Advanced Settings +!PARTIALPASTE_DEHAZE;Haze removal !PARTIALPASTE_EQUALIZER;Wavelet levels !PARTIALPASTE_LOCALCONTRAST;Local contrast !PARTIALPASTE_METADATA;Metadata mode @@ -1771,12 +1800,23 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PARTIALPASTE_RETINEX;Retinex !PARTIALPASTE_SOFTLIGHT;Soft light !PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_AUTOSAVE_TP_OPEN;Automatically save tools collapsed/expanded\nstate before exiting +!PREFERENCES_APPEARANCE;Appearance +!PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font +!PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color +!PREFERENCES_APPEARANCE_MAINFONT;Main font +!PREFERENCES_APPEARANCE_NAVGUIDECOLOR;Navigator guide color +!PREFERENCES_APPEARANCE_THEME;Theme +!PREFERENCES_AUTOSAVE_TP_OPEN;Save tool collapsed/expanded state on exit +!PREFERENCES_CACHECLEAR;Clear +!PREFERENCES_CACHECLEAR_ALL;Clear all cached files: +!PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: +!PREFERENCES_CACHECLEAR_ONLYPROFILES;Clear only cached processing profiles: +!PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. !PREFERENCES_CLUTSCACHE;HaldCLUT Cache !PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs !PREFERENCES_CMMBPC;Black point compensation -!PREFERENCES_CROP;Crop editing -!PREFERENCES_CROP_AUTO_FIT;Automatically zoom to fit the crop area +!PREFERENCES_CROP;Crop Editing +!PREFERENCES_CROP_AUTO_FIT;Automatically zoom to fit the crop !PREFERENCES_CROP_GUIDES;Guides shown when not editing the crop !PREFERENCES_CROP_GUIDES_FRAME;Frame !PREFERENCES_CROP_GUIDES_FULL;Original @@ -1823,15 +1863,13 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !PREFERENCES_PRTPROFILE;Color profile !PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset !PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3". -!PREFERENCES_SAVE_TP_OPEN_NOW;Save tools collapsed/expanded state now -!PREFERENCES_SELECTFONT_COLPICKER;Select Color Picker's font -!PREFERENCES_SERIALIZE_TIFF_READ;Tiff Read Settings -!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize read of tiff files -!PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;When working with folders full of uncompressed tiff files enabling this option can increase performance of thumb generation. -!PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show filmstrip toolbar +!PREFERENCES_SAVE_TP_OPEN_NOW;Save tool collapsed/expanded state now +!PREFERENCES_SERIALIZE_TIFF_READ;TIFF Read Settings +!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize reading of TIFF files +!PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Enabling this option when working with folders containing uncompressed TIFF files can increase performance of thumbnail generation. +!PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar !PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules !PREFERENCES_TAB_PERFORMANCE;Performance -!PREFERENCES_THEME;Theme !PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview !PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show !PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering @@ -1853,25 +1891,50 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. !SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. !SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. -!TOOLBAR_TOOLTIP_COLORPICKER;Lockable Color Picker\n\nWhen enabled:\nClick in the preview with left mouse button to add a color picker\nDrag it around while pressing the left mouse button\nDelete the color picker with a right mouse button click\nDelete all color pickers with Shift + Right mouse button click\nRight click away from any color picker to go back to the Hand tool +!TOOLBAR_TOOLTIP_COLORPICKER;Lockable Color Picker\n\nWhen the tool is active:\n- Add a picker: left-click.\n- Drag a picker: left-click and drag.\n- Delete a picker: right-click.\n- Delete all pickers: Ctrl+Shift+right-click.\n- Revert to hand tool: right-click outside any picker. !TP_BWMIX_MIXC;Channel Mixer !TP_BWMIX_NEUTRAL;Reset !TP_CBDL_AFT;After Black-and-White !TP_CBDL_BEF;Before Black-and-White !TP_CBDL_METHOD;Process located !TP_CBDL_METHOD_TOOLTIP;Choose whether the Contrast by Detail Levels tool is to be positioned after the Black-and-White tool, which makes it work in L*a*b* space, or before it, which makes it work in RGB space. +!TP_COLORAPP_ABSOLUTELUMINANCE;Absolute luminance +!TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;When setting manually, values above 65 are recommended. !TP_COLORAPP_FREE;Free temp+green + CAT02 + [output] +!TP_COLORAPP_MEANLUMINANCE;Mean luminance (Yb%) !TP_COLORAPP_NEUTRAL;Reset !TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values !TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 -!TP_COLORAPP_YB;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE;Yb% (mean luminance) -!TP_COLORAPP_YBSCENE_TOOLTIP;If "auto" is enabled, Yb is calculated from the mean value of the actual image's luminance +!TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;Absolute luminance of the viewing environment\n(usually 16 cd/m²). !TP_COLORTONING_LABGRID;L*a*b* color correction grid !TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 +!TP_COLORTONING_LABREGIONS;Color correction regions +!TP_COLORTONING_LABREGION_ABVALUES;a=%1 b=%2 +!TP_COLORTONING_LABREGION_CHANNEL;Channel +!TP_COLORTONING_LABREGION_CHANNEL_ALL;All +!TP_COLORTONING_LABREGION_CHANNEL_B;Blue +!TP_COLORTONING_LABREGION_CHANNEL_G;Green +!TP_COLORTONING_LABREGION_CHANNEL_R;Red +!TP_COLORTONING_LABREGION_CHROMATICITYMASK;C +!TP_COLORTONING_LABREGION_HUEMASK;H +!TP_COLORTONING_LABREGION_LIGHTNESS;Lightness +!TP_COLORTONING_LABREGION_LIGHTNESSMASK;L +!TP_COLORTONING_LABREGION_LIST_TITLE;Correction +!TP_COLORTONING_LABREGION_MASK;Mask +!TP_COLORTONING_LABREGION_MASKBLUR;Mask Blur +!TP_COLORTONING_LABREGION_OFFSET;Offset +!TP_COLORTONING_LABREGION_POWER;Power +!TP_COLORTONING_LABREGION_SATURATION;Saturation +!TP_COLORTONING_LABREGION_SHOWMASK;Show mask +!TP_COLORTONING_LABREGION_SLOPE;Slope !TP_CROP_GTHARMMEANS;Harmonic Means !TP_CROP_GTTRIANGLE1;Golden Triangles 1 !TP_CROP_GTTRIANGLE2;Golden Triangles 2 +!TP_CROP_RESETCROP;Reset +!TP_DEHAZE_DEPTH;Depth +!TP_DEHAZE_LABEL;Haze Removal +!TP_DEHAZE_SHOW_DEPTH_MAP;Show Depth Map +!TP_DEHAZE_STRENGTH;Strength !TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Auto multi-zones !TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Automatic global !TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL_TOOLTIP;Try to evaluate chroma noise\nBe careful, this calculation is average, and is quite subjective ! @@ -1930,6 +1993,15 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_ICM_WORKING_TRC_NONE;None !TP_ICM_WORKING_TRC_SLOPE;Slope !TP_ICM_WORKING_TRC_TOOLTIP;Only for built-in profiles. +!TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatically +!TP_LENSPROFILE_CORRECTION_LCPFILE;LCP file +!TP_LENSPROFILE_CORRECTION_MANUAL;Manually +!TP_LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong. +!TP_LENSPROFILE_MODE_HEADER;Select the lens profile: +!TP_LENSPROFILE_USE_CA;Chromatic aberration +!TP_LENSPROFILE_USE_GEOMETRIC;Geometric +!TP_LENSPROFILE_USE_HEADER;Select distortions to correct: +!TP_LENSPROFILE_USE_VIGNETTING;Vignetting !TP_LOCALCONTRAST_AMOUNT;Amount !TP_LOCALCONTRAST_DARKNESS;Darkness level !TP_LOCALCONTRAST_LABEL;Local Contrast @@ -1946,10 +2018,10 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows !TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical !TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter -!TP_PREPROCESS_PDAFLINESFILTER_TOOLTIP;Tries to suppress stripe noise caused by on-sensor PDAF pixels, occurring with some Sony mirrorless cameras on some backlit scenes with visible flare. !TP_PRSHARPENING_LABEL;Post-Resize Sharpening !TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. !TP_RAWCACORR_AUTOIT;Iterations +!TP_RAWCACORR_AUTOIT_TOOLTIP;This setting is available if "Auto-correction" is checked.\nAuto-correction is conservative, meaning that it often does not correct all chromatic aberration.\nTo correct the remaining chromatic aberration, you can use up to five iterations of automatic chromatic aberration correction.\nEach iteration will reduce the remaining chromatic aberration from the last iteration at the cost of additional processing time. !TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift !TP_RAWCACORR_CASTR;Strength !TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) @@ -1962,6 +2034,8 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RAW_BORDER;Border !TP_RAW_DCB;DCB !TP_RAW_DCBVNG4;DCB+VNG4 +!TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto threshold +!TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;If the checkbox is checked (recommended), RawTherapee calculates an optimum value based on flat regions in the image.\nIf there is no flat region in the image or the image is too noisy, the value will be set to 0.\nTo set the value manually, uncheck the checkbox first (reasonable values depend on the image). !TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold !TP_RAW_EAHD;EAHD !TP_RAW_FAST;Fast @@ -2008,10 +2082,10 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RAW_RCDVNG4;RCD+VNG4 !TP_RAW_VNG4;VNG4 !TP_RESIZE_ALLOW_UPSCALING;Allow Upscaling -!TP_RETINEX_CONTEDIT_HSL;Histogram equalizer HSL -!TP_RETINEX_CONTEDIT_LAB;Histogram equalizer L*a*b* -!TP_RETINEX_CONTEDIT_LH;Hue equalizer -!TP_RETINEX_CONTEDIT_MAP;Mask equalizer +!TP_RETINEX_CONTEDIT_HSL;HSL histogram +!TP_RETINEX_CONTEDIT_LAB;L*a*b* histogram +!TP_RETINEX_CONTEDIT_LH;Hue +!TP_RETINEX_CONTEDIT_MAP;Equalizer !TP_RETINEX_CURVEEDITOR_CD;L=f(L) !TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. !TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) @@ -2049,7 +2123,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RETINEX_LABEL_MASK;Mask !TP_RETINEX_LABSPACE;L*a*b* !TP_RETINEX_LOW;Low -!TP_RETINEX_MAP;Mask method +!TP_RETINEX_MAP;Method !TP_RETINEX_MAP_GAUS;Gaussian mask !TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial) !TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total) @@ -2088,6 +2162,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_RETINEX_VIEW_TRAN;Transmission - Auto !TP_RETINEX_VIEW_TRAN2;Transmission - Fixed !TP_RETINEX_VIEW_UNSHARP;Unsharp mask +!TP_SHARPENING_BLUR;Blur radius !TP_SHARPENING_CONTRAST;Contrast threshold !TP_SHARPENMICRO_CONTRAST;Contrast threshold !TP_SOFTLIGHT_LABEL;Soft Light @@ -2095,6 +2170,7 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_TM_FATTAL_AMOUNT;Amount !TP_TM_FATTAL_ANCHOR;Anchor !TP_TM_FATTAL_LABEL;Dynamic Range Compression +!TP_TM_FATTAL_THRESHOLD;Detail !TP_WAVELET_1;Level 1 !TP_WAVELET_2;Level 2 !TP_WAVELET_3;Level 3 @@ -2258,5 +2334,6 @@ ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - !TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. !TP_WAVELET_TMTYPE;Compression method !TP_WAVELET_TON;Toning +!TP_WBALANCE_PICKER;Pick !TP_WBALANCE_TEMPBIAS;AWB temperature bias !TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias". diff --git a/rtdata/languages/default b/rtdata/languages/default index 343100124..fb024b3d5 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -908,8 +908,6 @@ MAIN_TAB_ADVANCED;Advanced MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w MAIN_TAB_COLOR;Color MAIN_TAB_COLOR_TOOLTIP;Shortcut: Alt-c -MAIN_TAB_FAVORITES;Favorites -MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u MAIN_TAB_DETAIL;Detail MAIN_TAB_DETAIL_TOOLTIP;Shortcut: Alt-d MAIN_TAB_DEVELOP; Batch Edit @@ -917,6 +915,8 @@ MAIN_TAB_EXIF;Exif MAIN_TAB_EXPORT; Fast Export MAIN_TAB_EXPOSURE;Exposure MAIN_TAB_EXPOSURE_TOOLTIP;Shortcut: Alt-e +MAIN_TAB_FAVORITES;Favorites +MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u MAIN_TAB_FILTER; Filter MAIN_TAB_INSPECT; Inspect MAIN_TAB_IPTC;IPTC From e1a467501d3705de2d1a0f6544b168c1b71fa901 Mon Sep 17 00:00:00 2001 From: Morgan Hardwood Date: Wed, 9 Jan 2019 23:02:58 +0100 Subject: [PATCH 07/23] Removed invalid Ukrainian translation #5127 --- rtdata/languages/Ukrainian | 2339 ------------------------------------ 1 file changed, 2339 deletions(-) delete mode 100644 rtdata/languages/Ukrainian diff --git a/rtdata/languages/Ukrainian b/rtdata/languages/Ukrainian deleted file mode 100644 index 94c959fd5..000000000 --- a/rtdata/languages/Ukrainian +++ /dev/null @@ -1,2339 +0,0 @@ -#01 2019-01-04 Gregory Reshetniak - -ABOUT_TAB_BUILD;Версія -ABOUT_TAB_CREDITS;Розробники -ABOUT_TAB_LICENSE;Ліцензія -ABOUT_TAB_RELEASENOTES;Примітки до релізу -ABOUT_TAB_SPLASH;Екран привітання -BATCHQUEUE_AUTOSTART;Автостарт -BATCHQUEUE_AUTOSTARTHINT;Автоматично почати обробку якщо додано завдання -BATCHQUEUE_DESTFILENAME;Шлях до каталогу і назва файлу -BATCH_PROCESSING;Пакетна обробка -CURVEEDITOR_CURVE;Крива -CURVEEDITOR_CURVES;Криві -CURVEEDITOR_CUSTOM;Власна -CURVEEDITOR_DARKS;Темні -CURVEEDITOR_HIGHLIGHTS;Найсвітліші -CURVEEDITOR_LIGHTS;Світлі -CURVEEDITOR_LINEAR;Лінійна -CURVEEDITOR_LOADDLGLABEL;Відкрити файл кривої... -CURVEEDITOR_MINMAXCPOINTS;Еквалізація -CURVEEDITOR_NURBS;NURBS -CURVEEDITOR_PARAMETRIC;Параметрична -CURVEEDITOR_SAVEDLGLABEL;Записати файл кривої... -CURVEEDITOR_SHADOWS;Найтемніші -CURVEEDITOR_TOOLTIPCOPY;Скопіювати криву до буферу -CURVEEDITOR_TOOLTIPLINEAR;Повернути криву до лінії -CURVEEDITOR_TOOLTIPLOAD;Відкрити файл кривої -CURVEEDITOR_TOOLTIPPASTE;Вставити криву з буферу -CURVEEDITOR_TOOLTIPSAVE;Записати криву до файлу -CURVEEDITOR_TYPE;Тип: -DIRBROWSER_FOLDERS;Каталоги -EDITWINDOW_TITLE;Редактор зображень -EDIT_OBJECT_TOOLTIP;Показати віджет у вікні передпоказу -EDIT_PIPETTE_TOOLTIP;Щоб додати точку на кривій потрібно тримати Ctrl натискаючи ліву клавішу миші на цьому регіоні зображення.\nЩоб пересунути точку тимайте Ctrl, натисніть лівою клавішею миші, відпустіть Ctrl і, тримаючи ліву клавішу миші пересуньте курсор на нову позицію. -EXIFFILTER_APERTURE;Діафрагма -EXIFFILTER_CAMERA;Камера -EXIFFILTER_EXPOSURECOMPENSATION;Корекція експозиції -EXIFFILTER_FILETYPE;Тип файлу -EXIFFILTER_FOCALLEN;Фокусна відстань -EXIFFILTER_ISO;ISO -EXIFFILTER_LENS;Об'єктив -EXIFFILTER_METADATAFILTER;Увімкнути фільтри метаданих -EXIFFILTER_SHUTTER;Затвор -EXIFPANEL_ADDEDIT;Додати/Змінити -EXIFPANEL_ADDEDITHINT;Додати теѓ або змінити теѓ -EXIFPANEL_ADDTAGDLG_ENTERVALUE;Впиши значення -EXIFPANEL_ADDTAGDLG_SELECTTAG;Вибрати теѓ -EXIFPANEL_ADDTAGDLG_TITLE;Додати/Змінити теѓ -EXIFPANEL_KEEP;Запам'ятати -EXIFPANEL_KEEPHINT;Записати теѓи після запису вихідного файлу -EXIFPANEL_REMOVE;Видалити -EXIFPANEL_REMOVEHINT;Усунути теѓи після запису вихідного файлу -EXIFPANEL_RESET;Відновити -EXIFPANEL_RESETALL;Відновити всі -EXIFPANEL_RESETALLHINT;Повернути значення теѓів -EXIFPANEL_RESETHINT;Повернути початкові значення теѓів -EXIFPANEL_SUBDIRECTORY;Підкаталог -EXPORT_BYPASS_ALL;Вибрати / Вибрати всі -EXPORT_BYPASS_DEFRINGE;Не усувати віньетування -EXPORT_BYPASS_DIRPYRDENOISE;Не усувати шуми -EXPORT_BYPASS_DIRPYREQUALIZER;Не додавати контраст в деталях -EXPORT_BYPASS_RAW_CA;Не усувати хроматичні аберації (raw) -EXPORT_BYPASS_RAW_CCSTEPS;Не виправляти баланс кольорів (raw) -EXPORT_BYPASS_RAW_DCB_ENHANCE;Не виправляти DCB (raw) -EXPORT_BYPASS_RAW_DCB_ITERATIONS;Не ітерувати DCB (raw) -EXPORT_BYPASS_RAW_DF;Не використовувати темний кадр (raw) -EXPORT_BYPASS_RAW_FF;Не використовувати пустий кадр (raw) -EXPORT_BYPASS_RAW_GREENTHRESH;Не вирівнювати зелені тони (raw) -EXPORT_BYPASS_RAW_LINENOISE;Не зменшувати лінійні шуми (raw) -EXPORT_BYPASS_RAW_LMMSE_ITERATIONS;Не виправляти LMMSE [raw] -EXPORT_BYPASS_SHARPENEDGE;Не збільшувати детальність країв -EXPORT_BYPASS_SHARPENING;Не збільшувати детальність -EXPORT_BYPASS_SHARPENMICRO;Не збільшувати мікроконтраст -EXPORT_BYPASS_SH_HQ;Не коректувати світло-тінь -EXPORT_FASTEXPORTOPTIONS;Опції швидкого експорту -EXPORT_INSTRUCTIONS;Опції швидкого експорту дозволяють встановити налаштування для пришвидшеної генерації зображень. -EXPORT_MAXHEIGHT;Максимальна висота: -EXPORT_MAXWIDTH;Максимальна широта: -EXPORT_PUTTOQUEUEFAST; Додати до черги швидкого експорту -EXPORT_RAW_DMETHOD;Алгоритм демозаїзації -EXTPROGTARGET_1;raw -EXTPROGTARGET_2;виконано в черзі -FILEBROWSER_ADDDELTEMPLATE;Додати/Усунути шаблон... -FILEBROWSER_APPLYPROFILE;Застосувати профіль -FILEBROWSER_APPLYPROFILE_PARTIAL;Застосувати частковий профіль -FILEBROWSER_AUTODARKFRAME;Автоматично уживати темні кадри -FILEBROWSER_AUTOFLATFIELD;Автоматично уживати пусті кадри -FILEBROWSER_BROWSEPATHBUTTONHINT;Показати вибрану стежку -FILEBROWSER_BROWSEPATHHINT;Показати вибрану стежку\n Комбінація \nCtrl-o для підсвічення тексту стежки\nEnter / Ctrl-Enter Для переходу стежкою;\nEscДля відмови від змін\nShift-Esc Для зняття фокусу.\n\n ~ є символом домашьного каталогу користувача. \n! є символом каталогу зображень користувача. -FILEBROWSER_CACHE;Кеш -FILEBROWSER_CLEARPROFILE;Очистити профіль -FILEBROWSER_COLORLABEL_TOOLTIP;Колорові теѓи\n\nУживання:\nShift-Ctrl-0 Без кольору\nShift-Ctrl-1 Червоний\nShift-Ctrl-2 Жовтий\nShift-Ctrl-3 Зелений\nShift-Ctrl-4 Синій\nShift-Ctrl-5 Фіолетовий -FILEBROWSER_COPYPROFILE;Копіювати профіль -FILEBROWSER_CURRENT_NAME;Існуюча назва: -FILEBROWSER_DARKFRAME;Темний кадр -FILEBROWSER_DELETEDLGLABEL;Підтвердження усування файлу -FILEBROWSER_DELETEDLGMSG;Справді видалити зазначені %1 файл(и)? -FILEBROWSER_DELETEDLGMSGINCLPROC;Справді видалити зазначені %1 файл(и) разом з версією створеною в черзі? -FILEBROWSER_EMPTYTRASH;Очистити сміттєвий кошик -FILEBROWSER_EMPTYTRASHHINT;Очистити сміттєвий кошик без відновлення -FILEBROWSER_EXTPROGMENU;Відкрити за допомогою -FILEBROWSER_FLATFIELD;Пусте поле -FILEBROWSER_MOVETODARKFDIR;Перемістити до каталогу з темними кадрами -FILEBROWSER_MOVETOFLATFIELDDIR;Перемістити до каталогу з пустими кадрами -FILEBROWSER_NEW_NAME;Нова назва: -FILEBROWSER_OPENDEFAULTVIEWER;Відкрити в стандартній програмі перегляду -FILEBROWSER_PARTIALPASTEPROFILE;Частково вставити -FILEBROWSER_PASTEPROFILE;Вставити профіль -FILEBROWSER_POPUPCANCELJOB;Анулювати завдання -FILEBROWSER_POPUPCOLORLABEL;Кольоровий маркер -FILEBROWSER_POPUPCOLORLABEL0;Маркер: Без кольору -FILEBROWSER_POPUPCOLORLABEL1;Маркер: Червоний -FILEBROWSER_POPUPCOLORLABEL2;Маркер: Жовтий -FILEBROWSER_POPUPCOLORLABEL3;Маркер: Зелений -FILEBROWSER_POPUPCOLORLABEL4;Маркер: Синій -FILEBROWSER_POPUPCOLORLABEL5;Маркер: Фіолетовий -FILEBROWSER_POPUPCOPYTO;Копіювати до... -FILEBROWSER_POPUPFILEOPERATIONS;Операції з файлами -FILEBROWSER_POPUPMOVEEND;Перенести на кінець черги -FILEBROWSER_POPUPMOVEHEAD;Перенести на початок черги -FILEBROWSER_POPUPMOVETO;Перенести до... -FILEBROWSER_POPUPOPEN;Відкрити -FILEBROWSER_POPUPOPENINEDITOR;Відкрити в редакторі -FILEBROWSER_POPUPPROCESS;Додати до черги на обробку -FILEBROWSER_POPUPPROCESSFAST;Додати до черги швидкого експорту -FILEBROWSER_POPUPPROFILEOPERATIONS;Профілі обробки -FILEBROWSER_POPUPRANK;Оцінка -FILEBROWSER_POPUPRANK0;Прибрати оцінку -FILEBROWSER_POPUPRANK1;Оцінка 1 * -FILEBROWSER_POPUPRANK2;Оцінка 2 ** -FILEBROWSER_POPUPRANK3;Оцінка 3 *** -FILEBROWSER_POPUPRANK4;Оцінка 4 **** -FILEBROWSER_POPUPRANK5;Оцінка 5 ***** -FILEBROWSER_POPUPREMOVE;Знищити на диску -FILEBROWSER_POPUPREMOVEINCLPROC;Знищити на диску разом з результатами обробки -FILEBROWSER_POPUPRENAME;Змінити назву -FILEBROWSER_POPUPSELECTALL;Вибрати всі -FILEBROWSER_POPUPTRASH;Перенести до смітника -FILEBROWSER_POPUPUNRANK;Прибрати оцінку -FILEBROWSER_POPUPUNTRASH;Забрати з смітника -FILEBROWSER_QUERYBUTTONHINT;Очистити пошук -FILEBROWSER_QUERYHINT;Впиши частину назви щоб знайти файл. Відділяй слова комами, np.\n1001,1004,1199\n\nСлова що потрібно виключити з пошуку відмічай !=\nnp.\n!=1001,1004,1199\n\nКоманди:\nCtrl-f - перейти до поля "Пошук",\nEnter - шукати,\nEsc - очистити поле "Пошук",\nShift-Esc - вийти з поля "Пошук". -FILEBROWSER_QUERYLABEL; Пошук: -FILEBROWSER_RANK1_TOOLTIP;Оцінка 1 *\nКоманда: Shift-1 -FILEBROWSER_RANK2_TOOLTIP;Оцінка 2 *\nКоманда: Shift-2 -FILEBROWSER_RANK3_TOOLTIP;Оцінка 3 *\nКоманда: Shift-3 -FILEBROWSER_RANK4_TOOLTIP;Оцінка 4 *\nКоманда: Shift-4 -FILEBROWSER_RANK5_TOOLTIP;Оцінка 5 *\nКоманда: Shift-5 -FILEBROWSER_RENAMEDLGLABEL;Змінити назву файлу -FILEBROWSER_SELECTDARKFRAME;Вибрати темний кадр... -FILEBROWSER_SELECTFLATFIELD;Вибрати пустий кадр... -FILEBROWSER_SHOWCOLORLABEL1HINT;Показати фото з червоним теѓом.\nКоманда: Alt-1 -FILEBROWSER_SHOWCOLORLABEL2HINT;Показати фото з жовтим теѓом.\nКоманда: Alt-2 -FILEBROWSER_SHOWCOLORLABEL3HINT;Показати фото з зеленим теѓом.\nКоманда: Alt-3 -FILEBROWSER_SHOWCOLORLABEL4HINT;Показати фото з синім теѓом.\nКоманда: Alt-4 -FILEBROWSER_SHOWCOLORLABEL5HINT;Показати фото з фіолетовим теѓом.\nКоманда: Alt-5 -FILEBROWSER_SHOWDIRHINT;Wyłącza wyszstkie filtry.\nКоманда: d -FILEBROWSER_SHOWEDITEDHINT;Pokazuje edytowane zdjęcia.\nКоманда: 7 -FILEBROWSER_SHOWEDITEDNOTHINT;Pokazuje nieedytowane zdjęcia.\nКоманда: 6 -FILEBROWSER_SHOWEXIFINFO;Pokaż dane Exif.\n\nКоманди:\ni - Tryb wielu zakładek,\nAlt-i - Tryb jednej zakładki. -FILEBROWSER_SHOWRANK1HINT;Показати фото з оцінкою 1 зірочка.\nКоманда: 1 -FILEBROWSER_SHOWRANK2HINT;Показати фото з оцінкою 2 зірочки.\nКоманда: 2 -FILEBROWSER_SHOWRANK3HINT;Показати фото з оцінкою 3 зірочки.\nКоманда: 3 -FILEBROWSER_SHOWRANK4HINT;Показати фото з оцінкою 4 зірочки.\nКоманда: 4 -FILEBROWSER_SHOWRANK5HINT;Показати фото з оцінкою 5 зірочок.\nКоманда: 5 -FILEBROWSER_SHOWRECENTLYSAVEDHINT;Показати записані фото.\nКоманда: Alt-7 -FILEBROWSER_SHOWRECENTLYSAVEDNOTHINT;Показати незаписані фото.\nКоманда: Alt-6 -FILEBROWSER_SHOWTRASHHINT;Показати вміст кошика.\nКоманда: Ctrl-t -FILEBROWSER_SHOWUNCOLORHINT;Показати фото без кольорових теѓів.\nКоманда: Alt-0 -FILEBROWSER_SHOWUNRANKHINT;Показати фото без оцінок.\nКоманда: 0 -FILEBROWSER_THUMBSIZE;Розмір мініатюрок -FILEBROWSER_UNRANK_TOOLTIP;Усунути оцінку.\nКоманда: Shift-0 -FILEBROWSER_ZOOMINHINT;Збільшити мініатюрки.\n\nКоманди:\n+ - Режим кількох закладок,\nAlt-+ - Режим однієї закладки. -FILEBROWSER_ZOOMOUTHINT;Зменшити мініатюрки.\n\nКоманди:\n- - Режим кількох закладок,\nAlt-- - Режим однієї закладки. -GENERAL_ABOUT;Про програму -GENERAL_AFTER;Після -GENERAL_AUTO;Автоматично -GENERAL_BEFORE;Перед -GENERAL_CANCEL;Відмінити -GENERAL_CLOSE;Закрити -GENERAL_DISABLE;Вимкнути -GENERAL_DISABLED;Вимкнуто -GENERAL_ENABLE;Ввімкнути -GENERAL_ENABLED;Ввімкнуто -GENERAL_FILE;Файл -GENERAL_LANDSCAPE;Горизонтальний режим -GENERAL_NA;н/д -GENERAL_NO;Ні -GENERAL_NONE;Немає -GENERAL_OK;OK -GENERAL_PORTRAIT;Вертикальний режим -GENERAL_SAVE;Зберегти -GENERAL_UNCHANGED;(Без змін) -GENERAL_WARNING;Попередження -HISTOGRAM_TOOLTIP_B;Показати/Сховати гістограму синіх тонів. -HISTOGRAM_TOOLTIP_BAR;Pokazuje/Ukrywa wskaźnik RGB.\nKliknięcie prawym przyciskiem myszy na podglądzie zdjęcia blokuje/odblokowuje. -HISTOGRAM_TOOLTIP_CHRO;Pokaż/Ukryj histogram chromatyczności. -HISTOGRAM_TOOLTIP_FULL;Змінити гістограму. -HISTOGRAM_TOOLTIP_G;Показати/Сховати гістограму зелених тонів. -HISTOGRAM_TOOLTIP_L;Показати/Сховати гістограму люмінації CIELab. -HISTOGRAM_TOOLTIP_R;Показати/Сховати гістограму червоних тонів. -HISTOGRAM_TOOLTIP_RAW;Показати/Сховати гістограму raw. -HISTORY_CHANGED;Змінено -HISTORY_CUSTOMCURVE;Власна крива -HISTORY_FROMCLIPBOARD;З буферу -HISTORY_LABEL;Історія -HISTORY_MSG_1;Фотографію завантажено -HISTORY_MSG_2;Профіль завантажено -HISTORY_MSG_3;Профіль змінено -HISTORY_MSG_4;Перегляд історії -HISTORY_MSG_5;Światłość -HISTORY_MSG_6;Контраст -HISTORY_MSG_7;Чорний -HISTORY_MSG_8;Компенсація експозиції -HISTORY_MSG_9;Компенсація світла -HISTORY_MSG_10;Компресія тіней -HISTORY_MSG_11;Тональна крива -HISTORY_MSG_12;Автоматична експозиція -HISTORY_MSG_13;Зменшення експозиції -HISTORY_MSG_14;L*a*b* - Світло -HISTORY_MSG_15;L*a*b* - Контраст -HISTORY_MSG_16;- -HISTORY_MSG_17;- -HISTORY_MSG_18;- -HISTORY_MSG_19;Крива L* -HISTORY_MSG_20;Wyostrzanie -HISTORY_MSG_21;USM - Promień -HISTORY_MSG_22;USM - Siła -HISTORY_MSG_23;USM - Próg wyostrzania -HISTORY_MSG_24;USM - Wyostrz tylko krawędzie -HISTORY_MSG_25;USM - Promień detekcji krawędzi -HISTORY_MSG_26;USM - Tolerancja krawędzi -HISTORY_MSG_27;USM - Kontrola poświaty -HISTORY_MSG_28;USM - Stopień kontroli poświaty -HISTORY_MSG_29;Metoda wyostrzania -HISTORY_MSG_30;RLD - Promień -HISTORY_MSG_31;RLD - Siła -HISTORY_MSG_32;RLD - Tłumienie -HISTORY_MSG_33;RLD - Powtórzenia -HISTORY_MSG_34;LCP - Korekcja dystorsji -HISTORY_MSG_35;LCP - Korekcja winietowania -HISTORY_MSG_36;LCP - Korekcja aberacji -HISTORY_MSG_37;Automatyczna ekspozycja -HISTORY_MSG_38;Metoda balansu bieli -HISTORY_MSG_39;BB - Температура -HISTORY_MSG_40;BB - Відтінок -HISTORY_MSG_41;Tryb krzywej 1 -HISTORY_MSG_42;Крива 1 -HISTORY_MSG_43;Tryb krzywej 2 -HISTORY_MSG_44;Світлове відшумлення - Promień -HISTORY_MSG_45;Світлове відшумлення - Tolerancja krawędzi -HISTORY_MSG_46;Відшумлення кольору -HISTORY_MSG_47;Змішування світла ICC з матрицею -HISTORY_MSG_48;Тональна крива DCP -HISTORY_MSG_49;Ілюмінант DCP -HISTORY_MSG_50;Тіні/Світло -HISTORY_MSG_51;C/P - Світло -HISTORY_MSG_52;C/P - Тіні -HISTORY_MSG_53;C/P - Тональний діапазон світла -HISTORY_MSG_54;C/P - Тональний діапазон тіней -HISTORY_MSG_55;C/P - Локальний контраст -HISTORY_MSG_56;C/P - Радіус -HISTORY_MSG_57;Обертання -HISTORY_MSG_58;Віддзеркалення по горизонталі -HISTORY_MSG_59;Віддзеркалення по вертикалі -HISTORY_MSG_60;Обертання -HISTORY_MSG_61;Авто-заповнення -HISTORY_MSG_62;Корекція дисторсії об'єктиву -HISTORY_MSG_63;Вибраний снепшот -HISTORY_MSG_64;Кадрування -HISTORY_MSG_65;Корекція хроматичної аберації -HISTORY_MSG_66;Реконструкція засвітлень -HISTORY_MSG_67;Реконструкція засвітлень - Величина -HISTORY_MSG_68;Реконструкція засвітлень - Спосіб -HISTORY_MSG_69;Робочий колірний простір -HISTORY_MSG_70;Вихідний колірний простір -HISTORY_MSG_71;Вхідний колірний простір -HISTORY_MSG_72;KW - Величина -HISTORY_MSG_73;Змішувач каналів -HISTORY_MSG_74;Зміна розміру - Пропорція -HISTORY_MSG_75;Зміна розміру - Спосіб -HISTORY_MSG_76;Метадані Exif -HISTORY_MSG_77;Метадані IPTC -HISTORY_MSG_78;- -HISTORY_MSG_79;Зміна розміру - Широта -HISTORY_MSG_80;Зміна розміру - Висота -HISTORY_MSG_81;Зміна розміру -HISTORY_MSG_82;Профіль змінено -HISTORY_MSG_83;S/H - Чітка маска -HISTORY_MSG_84;Корекція перспективи -HISTORY_MSG_85;LCP -HISTORY_MSG_86;Криві RGB - режим люмінації -HISTORY_MSG_87;Усування імпульсних шумів -HISTORY_MSG_88;Поріг усування імпульсних шумів -HISTORY_MSG_89;Усування шумів -HISTORY_MSG_90;Усування шумів - Світність -HISTORY_MSG_91;Усування шумів - Хромінація -HISTORY_MSG_92;Усування шумів - Гамма -HISTORY_MSG_93;CbDL - Значення -HISTORY_MSG_94;Контраст за рівнем деталей -HISTORY_MSG_96;Крива a* -HISTORY_MSG_97;Крива b* -HISTORY_MSG_98;Алгоритм демозаїзації -HISTORY_MSG_99;Фільтр "гарячих" пікселів -HISTORY_MSG_100;Насиченість RGB -HISTORY_MSG_101;HSV - Відтінок -HISTORY_MSG_102;HSV - Насиченість -HISTORY_MSG_103;HSV - Значення -HISTORY_MSG_104;Еквалайзер HSV -HISTORY_MSG_105;Усування віньєтування -HISTORY_MSG_106;Усування віньєтування - Радіус -HISTORY_MSG_107;Усування віньєтування - Поріг -HISTORY_MSG_108;Експозиція - поріг HLC -HISTORY_MSG_109;Зміна розміру - Розмір -HISTORY_MSG_110;Зміна розміру -HISTORY_MSG_111;L*a*b* - Unikaj przycinania koloru -HISTORY_MSG_112;- -HISTORY_MSG_113;L*a*b* - Ograniczenie nasyczenia -HISTORY_MSG_114;DCB - Кількість ітерацій -HISTORY_MSG_115;DCB - Запобігання зміні кольору -HISTORY_MSG_116;DCB - Покращення -HISTORY_MSG_117;Корекція аберації - Червоні тони -HISTORY_MSG_118;Корекція аберації - Сині тони -HISTORY_MSG_119;Зменшення лінійних шумів -HISTORY_MSG_120;Вирівняння зелених тонів -HISTORY_MSG_121;Авто-корекція хроматичної аберації -HISTORY_MSG_122;Czarna klatka - Auto-wybór -HISTORY_MSG_123;Czarna klatka - Wybór -HISTORY_MSG_124;Корекція білого -HISTORY_MSG_125;Збереження світлих тонів -HISTORY_MSG_126;Пустий кадр - Файл -HISTORY_MSG_127;Пустий кадр - Авто-вибір -HISTORY_MSG_128;Пустий кадр - Інтенсивність розмивання -HISTORY_MSG_129;Пустий кадр - Тип розмивання -HISTORY_MSG_130;Авто-корекція дисторсії -HISTORY_MSG_131;RS - Luma -HISTORY_MSG_132;RS - Chroma -HISTORY_MSG_133;Вихідна гамма -HISTORY_MSG_134;Вільна гамма -HISTORY_MSG_135;Вільна гамма -HISTORY_MSG_136;Кутовий коефіцієнт гами -HISTORY_MSG_137;Рівень чорного - Зелений 1 -HISTORY_MSG_138;Рівень чорного - Червоний -HISTORY_MSG_139;Рівень чорного - Синій -HISTORY_MSG_140;Рівень чорного - Зелений 2 -HISTORY_MSG_141;Рівень чорного - З'єднати зелені -HISTORY_MSG_142;ДК - Кількість ітерацій -HISTORY_MSG_143;ДК - Сила -HISTORY_MSG_144;Мікроконтраст - Сила -HISTORY_MSG_145;Мікроконтраст - Рівномірність -HISTORY_MSG_146;Деталі контурів -HISTORY_MSG_147;Деталі контурів - тільки люмінація -HISTORY_MSG_148;Мікроконтраст -HISTORY_MSG_149;Мікроконтраст - матриця 3×3 -HISTORY_MSG_150;Знешумлення і видалення артефактів демозаїзації -HISTORY_MSG_151;Світність -HISTORY_MSG_152;Світність - пастельні тони -HISTORY_MSG_153;Світність - насичені тони -HISTORY_MSG_154;Світність - збереження тонів шкіри -HISTORY_MSG_155;Світність - запобігання зміні кольорів -HISTORY_MSG_156;Світність - об'єднати пастельні та насичені -HISTORY_MSG_157;Світність - поріг розділення пастельних та насичених тонів -HISTORY_MSG_158;ТВ - Сила -HISTORY_MSG_159;ТВ - Пошук контурів -HISTORY_MSG_160;ТВ - Обшар -HISTORY_MSG_161;ТВ - Поправка при ітерації -HISTORY_MSG_162;Тональне відображення -HISTORY_MSG_163;Криві RGB - Червоний -HISTORY_MSG_164;Криві RGB - Зелений -HISTORY_MSG_165;Криві RGB - Синій -HISTORY_MSG_167;Алгоритм демозаїзації -HISTORY_MSG_168;L*a*b* - Крива CC -HISTORY_MSG_169;L*a*b* - Крива CH -HISTORY_MSG_170;Світність - Крива HH -HISTORY_MSG_171;L*a*b* - Крива LC -HISTORY_MSG_172;L*a*b* - Обмежити LC -HISTORY_MSG_174;CIECAM02 -HISTORY_MSG_175;CAM02 - Адаптація CAT02 -HISTORY_MSG_176;CAM02 - Оточення -HISTORY_MSG_177;CAM02 - Світність сцени -HISTORY_MSG_178;CAM02 - Світність відображення -HISTORY_MSG_179;CAM02 - Модель балансу білого -HISTORY_MSG_180;CAM02 - Lightness (J) -HISTORY_MSG_181;CAM02 - Хроматичність (C) -HISTORY_MSG_182;CAM02 - Автоматичне CAT02 -HISTORY_MSG_183;CAM02 - Контраст (J) -HISTORY_MSG_184;CAM02 - Оточення сцени -HISTORY_MSG_185;CAM02 - Котроль гамуту -HISTORY_MSG_186;CAM02 - Алгоритм -HISTORY_MSG_187;CAM02 - Збереження тонів шкіри і червоних тонів -HISTORY_MSG_188;CAM02 - Яскравість (Q) -HISTORY_MSG_189;CAM02 - Контраст (Q) -HISTORY_MSG_190;CAM02 - Насиченість (S) -HISTORY_MSG_191;CAM02 - Барвистість (M) -HISTORY_MSG_192;CAM02 - Відтінок (hue, h) -HISTORY_MSG_193;CAM02 - Тональна крива 1 -HISTORY_MSG_194;CAM02 - Тональна крива 2 -HISTORY_MSG_195;CAM02 - Тональна крива 1 -HISTORY_MSG_196;CAM02 - Тональна крива 2 -HISTORY_MSG_197;CAM02 - Крива кольору -HISTORY_MSG_198;CAM02 - Крива кольору -HISTORY_MSG_199;CAM02 - Визідні гістограми -HISTORY_MSG_200;CAMO2 - Тональне відображення -HISTORY_MSG_201;Усування шумів - Хроматичність - R&G -HISTORY_MSG_202;Усування шумів - Хроматичність - B&Y -HISTORY_MSG_204;Покрокове поліпшення LMMSE -HISTORY_MSG_205;CAM02 - Галячі/пошкоджені пікселі -HISTORY_MSG_206;CAT02 - Авто-світність сцени -HISTORY_MSG_207;Усування віньєтки - Крива відтінків -HISTORY_MSG_208;BB - Вирівнювач N/C -HISTORY_MSG_210;FP - Кут -HISTORY_MSG_211;Градієнтний фільтр -HISTORY_MSG_212;Віньєтування - Сила -HISTORY_MSG_213;Віньєтування -HISTORY_MSG_214;Чорно-біле (B&W) -HISTORY_MSG_215;B&W - CM - Червоний -HISTORY_MSG_216;B&W - CM - Зелений -HISTORY_MSG_217;B&W - CM - Синій -HISTORY_MSG_218;B&W - Гамма - Червоний -HISTORY_MSG_219;B&W - Гамма - Зелений -HISTORY_MSG_220;B&W - Гамма - Синій -HISTORY_MSG_221;B&W - Кольоровий фільтр -HISTORY_MSG_222;B&W - Налаштування -HISTORY_MSG_223;B&W - CM - Оранжевий -HISTORY_MSG_224;B&W - CM - Жовтий -HISTORY_MSG_225;B&W - CM - Ціановий -HISTORY_MSG_226;B&W - CM - Маджента -HISTORY_MSG_227;B&W - CM - Пурпуровий -HISTORY_MSG_228;B&W - Вирівнювач люмінації -HISTORY_MSG_229;B&W - Вирівнювач люмінації -HISTORY_MSG_230;B&W - Tryb -HISTORY_MSG_231;B&W - Крива 'перед' -HISTORY_MSG_232;B&W - Тип кривої 'перед' -HISTORY_MSG_233;B&W - Крива 'після' -HISTORY_MSG_234;B&W - Тип кривої 'після' -HISTORY_MSG_236;- -HISTORY_MSG_238;FP - Wtapianie -HISTORY_MSG_239;FP - Siła -HISTORY_MSG_240;FP - Środek -HISTORY_MSG_241;Віньєтування - Wtapianie -HISTORY_MSG_242;Віньєтування - Округлість -HISTORY_MSG_243;Віньєтування - Радіус -HISTORY_MSG_244;Віньєтування - Сила -HISTORY_MSG_245;Віньєтування - Środek -HISTORY_MSG_246;Крива CL -HISTORY_MSG_247;Крива LH -HISTORY_MSG_248;Крива HH -HISTORY_MSG_249;KwgPS - Próg -HISTORY_MSG_250;RS - Ulepszona -HISTORY_MSG_251;B&W - Алгоритм -HISTORY_MSG_252;KwgPS - Odcienie skóry -HISTORY_MSG_253;KwgPS - Redukcja błędów -HISTORY_MSG_254;KwgPS - Odcienie skóry -HISTORY_MSG_255;RS - Filtr mediana -HISTORY_MSG_257;Koloryzacja -HISTORY_MSG_258;Koloryzacja - Kolor -HISTORY_MSG_259;Koloryzacja - Przezroczystość -HISTORY_MSG_260;Koloryzacja - Przezroczystość a*[b*] -HISTORY_MSG_261;Koloryzacja - Metoda -HISTORY_MSG_262;Koloryzacja - Przezroczystość b* -HISTORY_MSG_263;Koloryzacja - Cienie - Червоний -HISTORY_MSG_264;Koloryzacja - Cienie - Зелений -HISTORY_MSG_265;Koloryzacja - Cienie - Niebiski -HISTORY_MSG_266;Koloryzacja - Þółcienie - Czerwone -HISTORY_MSG_267;Koloryzacja - Þółcienie - Zielone -HISTORY_MSG_268;Koloryzacja - Þółcienie - Синійe -HISTORY_MSG_269;Koloryzacja - Podświetlenia - Czerwone -HISTORY_MSG_270;Koloryzacja - Podświetlenia - Zielona -HISTORY_MSG_271;Koloryzacja - Podświetlenia - Синійe -HISTORY_MSG_272;Koloryzacja - Balans -HISTORY_MSG_274;Koloryzacja - Nasycenie cieni -HISTORY_MSG_275;Koloryzacja - Nasycenie jasnych -HISTORY_MSG_276;Koloryzacja - Przezroczystość -HISTORY_MSG_277;--unused-- -HISTORY_MSG_278;Koloryzacja - Zachowaj luminancję -HISTORY_MSG_279;Koloryzacja - Cienie -HISTORY_MSG_280;Koloryzacja - Tony jasne -HISTORY_MSG_281;Koloryzacja - Siła nasycenia -HISTORY_MSG_282;Koloryzacja - Próg nasycenia -HISTORY_MSG_283;Koloryzacja - Siła -HISTORY_MSG_284;Koloryzacja - Auto ochrona przesycenia -HISTORY_MSG_285;RS - Mediana - Metoda -HISTORY_MSG_286;RS - Mediana - Typ -HISTORY_MSG_287;RS - Mediana - Powtarzanie -HISTORY_MSG_288;Puste pole - Zabezp. przed obcinaniem -HISTORY_MSG_289;Puste pole - Auto-zabezp. przed obcinaniem -HISTORY_MSG_290;Próg czerni - Червоний -HISTORY_MSG_291;Próg czerni - Зелений -HISTORY_MSG_292;Próg czerni - Синій -HISTORY_MSG_293;Symulacja Kliszy -HISTORY_MSG_294;Symulacja Kliszy - Siła -HISTORY_MSG_295;Symulacja Kliszy - Klisza -HISTORY_MSG_296;RS - Modulacja люмінації -HISTORY_MSG_298;Filtrowanie martwych pikseli -HISTORY_NEWSNAPSHOT;Nowa migawka -HISTORY_NEWSNAPSHOT_TOOLTIP;Skrót: Alt-s -HISTORY_SNAPSHOT;Migawka -HISTORY_SNAPSHOTS;Migawki -IPTCPANEL_CATEGORY;Kategoria -IPTCPANEL_CITY;Miasto -IPTCPANEL_COPYHINT;Kopiuje ustawienia IPTC do schowka -IPTCPANEL_COUNTRY;Kraj -IPTCPANEL_CREDIT;Zasługa -IPTCPANEL_CREDITHINT;Identyfikuje dostawcę zdjęcia, niekoniecznie właściciela lub autora (Credit). -IPTCPANEL_DATECREATED;Data utworzenia -IPTCPANEL_EMBEDDED;Osadzony -IPTCPANEL_EMBEDDEDHINT;Resetuje dane IPTC do domyślnych ustawień osadzonych w orginalnym zdjęciu -IPTCPANEL_HEADLINE;Nagłówek -IPTCPANEL_INSTRUCTIONS;Instrukcje -IPTCPANEL_KEYWORDS;Słowa kluczowe -IPTCPANEL_PASTEHINT;Wstawia ustawienia IPTC ze schowka -IPTCPANEL_RESET;Reset -IPTCPANEL_RESETHINT;Resetuje do domyślnych ustawień profilu -IPTCPANEL_SOURCE;Źródło -IPTCPANEL_TITLE;Tytuł -MAIN_BUTTON_FULLSCREEN;Pełen ekran -MAIN_BUTTON_NAVNEXT_TOOLTIP;Przejdź do następnego zdjęcia względem zdjęcia otwartego w Edytorze.\nSkrót: Shift-F4\n\nAby przejść do następnego zdjęcia względem miniaturki wybranej w Nawigatorze Zdjęć:\nSkrót: F4 -MAIN_BUTTON_NAVPREV_TOOLTIP;Przejdź do poprzedniego zdjęcia wzgledem zdjęcia otwartego w Edytorze.\nSkrót: Shift-F3 \n\nAby przejść do poprzedniego zdjęcia względem miniaturki wybranej w Nawigatorze Zdjęć:\nSkrót: F3 -MAIN_BUTTON_NAVSYNC_TOOLTIP;Synchronizuj Nawigator Zdjęć z Edytorem aby ukazać miniaturkę obecnie otwartego zdjęcia, oraz usuń filtry w Nawigatorze Zdjęć.\nSkrót: x\n\nJak wyżej, ale bez usuwania filtrów:\nSkrót: y\n(Miniaturka otwartego zdjęcia nie zostanie wyświetlona jesli filtr ją ukrywa). -MAIN_BUTTON_PREFERENCES;Ustawienia -MAIN_BUTTON_PUTTOQUEUE_TOOLTIP;Dodaj bieżące zdjęcie do kolejki przetwarzania Ctrl+B -MAIN_BUTTON_SAVE_TOOLTIP;Zapisz bieżące zdjęcieCtrl+S -MAIN_BUTTON_SENDTOEDITOR_TOOLTIP;Otwórz bieżące zdjęcie w zewnętrznym edytorze.\nSkrót: Ctrl+e -MAIN_BUTTON_SHOWHIDESIDEPANELS_TOOLTIP;Pokaż/Ukryj wszystkie panele boczne.\nSkrót: m -MAIN_BUTTON_UNFULLSCREEN;Zwolnij ekran -MAIN_FRAME_BATCHQUEUE;Kolejka -MAIN_FRAME_BATCHQUEUE_TOOLTIP;Przetwarzanie wsadowe\nSkrót: Ctrl-F3 -MAIN_FRAME_EDITOR;Edytor -MAIN_FRAME_EDITOR_TOOLTIP;Edytor.\nSkrót: Ctrl-F4 -MAIN_FRAME_FILEBROWSER;Przeglądarka plików -MAIN_FRAME_FILEBROWSER_TOOLTIP; Przeglądarka plików.\nSkrót: Ctrl-F2 -MAIN_FRAME_PLACES;Miejsca -MAIN_FRAME_PLACES_ADD;Dodaj -MAIN_FRAME_PLACES_DEL;Usuń -MAIN_FRAME_RECENT;Ostatnio używane foldery -MAIN_MSG_ALREADYEXISTS;Plik już istnieje. -MAIN_MSG_CANNOTLOAD;Nie można wczytać obrazu -MAIN_MSG_CANNOTSAVE;Błąd zapisu pliku -MAIN_MSG_CANNOTSTARTEDITOR;Nie mozna uruchomic edytora. -MAIN_MSG_CANNOTSTARTEDITOR_SECONDARY;Proszę wprowadzić prawidłową ścieżkę w Ustawieniach. -MAIN_MSG_EMPTYFILENAME;Nie podano nazwy pliku! -MAIN_MSG_IMAGEUNPROCESSED;Ta komenda wymaga aby wszystkie wybrane zdjęcia były wpierw wywołane poprzez kolejkę. -MAIN_MSG_NAVIGATOR;Nawigator -MAIN_MSG_OPERATIONCANCELLED;Operację anulowano -MAIN_MSG_PATHDOESNTEXIST;Ścieżka\n\n%1\n\nnie istnieje. Wybierz przawidłową ścieżkę w Ustawieniach. -MAIN_MSG_QOVERWRITE;Zastąpić? -MAIN_MSG_SETPATHFIRST;Aby użyć tej funkcji należy wpierw wybrać odpowiednią ścieżkę docelową w Ustawieniach! -MAIN_MSG_WRITEFAILED;Zapis nie powiódł się:\n\n"%1"\n\nUpewnij się, że folder istnieje oraz że można do niego zapisywać. -MAIN_TAB_COLOR;Kolor -MAIN_TAB_COLOR_TOOLTIP;Skrót: Alt-c -MAIN_TAB_DETAIL;Szczegóły -MAIN_TAB_DETAIL_TOOLTIP;Skrót: Alt-d -MAIN_TAB_DEVELOP; Przetwarzanie -MAIN_TAB_EXIF;Exif -MAIN_TAB_EXPORT; Szybki eksport -MAIN_TAB_EXPOSURE;Ekspozycja -MAIN_TAB_EXPOSURE_TOOLTIP;Skrót: Alt-e -MAIN_TAB_FILTER; Filtr -MAIN_TAB_IPTC;IPTC -MAIN_TAB_METADATA;Метадані -MAIN_TAB_METADATA_TOOLTIP;Skrót: Alt-m -MAIN_TAB_RAW;Raw -MAIN_TAB_RAW_TOOLTIP;Skrót: Alt-r -MAIN_TAB_TRANSFORM;Transformacje -MAIN_TAB_TRANSFORM_TOOLTIP;Skrót: Alt-t -MAIN_TOOLTIP_BACKCOLOR0;Kolor tła podglądu: Tematyczny\nSkrót: 9 -MAIN_TOOLTIP_BACKCOLOR1;Kolor tła podglądu: Czarny\nSkrót: 9 -MAIN_TOOLTIP_BACKCOLOR2;Kolor tła podglądu: Biały\nSkrót: 9 -MAIN_TOOLTIP_BEFOREAFTERLOCK;Zablokuj / Odblokuj widok Przed\n\nZablokuj: nie zmieniaj widoku Przed - \nPrzydatne w porównywaniu zablokowanego obrazu z obrazem na ktorym wykonano wiele zmian.\n\nOdblokuj: widok Przed będzie śledził widok Po o jeden krok do tyłu, pokazując obraz przed efektem aktualnie użytego narzędzia. -MAIN_TOOLTIP_HIDEHP;Pokaż/ukryj lewy panel (razem z historią).\nSkrót: l -MAIN_TOOLTIP_INDCLIPPEDH;Pokaż obcięte prześwietlenia.\nSkrót: < -MAIN_TOOLTIP_INDCLIPPEDS;Pokaż obcięte niedoświetlenia.\nSkrót: > -MAIN_TOOLTIP_PREVIEWB;Podgląd kanału Синійego.\nSkrót: b -MAIN_TOOLTIP_PREVIEWFOCUSMASK;Podgląd maski ostrości.\nSkrót: Shift-f\n\nDokładniejsze w przypadku zdjęc o płytkiej głębi ostrości, niskim pozimie szumów i o większym przybliżeniu. W przypadku zdjęć o wyższym poziomie szumów maska ostrości będzie dokładniejsza przy mniejszym zoomie (10-30%). -MAIN_TOOLTIP_PREVIEWG;Podgląd kanału zielonego.\nSkrót: g -MAIN_TOOLTIP_PREVIEWL;Podgląd kanału jasności.\nSkrót: v\n\n0.299*R + 0.587*G + 0.114*B -MAIN_TOOLTIP_PREVIEWR;Podgląd kanału czerwonego.\nSkrót: r -MAIN_TOOLTIP_QINFO;Informacje o zdjęciu.\nSkrót: i -MAIN_TOOLTIP_SHOWHIDELP1;Pokaż/Ukryj lewy panel.\nSkrót: l -MAIN_TOOLTIP_SHOWHIDERP1;Pokaż/Ukryj prawy panel.\nSkrót: Alt-l -MAIN_TOOLTIP_SHOWHIDETP1;Pokaż/Ukryj górny panel.\nSkrót: Shift-l -MAIN_TOOLTIP_THRESHOLD;Próg -MAIN_TOOLTIP_TOGGLE;Przełącz widok Przed/Po.\nSkrót: Shift-b -NAVIGATOR_B;B: -NAVIGATOR_G;G: -NAVIGATOR_H;H: -NAVIGATOR_LAB_A;a*: -NAVIGATOR_LAB_B;b*: -NAVIGATOR_LAB_L;L*: -NAVIGATOR_NA; -- -NAVIGATOR_R;R: -NAVIGATOR_S;S: -NAVIGATOR_V;V: -NAVIGATOR_XY_FULL;Szerokość: %1, Wysokość: %2 -NAVIGATOR_XY_NA;x: --, y: -- -PARTIALPASTE_BASICGROUP;Podstawowe ustawienia -PARTIALPASTE_CACORRECTION;Korekcja aberacji chr. -PARTIALPASTE_CHANNELMIXER;Mieszacz kanałów -PARTIALPASTE_CHANNELMIXERBW;Czarno-białe -PARTIALPASTE_COARSETRANS;Obrót dyskretny / odbicie -PARTIALPASTE_COLORAPP;CIECAM02 -PARTIALPASTE_COLORGROUP;Ustawienia związane z kolorem -PARTIALPASTE_COLORTONING;Koloryzacja -PARTIALPASTE_COMMONTRANSFORMPARAMS;Auto-wypełnianie -PARTIALPASTE_COMPOSITIONGROUP;Ustawienia kompozycji -PARTIALPASTE_CROP;Kadrowanie -PARTIALPASTE_DARKFRAMEAUTOSELECT;Auto-wybór czarnej klatki -PARTIALPASTE_DARKFRAMEFILE;Wybór czarnej klatki -PARTIALPASTE_DEFRINGE;Usuwanie widma -PARTIALPASTE_DETAILGROUP;Ustawienia szczegółowe -PARTIALPASTE_DIALOGLABEL;Częściowe wklejenie profilu przetwarzania -PARTIALPASTE_DIRPYRDENOISE;Redukcja szumu -PARTIALPASTE_DIRPYREQUALIZER;Контраст wg. poziomu detali -PARTIALPASTE_DISTORTION;Korekcja zniekształcenia -PARTIALPASTE_EPD;Tone Mapping -PARTIALPASTE_EVERYTHING;Wszystko -PARTIALPASTE_EXIFCHANGES;Exif -PARTIALPASTE_EXPOSURE;Ekspozycja -PARTIALPASTE_FILMSIMULATION;Symulacja kliszy -PARTIALPASTE_FLATFIELDAUTOSELECT;Puste pole - Auto-wybór -PARTIALPASTE_FLATFIELDBLURRADIUS;Puste pole - Promień -PARTIALPASTE_FLATFIELDBLURTYPE;Puste pole - Typ -PARTIALPASTE_FLATFIELDCLIPCONTROL;Puste pole - Zabezp. przed obcinaniem -PARTIALPASTE_FLATFIELDFILE;Puste pole - Wybór -PARTIALPASTE_GRADIENT;Filtr połówkowy -PARTIALPASTE_HSVEQUALIZER;Ekwalizator HSV -PARTIALPASTE_ICMSETTINGS;Ustawienia ICM -PARTIALPASTE_IMPULSEDENOISE;Redukcja szumów impulsowych -PARTIALPASTE_IPTCINFO;IPTC -PARTIALPASTE_LABCURVE;Regulacje L*a*b* -PARTIALPASTE_LENSGROUP;Ustawienia związane z obiektywem -PARTIALPASTE_LENSPROFILE;Profil korekcji obiektywu LCP -PARTIALPASTE_METAGROUP;Метадані -PARTIALPASTE_PCVIGNETTE;Віньєтування -PARTIALPASTE_PERSPECTIVE;Perspektywa -PARTIALPASTE_PREPROCESS_DEADPIXFILT;Filtr martwych pikseli -PARTIALPASTE_PREPROCESS_GREENEQUIL;Wyrównanie zieleni -PARTIALPASTE_PREPROCESS_HOTPIXFILT;Filtr gorących pikseli -PARTIALPASTE_PREPROCESS_LINEDENOISE;Redukcja szumów liniowych -PARTIALPASTE_RAWCACORR_AUTO;Autokorekcja aberracji chr. -PARTIALPASTE_RAWEXPOS_BLACK;Poziomy czerni -PARTIALPASTE_RAWEXPOS_LINEAR;Korekcja punktu bieli -PARTIALPASTE_RAWEXPOS_PRESER;Zachowanie prześwietleń -PARTIALPASTE_RAWGROUP;Ustawienia raw -PARTIALPASTE_RAW_DCBENHANCE;Zastosuj poprawę DCB -PARTIALPASTE_RAW_DCBITERATIONS;Liczba powtórzeń DCB -PARTIALPASTE_RAW_DMETHOD;Алгоритм demozaikowania -PARTIALPASTE_RAW_FALSECOLOR;Tłumienie fałszowania koloru -PARTIALPASTE_RAW_LMMSEITERATIONS;Kroki poprawy LMMSE -PARTIALPASTE_RESIZE;Zmiana rozmiaru -PARTIALPASTE_RGBCURVES;Krzywe RGB -PARTIALPASTE_ROTATION;Obrót -PARTIALPASTE_SHADOWSHIGHLIGHTS;Cienie/Podświetlenia -PARTIALPASTE_SHARPENEDGE;Krawędzie -PARTIALPASTE_SHARPENING;Wyostrzanie -PARTIALPASTE_SHARPENMICRO;MikroКонтраст -PARTIALPASTE_VIBRANCE;Світність -PARTIALPASTE_VIGNETTING;Korekcja winietowania -PARTIALPASTE_WHITEBALANCE;Balans bieli -PREFERENCES_ADD;Dodaj -PREFERENCES_APPLNEXTSTARTUP;wymaga ponownego uruchomienia -PREFERENCES_AUTOMONPROFILE;Automatycznie użyj systemowego profilu monitora -PREFERENCES_BATCH_PROCESSING;Przetwarzanie wsadowe -PREFERENCES_BEHADDALL;'Dodaj' wszystkie -PREFERENCES_BEHADDALLHINT;Ustaw wszystkie narzędzia w tryb Dodaj.\nZmiany parametrów w panelu edycji zbiorczej zostaną traktowane jako różnicę do poprzednich wartości. -PREFERENCES_BEHAVIOR;Zachowanie -PREFERENCES_BEHSETALL;'Ustaw' wszystkie -PREFERENCES_BEHSETALLHINT;Ustaw wszystkie narzędzia w tryb Ustaw.\nZmiany parametrów w panelu edycji zbiorczej zostaną traktowane jako absolutne, nie biorąc pod uwagę poprzednich wartości. -PREFERENCES_BLACKBODY;Wolfram -PREFERENCES_CACHEMAXENTRIES;Maksymalna liczba wpisów w pamięci podręcznej -PREFERENCES_CACHEOPTS;Opcje pamięci podręcznej -PREFERENCES_CACHETHUMBHEIGHT;Maksymalna wysokość miniatury -PREFERENCES_CIEART;CIECAM02 optymalizacja -PREFERENCES_CIEART_LABEL;Użyj precyzję zmiennoprzecinkową zamiast podwójną. -PREFERENCES_CIEART_TOOLTIP;Gdy umożliwione, kalkulacje CIECAM02 są wykonywane w notacji zmiennoprzecinkowej o pojedyńczej precyzji zamiast podwójnej. Skraca to czas egzekucji kosztem nieistotnej zmiany w jakości. -PREFERENCES_CLIPPINGIND;Pokazywanie obciętych prześwietleń/cieni -PREFERENCES_CLUTSDIR;Folder obrazów HaldCLUT -PREFERENCES_CUSTPROFBUILD;Zewnętrzny kreator profilów przetwarzania -PREFERENCES_CUSTPROFBUILDHINT;Plik wykonywalny (lub skrypt) uruchamiany kiedy trzeba wygenerować profil przetwarzania dla zdjęcia.\n\nScieżka pliku nośnego (w stylu *.ini czyli sekcje i klucze/parametry) występuje jako parametr wiersza poleceń. Plik ten zawiera przeróżne parametry oraz dane Exif dzięki którym odpowiedni program bądź skrypt może wygenerować plik PP3 według reguł.\n\nUWAGA: Twoją odpowiedzialnością jest prawidłowe użycie cudzysłowiów w przypadku ścieżek zawierających spacje i znaki specjalne. -PREFERENCES_CUSTPROFBUILDKEYFORMAT;Rodzaj kluczy -PREFERENCES_CUSTPROFBUILDKEYFORMAT_NAME;Nazwa -PREFERENCES_CUSTPROFBUILDKEYFORMAT_TID;TagID -PREFERENCES_CUSTPROFBUILDPATH;Ścieżka pliku wykonywalnego -PREFERENCES_CUTOVERLAYBRUSH;Kolor/przezroczystość maski kadrowania -PREFERENCES_D50;5000K -PREFERENCES_D55;5500K -PREFERENCES_D60;6000K -PREFERENCES_D65;6500K -PREFERENCES_DARKFRAMEFOUND;Znaleziono -PREFERENCES_DARKFRAMESHOTS;zdjęć(ia) -PREFERENCES_DARKFRAMETEMPLATES;szablonów(ny) -PREFERENCES_DATEFORMAT;Format daty -PREFERENCES_DATEFORMATHINT;Dozwolone są następujące kody formatujące:\n%y - rok\n%m - miesiąc\n%d - dzień\n\nNa przykład według standardu ISO 8601 format daty wygląda następująco:\n%y-%m-%d -PREFERENCES_DIRDARKFRAMES;Katalog z czarnymi klatkami -PREFERENCES_DIRHOME;Katalog domowy -PREFERENCES_DIRLAST;Ostatnio odwiedzony katalog -PREFERENCES_DIROTHER;Inny -PREFERENCES_DIRSELECTDLG;Wybierz katalog z obrazami po uruchomieniu... -PREFERENCES_DIRSOFTWARE;Katalog instalacyjny -PREFERENCES_EDITORLAYOUT;Układ edytora -PREFERENCES_EXTERNALEDITOR;Zewnętrzny edytor -PREFERENCES_FBROWSEROPTS;Opcje przeglądarki plików -PREFERENCES_FILEBROWSERTOOLBARSINGLEROW;Pojedynczy wiersz paska narzędzi (odznaczyć dla niskich rozdzielczości) -PREFERENCES_FILEFORMAT;Format pliku -PREFERENCES_FLATFIELDFOUND;Znaleziono -PREFERENCES_FLATFIELDSDIR;Katalog z pustymi polami -PREFERENCES_FLATFIELDSHOTS;kadry -PREFERENCES_FLATFIELDTEMPLATES;szablony -PREFERENCES_FLUOF2;Fluorescent F2 -PREFERENCES_FLUOF7;Fluorescent F7 -PREFERENCES_FLUOF11;Fluorescent F11 -PREFERENCES_FORIMAGE;Dla zdjęć innych niż raw -PREFERENCES_FORRAW;Dla zdjęć raw -PREFERENCES_GIMPPATH;Katalog, w którym zainstalowany jest GIMP -PREFERENCES_GREY;Світність Yb urządzenia wyjściowego (%) -PREFERENCES_GREY05;Yb=05 CIE L#30 -PREFERENCES_GREY10;Yb=10 CIE L#40 -PREFERENCES_GREY15;Yb=15 CIE L#45 -PREFERENCES_GREY18;Yb=18 CIE L#50 -PREFERENCES_GREY23;Yb=23 CIE L#55 -PREFERENCES_GREY30;Yb=30 CIE L#60 -PREFERENCES_GREY40;Yb=40 CIE L#70 -PREFERENCES_HISTOGRAMPOSITIONLEFT;Histogram w lewym panelu -PREFERENCES_HISTOGRAMWORKING;Zastosuj profil roboczy do obliczenia głównego histogramu i Nawigatora -PREFERENCES_HISTOGRAM_TOOLTIP;Jeśli opcja jest włączona profil roboczy jest użyty do obliczenia głównego histogramu oraz panelu Nawigatora, inaczej profil wyjściowy z korektą gamma zostanie użyty. -PREFERENCES_HLTHRESHOLD;Próg dla prześwietleń -PREFERENCES_ICCDIR;Katalog z profilami koloru ICC -PREFERENCES_IMPROCPARAMS;Domyślne parametry przetwarzania obrazu -PREFERENCES_INTENT_ABSOLUTE;Absolutnie kolorymetryczny -PREFERENCES_INTENT_PERCEPTUAL;Percepcyjny -PREFERENCES_INTENT_RELATIVE;Względnie kolorymetryczny -PREFERENCES_INTENT_SATURATION;Nasyceniowy -PREFERENCES_INTERNALTHUMBIFUNTOUCHED;Pokaż osadzoną miniaturę JPEG jeśli plik raw jest nieedytowany -PREFERENCES_LANGAUTODETECT;Użyj języka systemowego -PREFERENCES_MENUGROUPEXTPROGS;Grupuj "Otwórz za pomocą" -PREFERENCES_MENUGROUPFILEOPERATIONS;Grupuj operacje plików -PREFERENCES_MENUGROUPLABEL;Grupuj operacje etykiet -PREFERENCES_MENUGROUPPROFILEOPERATIONS;Grupuj operacje profili przetwarzania -PREFERENCES_MENUGROUPRANK;Grupuj operacje oceny -PREFERENCES_MENUOPTIONS;Opcje menu -PREFERENCES_METADATA;Метадані -PREFERENCES_MULTITAB;Tryb wielu zakładek -PREFERENCES_MULTITABDUALMON;Tryb wielu zakładek (na drugim monitorze jeśli dostępny) -PREFERENCES_NAVGUIDEBRUSH;Kolor ramki Nawigatora -PREFERENCES_OUTDIR;Katalog wyjściowy -PREFERENCES_OUTDIRFOLDER;Zapisz do katalogu -PREFERENCES_OUTDIRFOLDERHINT;Umieszcza zapisywane zdjęcia w wybranym katalogu -PREFERENCES_OUTDIRTEMPLATE;Użyj schemat -PREFERENCES_OUTDIRTEMPLATEHINT;Dozwolone są następujące kody formatujące:\n%f, %d1, %d2, ..., %p1, %p2, ..., %r, %s1, %s2, ...\n\nKody formatujące odnoszą się do różnych elementów ścieżki zdjęcia, atrybutów zdjęcia oraz do arbitralnego ciągu numerycznego operacji wsadowej.\n\nPrzykładowo, jeśli zdjęcie obrabiane ma następującą ścieżkę:\n/home/andrzej/zdjecia/2010-10-31/dsc0042.nef\nznaczenie kodów formatujących jest następujące:\n%d4 = home\n%d3 = andrzej\n%d2 = zdjecia\n%d1 = 2010-10-31\n%f = dsc0042\n%p1 = /home/tom/photos/2010-10-31/\n%p2 = /home/andrzej/zdjecia/\n%p3 = /home/andrzej/\n%p4 = /home/\n\n%r zostanie zastąpione oceną zdjęcia. Jeśli zdjęcie nie posiada oceny, %r zostanie zastąpione liczbą '0'. Jeśli zdjęcie leży w śmietniku, %r zostanie zastąpione znakiem 'x'.\n\n%s1, %s2, etc. zostanie zastąpione ciągniem numerycznym dopełnionym od jednej do dziewięciu cyfr. Ciąg ten zostanie rozpocznięty od "1" za każdym razem gdy kolejka przetwarzania zostanie uruchomiona, i liczba jest zwiększona o "1" dla każdego zapisanego obrazu.\n\nJeśli chcesz zapisać obraz wyjściowy obok obrazu wejściowego, napisz:\n%p1/%f\n\nJeśli chcesz zapisać obraz wyjściowy w folderze o nazwie "wywolane" znajdującego się w katalogu zawierającym otwarty obraz, napisz:\n%p1/wywolane/%f\n\nJeśli chcesz zapisać obraz wyjściowy w folderze o nazwie "/home/andrzej/zdjecia/wywolane/2010-10-31", napisz:\n%p2/wywolane/%d1/%f -PREFERENCES_OVERLAY_FILENAMES;Nakładaj nazwy pliku na miniatury -PREFERENCES_OVERWRITEOUTPUTFILE;Nadpisuj istniejące pliki -PREFERENCES_PANFACTORLABEL;Współczynnik -PREFERENCES_PARSEDEXT;Przetwarzane rozszerzenia -PREFERENCES_PARSEDEXTADD;Dodaj rozszerzenie -PREFERENCES_PARSEDEXTADDHINT;Proszę wprowadzić rozszerzenie i zatwierdzić przyciskiem, by dodać do listy -PREFERENCES_PARSEDEXTDELHINT;Skasuje wybrane rozszerzenie z listy -PREFERENCES_PROFILEHANDLING;Obsługa profili -PREFERENCES_PROFILELOADPR;Priorytet wczytywania profilu -PREFERENCES_PROFILEPRCACHE;Profil w pamięci podręcznej -PREFERENCES_PROFILEPRFILE;Profil przy pliku wejściowym -PREFERENCES_PROFILESAVECACHE;Zapisz parametry przetwarzania w pamięci podręcznej -PREFERENCES_PROFILESAVEINPUT;Zapisz parametry przetwarzania obok pliku wejściowego -PREFERENCES_PROPERTY;Własność -PREFERENCES_PSPATH;Katalog w którym zainstalowany jest Adobe Photoshop -PREFERENCES_SELECTFONT;Wybierz czcionkę -PREFERENCES_SELECTLANG;Wybierz język -PREFERENCES_SELECTTHEME;Wybierz temat -PREFERENCES_SET;Ustaw -PREFERENCES_SHOWBASICEXIF;Pokaż podstawowe dane Exif -PREFERENCES_SHOWDATETIME;Pokaż datę i czas -PREFERENCES_SHOWEXPOSURECOMPENSATION;Pokaż korektę ekspozycji -PREFERENCES_SHTHRESHOLD;Próg dla niedoświetleń -PREFERENCES_SINGLETAB;Tryb pojedynczej zakładki -PREFERENCES_SINGLETABVERTAB;Tryb pojedynczej zakładki, pionowy układ -PREFERENCES_SND_BATCHQUEUEDONE;Zakończono przetwarzanie wsadowe -PREFERENCES_SND_HELP;Należy wprowadzić ścieżkę do pliku, bądź pozostawić niewypełnione (brak dźwięków).\nW systemie Windows można stosować "SystemDefault", "SystemAsterisk" itp. dla dźwięków systemowych.\nW systemie Linux można stosować "complete", "window-attention" etc. dla dzwięków systemowych. -PREFERENCES_SND_LNGEDITPROCDONE;Praca edytora wykonana -PREFERENCES_SND_THRESHOLDSECS;po sekundach -PREFERENCES_STARTUPIMDIR;Katalog startowy -PREFERENCES_TAB_BROWSER;Przeglądarka plików -PREFERENCES_TAB_COLORMGR;Zarządzanie kolorami -PREFERENCES_TAB_GENERAL;Ogólne -PREFERENCES_TAB_IMPROC;Przetwarzanie obrazu -PREFERENCES_TAB_SOUND;Dźwięki -PREFERENCES_TP_LABEL;Panel narzędzi: -PREFERENCES_TP_VSCROLLBAR;Ukry pionowy pasek przesuwania -PREFERENCES_USEBUNDLEDPROFILES;Użyj załączone profile przetwarzania -PREFERENCES_VIEW;Balans bieli urządzenia wyjściowego (monitora, TV, projektora, widowni, etc.) -PREFERENCES_WORKFLOW;Tok pracy -PROFILEPANEL_COPYPPASTE;Parametry do skopiowania -PROFILEPANEL_GLOBALPROFILES;Załączone profile przetwarzania -PROFILEPANEL_LABEL;Profil przetwarzania -PROFILEPANEL_LOADDLGLABEL;Wczytaj profil przetwarzania końcowego... -PROFILEPANEL_LOADPPASTE;Parametry do załadowania -PROFILEPANEL_MODE_TIP;Tryb wypełnienia parametrów przetwarzania.\n\nWduszone: częściowe profile zostaną przetworzone w profile pełne; brakujące wartości zostana wypełnione domyślnymi, zakodowanymi w silniku RawTherapee.\n\nWyłączone: profile zostaną zastosowane takie, jakie są, zmieniając tylko te wartości, które zawierają. -PROFILEPANEL_MYPROFILES;Moje profile przetwarzania -PROFILEPANEL_PASTEPPASTE;Parametry do wklejenia -PROFILEPANEL_PCUSTOM;Własny -PROFILEPANEL_PFILE;Z pliku -PROFILEPANEL_PINTERNAL;Neutralny -PROFILEPANEL_PLASTSAVED;Ostatnio zapisany -PROFILEPANEL_SAVEDLGLABEL;Zapisz profil przetwarzania... -PROFILEPANEL_SAVEPPASTE;Parametry do zapisania -PROFILEPANEL_TOOLTIPCOPY;Skopiuj aktualny profil do schowka -PROFILEPANEL_TOOLTIPLOAD;Ładuj profil z pliku.\nCtrl+klik aby wybrać parametry do ładowania. -PROFILEPANEL_TOOLTIPPASTE;Wklej profil ze schowka.\nCtrl+klik aby wybrać parametry do wklejenia. -PROFILEPANEL_TOOLTIPSAVE;Zapisz aktualny profil.\nCtrl+klik aby wybrać parametry do zapisania. -PROGRESSBAR_LOADING;Wczytywanie obrazu... -PROGRESSBAR_LOADINGTHUMBS;Wczytywanie miniatur... -PROGRESSBAR_LOADJPEG;Ładowanie pliku JPEG... -PROGRESSBAR_LOADPNG;Ładowanie pliku PNG... -PROGRESSBAR_LOADTIFF;Ładowanie pliku TIFF... -PROGRESSBAR_NOIMAGES;Nie znaleziono żadnych obrazów -PROGRESSBAR_PROCESSING;Przetwarzanie obrazu... -PROGRESSBAR_PROCESSING_PROFILESAVED;Zapisano profil przetwarzania -PROGRESSBAR_READY;Gotowe -PROGRESSBAR_SAVEJPEG;Zapisywanie pliku JPEG... -PROGRESSBAR_SAVEPNG;Zapisywanie pliku PNG... -PROGRESSBAR_SAVETIFF;Zapisywanie pliku TIFF... -PROGRESSBAR_SNAPSHOT_ADDED;Dodano migawkę -PROGRESSDLG_PROFILECHANGEDINBROWSER;Profil zmieniony w przeglądarce -QINFO_ISO;ISO -QINFO_NOEXIF;Dane Exif niedostępne. -SAVEDLG_AUTOSUFFIX;Automatycznie dodaj przyrostek, jeżeli plik już istnieje -SAVEDLG_FILEFORMAT;Format pliku -SAVEDLG_FORCEFORMATOPTS;Wymuś opcje zapisu -SAVEDLG_JPEGQUAL;Jakość JPEG -SAVEDLG_PNGCOMPR;Kompresja PNG -SAVEDLG_PUTTOQUEUE;Umieść w kolejce przetwarzania -SAVEDLG_PUTTOQUEUEHEAD;Umieść na początku kolejki przetwarzania -SAVEDLG_PUTTOQUEUETAIL;Umieść na końcu kolejki przetwarzania -SAVEDLG_SAVEIMMEDIATELY;Zapisz natychmiast -SAVEDLG_SAVESPP;Zapisz parametry przetwarzania wraz z obrazem -SAVEDLG_SUBSAMP;Subsampling -SAVEDLG_SUBSAMP_1;Najlepsza kompresja -SAVEDLG_SUBSAMP_2;Pomiędzy -SAVEDLG_SUBSAMP_3;Najlepsza jakość -SAVEDLG_TIFFUNCOMPRESSED;Nieskompresowany TIFF -SAVEDLG_WARNFILENAME;Plik zostanie nazwany -SHCSELECTOR_TOOLTIP;Kliknij prawym przyciskiem myszki aby zresetować poycję trzech suwaków. -THRESHOLDSELECTOR_B;Dolny -THRESHOLDSELECTOR_BL;Dolny lewy -THRESHOLDSELECTOR_BR;Dolny prawy -THRESHOLDSELECTOR_HINT;Użyj Shift aby przesuwać poszczególne punkty kontrolne. -THRESHOLDSELECTOR_T;Top -THRESHOLDSELECTOR_TL;Górny lewy -THRESHOLDSELECTOR_TR;Górny prawy -TOOLBAR_TOOLTIP_CROP;Kadruj.\nSkrót: c\nMożna przesuwać obszar kadrowania za pomocą Shift-przeciągnięcia myszki -TOOLBAR_TOOLTIP_HAND;Przesuń.\nSkrót: h -TOOLBAR_TOOLTIP_STRAIGHTEN;Wyprostuj / obróć.\nSkrót: s\n\nWyznacz pionową lub poziomą poprzez narysowanie linii prowadnicy na podglądzie. Kąt obrotu zostanie pokazany obok linii prowadnicy. Punktem obrotu jest geometryczny środek obrazu. -TOOLBAR_TOOLTIP_WB;Wskaż balans bieli.\nSkrót: w -TP_BWMIX_ALGO;Алгоритм PZCRM -TP_BWMIX_ALGO_LI;Liniowy -TP_BWMIX_ALGO_SP;Efekty specjalne -TP_BWMIX_ALGO_TOOLTIP;Liniowy: mieszanie kanałów liniowo.\nEfekty specjalne: kanały zostaną mieszane nieliniowo. -TP_BWMIX_AUTOCH;Auto -TP_BWMIX_CC_ENABLED;Dopasuj barwy dopełniające -TP_BWMIX_CC_TOOLTIP;Włącz aby umożliwić automatyczne dopasowanie barw dopełniających w trybie CPŻZCNPM. -TP_BWMIX_CHANNEL;Ekwalizator люмінації -TP_BWMIX_CURVEEDITOR1;Крива 'Przed' -TP_BWMIX_CURVEEDITOR2;Крива 'Po' -TP_BWMIX_CURVEEDITOR_AFTER_TOOLTIP;Крива po konwersji obrazu na czarnobiały. -TP_BWMIX_CURVEEDITOR_BEFORE_TOOLTIP;Крива przed konwersją obrazu na czarnobiały.\nWspółczynniki koloru mogą mieć wpływ. -TP_BWMIX_CURVEEDITOR_LH_TOOLTIP;Світність według odcieni (hue) L=f(H).\nNależy zwrócić uwagę na ekstremalne ustawienia ponieważ mogą pojawić się zniekształcenia sygnału w obrazie. -TP_BWMIX_FILTER;Filtr barwny -TP_BWMIX_FILTER_BLUE;Синій -TP_BWMIX_FILTER_BLUEGREEN;Синій-Зелений -TP_BWMIX_FILTER_GREEN;Зелений -TP_BWMIX_FILTER_GREENYELLOW;Зелений-Жовтий -TP_BWMIX_FILTER_NONE;Brak -TP_BWMIX_FILTER_PURPLE;Пурпуровий -TP_BWMIX_FILTER_RED;Червоний -TP_BWMIX_FILTER_REDYELLOW;Червоний-Жовтий -TP_BWMIX_FILTER_TOOLTIP;Filtr barwny symuluje działanie prawdziwego filtru barwnego usytuowanego przed obiektywem. Filtry barwne obniżają transmitancję specyficznych kolorów a zatem mają wpływ na ich jasność, np. filtr Червоний przyciemnia Синійe niebo. -TP_BWMIX_FILTER_YELLOW;Жовтий -TP_BWMIX_GAMMA;Корекція гами -TP_BWMIX_GAM_TOOLTIP;Корекція для каналів RGB. -TP_BWMIX_LABEL;Чорно-білий -TP_BWMIX_MET;Метод -TP_BWMIX_MET_CHANMIX;Міксер каналів -TP_BWMIX_MET_DESAT;Знебарвлення -TP_BWMIX_MET_LUMEQUAL;Ekwalizator люмінації -TP_BWMIX_RGBLABEL;R: %1%% G: %2%% B: %3%% Total: %4%% -TP_BWMIX_RGBLABEL_HINT;Ostateczne wartości RGB które uwzględniają wszystkie opcje mieszacza.\n"Total" wyświetla sumę wartości RGB:\n- zawsze 100% w trybie relatywnym,\n- ponad (jaśniej) lub poniżej (ciemniej) 100% w trybie absolutnym. -TP_BWMIX_RGB_TOOLTIP;Miesza kanały RGB. Kieruj się gotowymi ustawieniami.\nNależy zwrócić uwagę na ujemne wartości ponieważ mogą pojawić się zniekształcenia sygnału w obrazie lub działać w sposób nieprzewidywalny. -TP_BWMIX_SETTING;Gotowe ustawienia -TP_BWMIX_SETTING_TOOLTIP;Różne gotowe ustawienia (klisza, krajobraz, etc.) oraz ręcznie ustawienia mieszacza kanałów. -TP_BWMIX_SET_HIGHCONTAST;Високий контраст -TP_BWMIX_SET_HIGHSENSIT;Висока чутливість -TP_BWMIX_SET_HYPERPANCHRO;Гіпер панхроматичний -TP_BWMIX_SET_INFRARED;Інфрачервоний -TP_BWMIX_SET_LANDSCAPE;Горизонтально -TP_BWMIX_SET_LOWSENSIT;Низька чутливість -TP_BWMIX_SET_LUMINANCE;Світність -TP_BWMIX_SET_NORMCONTAST;Нормальний контраст -TP_BWMIX_SET_ORTHOCHRO;Ортохроматично -TP_BWMIX_SET_PANCHRO;Панхроматично -TP_BWMIX_SET_PORTRAIT;Вертикально -TP_BWMIX_SET_RGBABS;Абсолютний RGB -TP_BWMIX_SET_RGBREL;Відносний RGB -TP_BWMIX_SET_ROYGCBPMABS;Абсолютний ROYGCBPMABS -TP_BWMIX_SET_ROYGCBPMREL;Відносний ROYGCBPMABS -TP_BWMIX_TCMODE_FILMLIKE;B&W Klisza -TP_BWMIX_TCMODE_SATANDVALBLENDING;B&W Mieszanie Nasycenia i Mocy Światła Białego -TP_BWMIX_TCMODE_STANDARD;B&W Standardowa -TP_BWMIX_TCMODE_WEIGHTEDSTD;B&W Ważona Standardowa -TP_BWMIX_VAL;L -TP_CACORRECTION_BLUE;Синій -TP_CACORRECTION_LABEL;Korekcja aberracji chromatycznej -TP_CACORRECTION_RED;Червоний -TP_CHMIXER_BLUE;Синій -TP_CHMIXER_GREEN;Зелений -TP_CHMIXER_LABEL;Mieszacz kanałów -TP_CHMIXER_RED;Червоний -TP_CHROMATABERR_LABEL;Aberracja chromatyczna -TP_COARSETRAF_TOOLTIP_HFLIP;Odbij w poziomie -TP_COARSETRAF_TOOLTIP_ROTLEFT;Obróć w lewo.\n\nSkróty:\n[ - Tryb wielu zakładek,\nAlt-[ - Tryb jednej zakładki. -TP_COARSETRAF_TOOLTIP_ROTRIGHT;Obróć w prawo.\n\nSkróty:\n] - Tryb wielu zakładek,\nAlt-] - Tryb jednej zakładki. -TP_COARSETRAF_TOOLTIP_VFLIP;Odbij w pionie -TP_COLORAPP_ADAPTSCENE;люмінації sceny -TP_COLORAPP_ADAPTSCENE_TOOLTIP;Bezwzględna Світність sceny (cd/m²).\n1)Obliczona za pomocą Exif:\nCzas naświetlania - ISO - Przysłona - Korekcja ekspozycji EV w aparacie.\n2)Obliczona również na podstawie punktu bieli raw oraz korekty ekspozycji w RawTherapee -TP_COLORAPP_ADAPTVIEWING;люмінації widowni (cd/m²) -TP_COLORAPP_ADAPTVIEWING_TOOLTIP;Bezwzględna Світність widowni\n(zazwyczaj 16cd/m²). -TP_COLORAPP_ADAP_AUTO_TOOLTIP;Jesli zaznaczone (polecamy), RawTherapee obliczy optymalną wartość na podstawie Exif.\nAby ustawic wartość ręcznie, należy wpierw odznaczyc pudło. -TP_COLORAPP_ALGO;Алгоритм -TP_COLORAPP_ALGO_ALL;Wszystkie -TP_COLORAPP_ALGO_JC;Światłość + Chroma (JC) -TP_COLORAPP_ALGO_JS;Światłość + Nasycenie (JS) -TP_COLORAPP_ALGO_QM;Jasność + Barwistość (QM) -TP_COLORAPP_ALGO_TOOLTIP;Umożliwia wybór wszystkich parametrów lub ich podzespół. -TP_COLORAPP_BADPIXSL;Filtr pikseli gorących/uszkodzonych -TP_COLORAPP_BADPIXSL_TOOLTIP;Usuwanie gorących/uszkodzonych (świecących) pikseli.\n0 = Wyłączone\n1 = Metodą Mediana\n2 = Metodą Gaussa.\nMożna również dostroić zdjęcie tak, aby unikać bardzo ciemnych miejsc.\n\nTe anomalie wynikają z limitacji CIECAM02. -TP_COLORAPP_BRIGHT;Jasność (Q) -TP_COLORAPP_BRIGHT_TOOLTIP;Jasność w CIECAM02 bierze pod uwagę luminancję bieli i różni się od jasności L*a*b* oraz RGB. -TP_COLORAPP_CHROMA;Chroma (C) -TP_COLORAPP_CHROMA_M;Barwistość (M) -TP_COLORAPP_CHROMA_M_TOOLTIP;Barwistość w CIECAM02 różni się od barwistości L*a*b* oraz RGB. -TP_COLORAPP_CHROMA_S;Nasycenie (S) -TP_COLORAPP_CHROMA_S_TOOLTIP;Nasycenie w CIECAM02 różni się od nasycenia L*a*b* oraz RGB. -TP_COLORAPP_CHROMA_TOOLTIP;Chroma w CIECAM02 różni się od chromy L*a*b* oraz RGB. -TP_COLORAPP_CIECAT_DEGREE;Adaptacja CAT02 -TP_COLORAPP_CONTRAST;Контраст (J) -TP_COLORAPP_CONTRAST_Q;Контраст (Q) -TP_COLORAPP_CONTRAST_Q_TOOLTIP;Контраст w CIECAM02 dla suwaka Q różni się od Контрастu L*a*b* oraz RGB. -TP_COLORAPP_CONTRAST_TOOLTIP;Контраст w CIECAM02 dla suwaka J różni się od Контрастu L*a*b* oraz RGB. -TP_COLORAPP_CURVEEDITOR1;Крива тональна 1 -TP_COLORAPP_CURVEEDITOR1_TOOLTIP;Pokazuje histogram L* (L*a*b*) przed CIECAM02.\nJeśli opcja "Pokaż histogramy wyjściowe CIECAM02 za krzywymi" jest włączona, pokazuje histogram J i Q po CIECAM02.\n\nJ i Q nie są pokazywane w głównym histogramie.\n\nEfekt końcowy jest przedstawiony w głównym histogramie. -TP_COLORAPP_CURVEEDITOR2;Крива тональна 2 -TP_COLORAPP_CURVEEDITOR2_TOOLTIP;Tak samo działa jak Крива тональна 1. -TP_COLORAPP_CURVEEDITOR3;Крива koloru -TP_COLORAPP_CURVEEDITOR3_TOOLTIP;Ustawienie chromy, nasycenia bądź barwistości.\n\nPokazuje histogram chromatyczności (L*a*b*) przed CIECAM02.\nJeśli opcja "Pokaż histogramy wyjściowe CIECAM02 za krzywymi" jest włączona, pokazuje histogram C, s bądź M po CIECAM02.\n\nC, s oraz M nie są pokazywane w głównym histogramie.\nEfekt końcowy jest przedstawiony w głównym histogramie. -TP_COLORAPP_DATACIE;Pokaż histogramy wyjściowe CIECAM02 za krzywymi -TP_COLORAPP_DATACIE_TOOLTIP;Kiedy opcja jest włączona, histogramy za krzywymi CIECAM02 pokazują przybliżone wartości/zakresy J lub Q, oraz C, s lub M po korekcjach CIECAM02.\nTen wybór nie ma wpływu na główny histogram.\n\nKiedy opcja jest wyłączona, histogramy za krzywymi CIECAM02 pokazują wartości L*a*b* przed korekcjami CIECAM02. -TP_COLORAPP_DEGREE_AUTO_TOOLTIP;Jeśli opcja jest zaznaczona (zalecane), RawTherapee kalkuluje wartość optymalną, która jest potem użyta przez CAT02 oraz przez całość CIECAM02.\nAby ustawić wartość ręcznie, odznacz wpierw opcję (wartości powyżej 65 zalecane). -TP_COLORAPP_DEGREE_TOOLTIP;Siła CIE Chromatic Adaptation Transform 2002 -TP_COLORAPP_GAMUT;Kontrola gamma (L*a*b*). -TP_COLORAPP_GAMUT_TOOLTIP;Włącz kontrolę gamma w trybie L*a*b*. -TP_COLORAPP_HUE;Відтінок (hue, h) -TP_COLORAPP_HUE_TOOLTIP;Відтінок (hue, h) - kąt pomiędzy 0° a 360°. -TP_COLORAPP_LABEL;CIE Color Appearance Model 2002 -TP_COLORAPP_LABEL_CAM02;Ustawienia Obrazu -TP_COLORAPP_LABEL_SCENE;Ustawienia Sceny -TP_COLORAPP_LABEL_VIEWING;Własności Widowni -TP_COLORAPP_LIGHT;Światłość (J) -TP_COLORAPP_LIGHT_TOOLTIP;Światłość w CIECAM02 różni się od światłości CIELab oraz RGB -TP_COLORAPP_MODEL;Model PB -TP_COLORAPP_MODEL_TOOLTIP;Model punktu bieli.\n\nBB [RT] + [wyjściowy]:\nBalans bieli RawTherapee jest użyty dla sceny, CIECAM02 jest ustawione na D50, i balans bieli urządzenia wyjściowego ustawiony jest w Ustawieniach > Zarządzanie Kolorami\n\nBB [RT+CAT02] + [wyjściowe]:\nUstawienia balansu bieli RawTherapee są używane przez CAT02, i balans bieli urządzenia wyjściowego jest ustawione w Ustawieniach > Zarządzanie Kolorami. -TP_COLORAPP_RSTPRO;Ochrona odcieni skóry i czerwieni -TP_COLORAPP_RSTPRO_TOOLTIP;Ochrona odcieni skóry i czerwieni (suwaki i krzywe) -TP_COLORAPP_SHARPCIE;- -TP_COLORAPP_SHARPCIE_TOOLTIP;- -TP_COLORAPP_SURROUND;Otoczenie -TP_COLORAPP_SURROUND_AVER;Średnie -TP_COLORAPP_SURROUND_DARK;Ciemne -TP_COLORAPP_SURROUND_DIM;Przyćmione -TP_COLORAPP_SURROUND_EXDARK;Bardzo Ciemne (Cut-sheet) -TP_COLORAPP_SURROUND_TOOLTIP;Zmienia barwy i kolory aby wziąć pod uwagę własności widowni urządzenia wyjściowego.\n\nŚrednie:\nŚrednie światło otoczenia (standardowe). Obraz się nie zmieni.\n\nPrzyćmione:\nPrzyćmione otoczenie (TV). Obraz stanie się troszkę ciemniejszy.\n\nCiemne:\nCiemne otoczenie (projektor). Obraz stanie się jeszczę ciemniejszy.\n\nBardzo Ciemne:\nBardzo ciemne otoczenie (cut-sheet). Obraz stanie się bardzo ciemny. -TP_COLORAPP_SURSOURCE;Ciemne otoczenie -TP_COLORAPP_SURSOURCE_TOOLTIP;Można użyć kiedy np. obraz wejściowy ma ciemne krawędzie. -TP_COLORAPP_TCMODE_BRIGHTNESS;Jasność -TP_COLORAPP_TCMODE_CHROMA;Chroma -TP_COLORAPP_TCMODE_COLORF;Barwistość -TP_COLORAPP_TCMODE_LABEL1;Tryb krzywej 1 -TP_COLORAPP_TCMODE_LABEL2;Tryb krzywej 2 -TP_COLORAPP_TCMODE_LABEL3;Tryb krzywej chromy -TP_COLORAPP_TCMODE_LIGHTNESS;Światłość -TP_COLORAPP_TCMODE_SATUR;Nasycenie -TP_COLORAPP_TONECIE;Tone mapping za pomocą jasności CIECAM02 (Q) -TP_COLORAPP_TONECIE_TOOLTIP;Jeśli ta opcja jest wyłączona, tone mapping odbywa się w przestrzeni kolorów L*a*b*, zaś jeśli jest włączona, w przestrzeni kolorów CIECAM02.\nNarzędzie Tone Mapping musi być włączone aby to utawienie działało. -TP_COLORAPP_WBCAM;BB [RT+CAT02] + [wyjściowy] -TP_COLORAPP_WBRT;BB [RT] + [wyjściowy] -TP_COLORTONING_AB;o C/L -TP_COLORTONING_AUTOSAT;Automatyczna -TP_COLORTONING_BALANCE;Balans -TP_COLORTONING_BY;o C/L -TP_COLORTONING_CHROMAC;Przezroczystość -TP_COLORTONING_COLOR;Kolor -TP_COLORTONING_CURVEEDITOR_CL_TOOLTIP;Przezroczystość chromy według люмінації oC=f(L) -TP_COLORTONING_HIGHLIGHT;Podświetlenia -TP_COLORTONING_HUE;Відтінок (hue) -TP_COLORTONING_LAB;Mieszanie L*a*b* -TP_COLORTONING_LABEL;Koloryzacja -TP_COLORTONING_LUMA;Світність -TP_COLORTONING_LUMAMODE;Zachowaj luminancję -TP_COLORTONING_LUMAMODE_TOOLTIP;Світність zostanie zachowana przy zmianie kolorów. -TP_COLORTONING_METHOD;Metoda -TP_COLORTONING_METHOD_TOOLTIP;"Mieszanie L*a*b*", "Suwaki RGB" oraz "Krzywe RGB" stosują interpolację do mieszania kolorów.\n"Balansowanie kolorów (cienie, półcienie, podświetlenia)" oraz "Nasycenie - Dwa Kolory" stosują kolory bezpośrednio.\n\nNarzędzie "Czarno-białe" można używac jednocześnie z narzędziem "Koloryzacji", co umożliwi tonowanie zdjęcia. -TP_COLORTONING_MIDTONES;Półcienie -TP_COLORTONING_NEUTRAL;Zresetuj suwaki -TP_COLORTONING_NEUTRAL_TIP;Zresetuj wszystkie wartości (cienie, półcienie, podświetlenia) na domyślne. -TP_COLORTONING_OPACITY;Przezroczystość -TP_COLORTONING_RGBCURVES;RGB - Krzywe -TP_COLORTONING_RGBSLIDERS;RGB - Suwaki -TP_COLORTONING_SA;Ochrona przed przesyceniem -TP_COLORTONING_SATURATEDOPACITY;Śiła -TP_COLORTONING_SATURATIONTHRESHOLD;Próg -TP_COLORTONING_SHADOWS;Cienie -TP_COLORTONING_SPLITCO;Cienie/półcienie/podświetlenia -TP_COLORTONING_SPLITCOCO;Balans kolorów - cienie/półcienie/podświetlenia -TP_COLORTONING_SPLITLR;Nasycenie - dwa kolory -TP_COLORTONING_STR;Siła -TP_COLORTONING_STRENGTH;Siła -TP_COLORTONING_TWO2;Specjalna chroma 'dwa kolory' -TP_COLORTONING_TWOALL;Specjalna chroma -TP_COLORTONING_TWOBY;Specjalne a* i b* -TP_COLORTONING_TWOCOLOR_TOOLTIP;Standardowa chroma:\nLiniowe mieszanie kanałów, a* = b*.\n\nSpecjalna chroma:\nLiniowe mieszanie kanałów, a* = b*, ale nieograniczone - spróbuj krzywą zagiąc pod przekątną.\n\nSpecialne a* i b*:\nLiniowe nieograniczone mieszanie kanałów z osobnymi krzywymi dla a* i b*. Przeznaczone dla efektów specjalnych.\n\nSpecjalna chroma - dwa kolory:\nBardziej nieprzewidywalne. -TP_COLORTONING_TWOSTD;Standardowa chroma -TP_CROP_FIXRATIO;Zablokuj proporcje -TP_CROP_GTDIAGONALS;Przekątna -TP_CROP_GTEPASSPORT;Paszport biometryczny -TP_CROP_GTFRAME;Ramka -TP_CROP_GTGRID;Siatka -TP_CROP_GTNONE;Nic -TP_CROP_GTRULETHIRDS;Trójpodział -TP_CROP_GUIDETYPE;Typ pomocy: -TP_CROP_H;Wysokość -TP_CROP_LABEL;Kadrowanie -TP_CROP_PPI;PPI= -TP_CROP_SELECTCROP;Wybierz kadr -TP_CROP_W;Szerokość -TP_CROP_X;X -TP_CROP_Y;Y -TP_DARKFRAME_AUTOSELECT;Autowybór -TP_DARKFRAME_LABEL;Czarna klatka -TP_DEFRINGE_LABEL;Usuwanie widma -TP_DEFRINGE_RADIUS;Promień -TP_DEFRINGE_THRESHOLD;Próg -TP_DIRPYRDENOISE_CHROMINANCE_BLUEYELLOW;Chrominancja - Błękit-żółć -TP_DIRPYRDENOISE_CHROMINANCE_MASTER;Chrominancja - Główna -TP_DIRPYRDENOISE_CHROMINANCE_REDGREEN;Chrominancja - Czerwień-zieleń -TP_DIRPYRDENOISE_ENH;Tryb ulepszony -TP_DIRPYRDENOISE_ENH_TOOLTIP;Ulepsza jakość usuwania szumów kosztem około 20% wzrostu czasu przetwarzania. -TP_DIRPYRDENOISE_LUMINANCE_CURVE;Крива люмінації -TP_DIRPYRDENOISE_LUMINANCE_DETAIL;Szczegółowość люмінації -TP_DIRPYRDENOISE_LUMINANCE_SMOOTHING;Luminacja -TP_DIRPYRDENOISE_MAIN_COLORSPACE;Metoda -TP_DIRPYRDENOISE_MAIN_COLORSPACE_LABEL;Redukcja szumu -TP_DIRPYRDENOISE_MAIN_COLORSPACE_RGB;RGB -TP_DIRPYRDENOISE_MAIN_COLORSPACE_TOOLTIP;Dla obrazów raw można używać metody RGB oraz L*a*b*.\n\nDla obrazów nie-raw metoda L*a*b* zostanie użyta niezależnie od wyboru. -TP_DIRPYRDENOISE_MAIN_GAMMA;Gamma -TP_DIRPYRDENOISE_MAIN_GAMMA_TOOLTIP;Gamma skupia siłę redukcji szumów na danym predziale zakresu tonalnego. Mniejsze wartości gamma powodują skupienie na ciemniejszych barwach, natomiast większe wartości rozciągną zakres działania również na barwy jasne. -TP_DIRPYRDENOISE_MAIN_MODE;Jakość -TP_DIRPYRDENOISE_MAIN_MODE_AGGRESSIVE;Wysoka -TP_DIRPYRDENOISE_MAIN_MODE_CONSERVATIVE;Standardowa -TP_DIRPYRDENOISE_MAIN_MODE_TOOLTIP;Jakość może zostać dopasowana do wzoru szumów. Ustawienie "wysoka" ulepsza odszumianie około 20% wzrostu czasu przetwarzania. -TP_DIRPYRDENOISE_MEDIAN_METHOD;Metoda mediana -TP_DIRPYRDENOISE_MEDIAN_METHOD_LAB;L*a*b* -TP_DIRPYRDENOISE_MEDIAN_METHOD_LABEL;Filtr Mediana -TP_DIRPYRDENOISE_MEDIAN_METHOD_LUMINANCE;Tylko Світність -TP_DIRPYRDENOISE_MEDIAN_METHOD_RGB;RGB -TP_DIRPYRDENOISE_MEDIAN_METHOD_TOOLTIP;Przy użyciu metod "tylko Світність" oraz "L*a*b*", filtrowanie mediana zostanie wykonane prosto po funkcji falki w procesie odszumiania.\nW trybie "RGB" filtrowanie to zostanie wykonana pod koniec calego procesu. -TP_DIRPYRDENOISE_MEDIAN_PASSES;Liczba powtórzeń mediana -TP_DIRPYRDENOISE_MEDIAN_TYPE;Rodzaj mediana -TP_DIRPYREQUALIZER_ALGO;Zakres odcieni skóry -TP_DIRPYREQUALIZER_ALGO_TOOLTIP;- -TP_DIRPYREQUALIZER_HUESKIN;Відтінок skóry -TP_DIRPYREQUALIZER_HUESKIN_TOOLTIP;Piramida wyznacza zakres kolorów uważany jako zakres odcieni skóry. Większość odcieni skóry - białej, czarnej, i pomiędzy - ma tę samą Відтінок. Małe poprawki są dopuszczalne, jednak jeśli potrzebna jest większa zmiana w lewo lub prawo, lub jeśli są widoczne artefakty, to najprawdopobniej balans bieli jest niepoprawny. -TP_DIRPYREQUALIZER_LABEL;Контраст wg. precyzji detali -TP_DIRPYREQUALIZER_LUMACOARSEST;Zgrubne -TP_DIRPYREQUALIZER_LUMACONTRAST_MINUS;Контраст- -TP_DIRPYREQUALIZER_LUMACONTRAST_PLUS;Контраст+ -TP_DIRPYREQUALIZER_LUMAFINEST;Delikatne -TP_DIRPYREQUALIZER_LUMANEUTRAL;Neutralne -TP_DIRPYREQUALIZER_SKIN;Ochrona/celowanie odcieni skóry -TP_DIRPYREQUALIZER_SKIN_TOOLTIP;Przy -100 oddziaływanie efektu odbywa się wyłącznie na odcieniach skóry.\nPrzy 0 oddziaływanie efektu odbywa się jednakowo na wszystkich odcieniach.\nPrzy +100 odcienie skóry są pomijane podczas gdy oddziaływanie odbywa się na wszystkich pozostałych odcieniach. -TP_DIRPYREQUALIZER_THRESHOLD;Próg -TP_DIRPYREQUALIZER_TOOLTIP;Zapobiega artefaktom w strefach przejścia pomiędzy odcieniom skóry (hue, chrominancja, Світність) a pozostałym odcieniom. -TP_DISTORTION_AMOUNT;Siła -TP_DISTORTION_LABEL;Dystorsja -TP_EPD_EDGESTOPPING;Wyszukiwanie krawędzi -TP_EPD_LABEL;Tone Mapping -TP_EPD_REWEIGHTINGITERATES;Powtarzanie rozważania -TP_EPD_SCALE;Skala -TP_EPD_STRENGTH;Siła -TP_EPD_TOOLTIP;Tone mapping może się odbyć w przestrzeni kolorów L*a*b* (domyślnie) oraz CIECAM02.\n\nAby wykonać tone mapping w przestrzeni CIECAM02 należy włączyć następujące ustawienia:\n1. CIECAM02\n2. Алгоритм="Jasność + Barwistość (QM)"\n3. "Tone mapping za pomocą jasności CIECAM02 (Q)" -TP_EXPOSURE_AUTOLEVELS;Wyrównaj poziomy -TP_EXPOSURE_AUTOLEVELS_TIP;Dokonaj automatycznego ustawienia parametrów ekspozycji na podstawie analizy obrazu -TP_EXPOSURE_BLACKLEVEL;Czerń -TP_EXPOSURE_BRIGHTNESS;Jasność -TP_EXPOSURE_CLIP;Przytnij % -TP_EXPOSURE_CLIP_TIP;Ułamek pikseli ktore mają zostać rozjaśnione do punktu prześwietlenia podczas automatycznego wyrównania poziomów. -TP_EXPOSURE_COMPRHIGHLIGHTS;Kompresja podświetleń -TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD;Próg kompresji podświetleń -TP_EXPOSURE_COMPRSHADOWS;Kompresja cieni -TP_EXPOSURE_CONTRAST;Контраст -TP_EXPOSURE_CURVEEDITOR;Крива тональна -TP_EXPOSURE_CURVEEDITOR1;Крива тональна 1 -TP_EXPOSURE_CURVEEDITOR2;Крива тональна 2 -TP_EXPOSURE_CURVEEDITOR2_TOOLTIP;Więcej informacji na temat optymalnego wykorzystania obu krzywych jest dostępne w podręczniku (RawTherapee Manual) w dziale:\nThe Toolbox > Exposure Tab > Exposure Panel > Tone Curve\n(Narzędzie > Zakładka Ekspozycji > Krzywe Tonalne) -TP_EXPOSURE_EXPCOMP;Korekcja ekspozycji (EV) -TP_EXPOSURE_LABEL;Ekspozycja -TP_EXPOSURE_SATURATION;Nasycenie -TP_EXPOSURE_TCMODE_FILMLIKE;Klisza -TP_EXPOSURE_TCMODE_LABEL1;Tryb krzywej 1 -TP_EXPOSURE_TCMODE_LABEL2;Tryb krzywej 2 -TP_EXPOSURE_TCMODE_SATANDVALBLENDING;Mieszanie nasycenia i mocy światła białego -TP_EXPOSURE_TCMODE_STANDARD;Standardowa -TP_EXPOSURE_TCMODE_WEIGHTEDSTD;Ważona standardowa -TP_EXPOS_BLACKPOINT_LABEL;Punkt czerni raw -TP_EXPOS_WHITEPOINT_LABEL;Punkt bieli raw -TP_FILMSIMULATION_LABEL;Symulacja Kliszy -TP_FILMSIMULATION_STRENGTH;Siła -TP_FILMSIMULATION_ZEROCLUTSFOUND;Ustaw folder HaldCLUT w Ustawieniach -TP_FLATFIELD_AUTOSELECT;Autowybór -TP_FLATFIELD_BLURRADIUS;Promień rozmycia -TP_FLATFIELD_BLURTYPE;Typ rozmycia -TP_FLATFIELD_BT_AREA;Obszar -TP_FLATFIELD_BT_HORIZONTAL;Poziomy -TP_FLATFIELD_BT_VERTHORIZ;Poziomy + pionowy -TP_FLATFIELD_BT_VERTICAL;Pionowy -TP_FLATFIELD_CLIPCONTROL;Zabezpieczenie przed obcinaniem -TP_FLATFIELD_CLIPCONTROL_TOOLTIP;Funkcja ta chroni przed obcinaniem podświetleń które może zaistnieć przy stosowaniu obrazów type "puste pole". Należy zachować ostrożność, ponieważ jeśli obcięte rejony istnieją przed zastosowaniem pustego pola, funkcja ta może spowodować zabarwienie tych rejonów które powinny być białe. -TP_FLATFIELD_LABEL;Puste pole -TP_GAMMA_CURV;Gamma -TP_GAMMA_FREE;Dowolna gamma -TP_GAMMA_OUTPUT;Wyjściowa gamma -TP_GAMMA_SLOP;Nachylenie (liniowy) -TP_GENERAL_11SCALE_TOOLTIP;Efekty tego narzędzia są widoczne bądź poprawne przy przybliżeniu 100% lub więcej. -TP_GRADIENT_CENTER;Środek -TP_GRADIENT_CENTER_X;Środek X -TP_GRADIENT_CENTER_X_TOOLTIP;Przesuń filtr do lewej (ujemne wartości) lub prawej (dodatne wartości). -TP_GRADIENT_CENTER_Y;Środek Y -TP_GRADIENT_CENTER_Y_TOOLTIP;Przesuń filtr do góry (ujemne wartości) lub do dołu (dodatne wartości). -TP_GRADIENT_DEGREE;Kąt -TP_GRADIENT_DEGREE_TOOLTIP;Kąt obrotu filtra w stopniach. -TP_GRADIENT_FEATHER;Wtapianie -TP_GRADIENT_FEATHER_TOOLTIP;Szerokośc nachylenia zbocza w procentach przekątnej. -TP_GRADIENT_LABEL;Filtr Połówkowy -TP_GRADIENT_STRENGTH;Siła -TP_GRADIENT_STRENGTH_TOOLTIP;Śiła filtru w jednostkach EV. -TP_HLREC_BLEND;Mieszanie -TP_HLREC_CIELAB;Mieszanie koloru CIELab -TP_HLREC_COLOR;Propagacja koloru -TP_HLREC_ENA_TOOLTIP;Może zostać automatycznie włączone w skutek działania automatycznej ekspozycji -TP_HLREC_LABEL;Odzyskiwanie prześwietleń -TP_HLREC_LUMINANCE;Odzyskiwanie люмінації -TP_HLREC_METHOD;Metoda: -TP_HSVEQUALIZER_CHANNEL;Kanał -TP_HSVEQUALIZER_HUE;H -TP_HSVEQUALIZER_LABEL;Ekwalizator HSV -TP_HSVEQUALIZER_SAT;S -TP_HSVEQUALIZER_VAL;V -TP_ICM_BLENDCMSMATRIX;Tłumienie prześwietleń danymi z matrycy -TP_ICM_BLENDCMSMATRIX_TOOLTIP;Włącz odzyskiwanie prześwietlonych regionow jesli profil ICC wykorzystuje LUT (tablicowanie). -TP_ICM_DCPILLUMINANT;Iluminant -TP_ICM_DCPILLUMINANT_INTERPOLATED;Interpolowany -TP_ICM_DCPILLUMINANT_TOOLTIP;Wybierz który osadzony iluminant DCP należy użyć. Domyślną opcją jest "interpolowany", czyli wartość jest mieszaniną pomiędzy dwoma osadzonymi wartościami iluminantu zależnie od balansu bieli. Ten wybór jest możliwy jedynie kiedy DCP zawiera dwa iluminanty z możliwościa interpolacji. -TP_ICM_INPUTCAMERA;Domyślny aparatu -TP_ICM_INPUTCAMERAICC;Domyślny aparatu lub ICC -TP_ICM_INPUTCAMERAICC_TOOLTIP;Uzyj profil ICC stworzony specjalnie na potrzeby RawTherapee. Jest bardziej dokładny niż domyślny matrycowy profil ICC, lecz dostępny tylko dla niektórych aparatów. -TP_ICM_INPUTCAMERA_TOOLTIP;Użyj prostej domyślnej matrycy kolorów z DCRAW bądź zapisanej w DNG. -TP_ICM_INPUTCUSTOM;Własny -TP_ICM_INPUTCUSTOM_TOOLTIP;Wczytaj własny profil ICC z pliku. -TP_ICM_INPUTDLGLABEL;Wybierz wejściowy profil ICC... -TP_ICM_INPUTEMBEDDED;Jeśli to możliwe, użyj osadzonego -TP_ICM_INPUTEMBEDDED_TOOLTIP;Użyj profil ICC zapisany w plikach innych niż raw. -TP_ICM_INPUTNONE;Bez profilu -TP_ICM_INPUTNONE_TOOLTIP;Nie używaj żadnego profilu kolorów. Pożyteczne jedynie w wyjątkowych przypadkach. -TP_ICM_INPUTPROFILE;Profil wejściowy -TP_ICM_LABEL;ICM -TP_ICM_NOICM;Brak ICM: Wyjście sRGB -TP_ICM_OUTPUTPROFILE;Profil wyjściowy -TP_ICM_SAVEREFERENCE_TOOLTIP;Zapisz liniowy obraz TIFF zanim profil wejściowy zostanie zastosowany. Obraz ten można użyć do kalibracji oraz do wytworzenia profilu aparatu. -TP_ICM_TONECURVE;Użyj krzywą tonalną z DCP -TP_ICM_TONECURVE_TOOLTIP;Włącz aby użyć krzywą tonalną znajdującą się w profilu DCP. Opcja ta jest tylko aktywna jeśli profil DCP zawiera krzywą tonalną. -TP_ICM_WORKINGPROFILE;Profil roboczy -TP_IMPULSEDENOISE_LABEL;Redukcja Szumów Impulsowych -TP_IMPULSEDENOISE_THRESH;Próg -TP_LABCURVE_AVOIDCOLORSHIFT;Zapobiegaj zmianom koloru -TP_LABCURVE_AVOIDCOLORSHIFT_TOOLTIP;Umieszcza kolory w gamie roboczej przestrzeni kolorów i stosuje korektę Munsell'a -TP_LABCURVE_BRIGHTNESS;Światłość -TP_LABCURVE_CHROMATICITY;Chromatyczność -TP_LABCURVE_CHROMA_TOOLTIP;Aby zastosować tonowanie zdjęcia B&W, ustaw chromatyczność na -100. -TP_LABCURVE_CONTRAST;Контраст -TP_LABCURVE_CURVEEDITOR;Крива luminacji -TP_LABCURVE_CURVEEDITOR_A_RANGE1;Zielone Nasycone -TP_LABCURVE_CURVEEDITOR_A_RANGE2;Zielone Pastelowe -TP_LABCURVE_CURVEEDITOR_A_RANGE3;Czerwone Pastelowe -TP_LABCURVE_CURVEEDITOR_A_RANGE4;Czerwone Nasycone -TP_LABCURVE_CURVEEDITOR_B_RANGE1;Синійe Nasycone -TP_LABCURVE_CURVEEDITOR_B_RANGE2;Синійe Pastelowe -TP_LABCURVE_CURVEEDITOR_B_RANGE3;Żółte Pastelowe -TP_LABCURVE_CURVEEDITOR_B_RANGE4;Żółte Nasycone -TP_LABCURVE_CURVEEDITOR_CC;CC -TP_LABCURVE_CURVEEDITOR_CC_RANGE1;Neutralne -TP_LABCURVE_CURVEEDITOR_CC_RANGE2;Mętne -TP_LABCURVE_CURVEEDITOR_CC_RANGE3;Pastelowe -TP_LABCURVE_CURVEEDITOR_CC_RANGE4;Nasycone -TP_LABCURVE_CURVEEDITOR_CC_TOOLTIP;Chromatyczność według chromatyczności C=f(C). -TP_LABCURVE_CURVEEDITOR_CH;CH -TP_LABCURVE_CURVEEDITOR_CH_TOOLTIP;Chromatyczność według odcieni (hue) C=f(H) -TP_LABCURVE_CURVEEDITOR_CL;CL -TP_LABCURVE_CURVEEDITOR_CL_TOOLTIP;Chromatyczność według люмінації C=f(L) -TP_LABCURVE_CURVEEDITOR_HH;HH -TP_LABCURVE_CURVEEDITOR_HH_TOOLTIP;Відтінок (hue) według odcieni H=f(H) -TP_LABCURVE_CURVEEDITOR_LC;LC -TP_LABCURVE_CURVEEDITOR_LC_TOOLTIP;Світність według chromatyczności L=f(C) -TP_LABCURVE_CURVEEDITOR_LH;LH -TP_LABCURVE_CURVEEDITOR_LH_TOOLTIP;Luminance według odcieni (hue) L=f(H) -TP_LABCURVE_CURVEEDITOR_LL_TOOLTIP;Світність według люмінації L=f(L) -TP_LABCURVE_LABEL;Regulacja L*a*b* -TP_LABCURVE_LCREDSK;Ogranicz LC do odcieni skóry oraz czerwieni -TP_LABCURVE_LCREDSK_TIP;Kiedy opcja jest włączona, wpływ krzywej LC (Світність według chromatyczności) jest ograniczony do odcieni skóry oraz czerwieni.\nKiedy opcja jest wyłączona, Крива LC wpływa na wszystkie barwy. -TP_LABCURVE_RSTPROTECTION;Ochrona skóry oraz czerwieni -TP_LABCURVE_RSTPRO_TOOLTIP;Ma wpływ na suwak Chromatyczności oraz na krzywą CC. -TP_LENSGEOM_AUTOCROP;Auto-kadrowanie -TP_LENSGEOM_FILL;Auto-wypełnienie -TP_LENSGEOM_LABEL;Obiektyw / Geometria -TP_LENSPROFILE_LABEL;Profil korekcji obiektywu LCP -TP_LENSPROFILE_USECA;Korekja aberacji chromatycznej -TP_LENSPROFILE_USEDIST;Korekcja dystorsji -TP_LENSPROFILE_USEVIGN;Korekcja winietowania -TP_NEUTRAL_TIP;Zresetuj ustawienia do wartości neutralnych.\nDziała na tych samych suwakach na których funkcja "Wyrównaj poziomy" działa, niezależnie od tego czy funkcja ta była użyta czy nie. -TP_PCVIGNETTE_FEATHER;Wtapianie -TP_PCVIGNETTE_FEATHER_TOOLTIP;Wtapianie:\n0 = tylko brzegi,\n50 = w pół drogi do środka,\n100 = aż do środka. -TP_PCVIGNETTE_LABEL;Віньєтування -TP_PCVIGNETTE_ROUNDNESS;Okrągłość -TP_PCVIGNETTE_ROUNDNESS_TOOLTIP;Okrągłość:\n0 = prostokąt,\n50 = dopasowana elipsa,\n100 = okrąg. -TP_PCVIGNETTE_STRENGTH;Śiła -TP_PCVIGNETTE_STRENGTH_TOOLTIP;Siła filtru w kątach w jednostkach EV. -TP_PERSPECTIVE_HORIZONTAL;Pozioma -TP_PERSPECTIVE_LABEL;Perspektywa -TP_PERSPECTIVE_VERTICAL;Pionowa -TP_PFCURVE_CURVEEDITOR_CH;Відтінок -TP_PFCURVE_CURVEEDITOR_CH_TOOLTIP;Ogranicza natężenie usuwania widma według kolorów.\nWyżej = bardziej,\nNiżej = mniej. -TP_PREPROCESS_DEADPIXFILT;Filtr martwych pikseli -TP_PREPROCESS_DEADPIXFILT_TOOLTIP;Łata martwe piksele (pojedyńcze czarne piksele). -TP_PREPROCESS_GREENEQUIL;Wyrównanie zieleni -TP_PREPROCESS_HOTPIXFILT;Filtr gorących pikseli -TP_PREPROCESS_HOTPIXFILT_TOOLTIP;Łata gorące piksele (pojedyńcze świecące, przesycone piksele). -TP_PREPROCESS_LABEL;Przetwarzanie początkowe -TP_PREPROCESS_LINEDENOISE;Filtr zakłóceń liniowych -TP_PREPROCESS_NO_FOUND;Nic nie znaleziono -TP_RAWCACORR_AUTO;Autokorekcja -TP_RAWCACORR_CABLUE;Синій -TP_RAWCACORR_CARED;Червоний -TP_RAWEXPOS_BLACKS;Poziomy czerni -TP_RAWEXPOS_BLACK_0;Зелений 1 (główny) -TP_RAWEXPOS_BLACK_1;Червоний -TP_RAWEXPOS_BLACK_2;Синій -TP_RAWEXPOS_BLACK_3;Зелений 2 -TP_RAWEXPOS_BLACK_BLUE;Синій -TP_RAWEXPOS_BLACK_GREEN;Зелений -TP_RAWEXPOS_BLACK_RED;Червоний -TP_RAWEXPOS_LINEAR;Liniowy współczynnik korekcji -TP_RAWEXPOS_PRESER;Zachowanie prześwietleń -TP_RAWEXPOS_RGB;Червоний, Зелений, Синій -TP_RAWEXPOS_TWOGREEN;Połącz obie zielenie -TP_RAW_DCBENHANCE;Zastosuj poprawę DCB -TP_RAW_DCBITERATIONS;Liczba powtórzeń DCB -TP_RAW_DMETHOD;Metoda -TP_RAW_DMETHOD_PROGRESSBAR;Demozaikowanie %1... -TP_RAW_DMETHOD_PROGRESSBAR_REFINE;Udoskonalanie demozaikowania... -TP_RAW_DMETHOD_TOOLTIP;IGV oraz LMMSE są przeznaczone dla zdjęć raw o wysokim poziomie szumów (wysokie ISO) aby zapobiec utworzeniu się wzorków w kształcie małych labiryntów, posteryzacji oraz mydlanego wyglądu. -TP_RAW_FALSECOLOR;Kroki zapobiegające fałszowaniu kolorów -TP_RAW_LABEL;Demozaikowanie -TP_RAW_LMMSEITERATIONS;Ilość kroków udoskonalenia LMMSE -TP_RAW_LMMSE_TOOLTIP;Aby zmniejszyć ilość artefaktów i poprawić stosunek sygnału do szumów, można wykorzystać następujące ustawienia:\n1: Gamma\n2-4: Średnia mediana\n5-6: Rafinowanie -TP_RAW_SENSOR_BAYER_LABEL;Matryca z filtrem Bayera -TP_RAW_SENSOR_XTRANS_DMETHOD_TOOLTIP;Trzy powtórzenia prowadzą do najlepszych rezultatów (zalecane dla zdjęć o niskim ISO).\nJedno powtórzenie jest prawie nie do odróżnienia od trzech dla zdjęć o wysokim ISO a jest znacznie szybsze. -TP_RAW_SENSOR_XTRANS_LABEL;Matryca z filtrem X-Trans -TP_RESIZE_APPLIESTO;Dotyczy: -TP_RESIZE_CROPPEDAREA;Obszaru kadrowanego -TP_RESIZE_FITBOX;Wymiary obwodu -TP_RESIZE_FULLIMAGE;Całego zdjęcia -TP_RESIZE_H;Wysokość: -TP_RESIZE_HEIGHT;Wysokość -TP_RESIZE_LABEL;Zmiana rozmiaru -TP_RESIZE_LANCZOS;Lanczos -TP_RESIZE_METHOD;Metoda: -TP_RESIZE_NEAREST;Najbliższa -TP_RESIZE_SCALE;Skalę -TP_RESIZE_SPECIFY;Określ: -TP_RESIZE_W;Szerokość -TP_RESIZE_WIDTH;Szerokość -TP_RGBCURVES_BLUE;B -TP_RGBCURVES_CHANNEL;Kanał -TP_RGBCURVES_GREEN;G -TP_RGBCURVES_LABEL;Krzywe RGB -TP_RGBCURVES_LUMAMODE;Tryb люмінації -TP_RGBCURVES_LUMAMODE_TOOLTIP;Tryb люмінації pozwala na zmianę wpływu kanałów R, G i B na luminancję obrazu bez zmian kolorów. -TP_RGBCURVES_RED;R -TP_ROTATE_DEGREE;Stopnie -TP_ROTATE_LABEL;Obrót -TP_ROTATE_SELECTLINE;Wyprostuj obraz -TP_SAVEDIALOG_OK_TIP;Skrót: Ctrl-Enter -TP_SHADOWSHLIGHTS_HIGHLIGHTS;Podświetlenia -TP_SHADOWSHLIGHTS_HLTONALW;Szerokość тональна -TP_SHADOWSHLIGHTS_LABEL;Cienie/Podświetlenia -TP_SHADOWSHLIGHTS_LOCALCONTR;Контраст lokalny -TP_SHADOWSHLIGHTS_RADIUS;Promień -TP_SHADOWSHLIGHTS_SHADOWS;Cienie -TP_SHADOWSHLIGHTS_SHARPMASK;Ostra maska -TP_SHADOWSHLIGHTS_SHTONALW;Szerokość тональна -TP_SHARPENEDGE_AMOUNT;Siła -TP_SHARPENEDGE_LABEL;Krawędzie -TP_SHARPENEDGE_PASSES;Powtórzenia -TP_SHARPENEDGE_THREE;Tylko Світність -TP_SHARPENING_AMOUNT;Siła -TP_SHARPENING_EDRADIUS;Promień -TP_SHARPENING_EDTOLERANCE;Tolerancja krawędzi -TP_SHARPENING_HALOCONTROL;Kontrola poświaty -TP_SHARPENING_HCAMOUNT;Siła -TP_SHARPENING_LABEL;Wyostrzanie -TP_SHARPENING_METHOD;Metoda -TP_SHARPENING_ONLYEDGES;Wyostrz tylko krawędzie -TP_SHARPENING_RADIUS;Promień -TP_SHARPENING_RLD;Dekonwolucja RL -TP_SHARPENING_RLD_AMOUNT;Siła -TP_SHARPENING_RLD_DAMPING;Tłumienie -TP_SHARPENING_RLD_ITERATIONS;Powtórzenia -TP_SHARPENING_THRESHOLD;Próg -TP_SHARPENING_USM;Maska wyostrzająca -TP_SHARPENMICRO_AMOUNT;Siła -TP_SHARPENMICRO_LABEL;MikroКонтраст -TP_SHARPENMICRO_MATRIX;Matryca 3×3 zamiast 5×5 -TP_SHARPENMICRO_UNIFORMITY;Jednolitość -TP_VIBRANCE_AVOIDCOLORSHIFT;Zapobiegaj przesunięcia kolorów -TP_VIBRANCE_CURVEEDITOR_SKINTONES;HH -TP_VIBRANCE_CURVEEDITOR_SKINTONES_LABEL;Odcienie skóry -TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE1;Czerwone/Purpurowe -TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE2;Czerwone -TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE3;Czerwone/Żółte -TP_VIBRANCE_CURVEEDITOR_SKINTONES_RANGE4;Żółte -TP_VIBRANCE_CURVEEDITOR_SKINTONES_TOOLTIP;Відтінок (hue) według odcieni H=f(H) -TP_VIBRANCE_LABEL;Світність -TP_VIBRANCE_PASTELS;Odcienie pastelowe -TP_VIBRANCE_PASTSATTOG;Połącz odcienie pastelowe i nasycone -TP_VIBRANCE_PROTECTSKINS;Zachowaj odcienie skóry -TP_VIBRANCE_PSTHRESHOLD;Próg odcieni pastelowych/nasyconych -TP_VIBRANCE_PSTHRESHOLD_SATTHRESH;Próg nasycenia -TP_VIBRANCE_PSTHRESHOLD_TOOLTIP;Oś pionowa odpowiada barwą pastelowym na dole oraz nasyconym na górze.\nOś pozioma przedstawia zakres nasycenia. -TP_VIBRANCE_PSTHRESHOLD_WEIGTHING;Ważenie przejścia barw pastelowych/nasyconych -TP_VIBRANCE_SATURATED;Odcienie nasycone -TP_VIGNETTING_AMOUNT;Ilość -TP_VIGNETTING_CENTER;Środek -TP_VIGNETTING_CENTER_X;Środek X -TP_VIGNETTING_CENTER_Y;Środek Y -TP_VIGNETTING_LABEL;Korekcja winietowania -TP_VIGNETTING_RADIUS;Promień -TP_VIGNETTING_STRENGTH;Siła -TP_WBALANCE_AUTO;Auto -TP_WBALANCE_CAMERA;Z aparatu -TP_WBALANCE_CLOUDY;Pochmurnie -TP_WBALANCE_CUSTOM;Własny -TP_WBALANCE_DAYLIGHT;Światło dzienne (słonecznie) -TP_WBALANCE_EQBLUERED;Ekwalizator niebieskości/czerwieni -TP_WBALANCE_EQBLUERED_TOOLTIP;Pozwala na odchyłkę od typowego użytku balansu bieli poprzez modulację balansu niebieskości/czerwieni.\nJest to przydatne kiedy:\na) warunki miejsca fotografii są oddalone od standardowego iluminantu (światła o określonych parametrach za pomocą którego kalibruje się profil wejściowy aparatu), np. zdjęcia robione pod wodą,\nb) warunki fotografii są oddalone od warunków pod którymi kalibracje zostały wykonane,\nc) macierze oraz profile ICC/DCP są z jakiegos powodu nieodpowiednie. -TP_WBALANCE_FLASH55;Leica -TP_WBALANCE_FLASH60;Standardowe, Canon, Pentax, Olympus -TP_WBALANCE_FLASH65;Nikon, Panasonic, Sony, Minolta -TP_WBALANCE_FLASH_HEADER;Flash -TP_WBALANCE_FLUO1;F1 - Światło dzienne -TP_WBALANCE_FLUO2;F2 - Chłodne białe -TP_WBALANCE_FLUO3;F3 - Białe -TP_WBALANCE_FLUO4;F4 - Ciepłe białe -TP_WBALANCE_FLUO5;F5 - Światło dzienne -TP_WBALANCE_FLUO6;F6 - Białe Lite -TP_WBALANCE_FLUO7;F7 - D65 Symulator światła dziennego -TP_WBALANCE_FLUO8;F8 - D50 / Sylvania F40 Design -TP_WBALANCE_FLUO9;F9 - Chłodne białe deluxe -TP_WBALANCE_FLUO10;F10 - Philips TL85 -TP_WBALANCE_FLUO11;F11 - Philips TL84 -TP_WBALANCE_FLUO12;F12 - Philips TL83 -TP_WBALANCE_FLUO_HEADER;Jarzeniowe -TP_WBALANCE_GREEN;Відтінок -TP_WBALANCE_GTI;GTI -TP_WBALANCE_HMI;HMI -TP_WBALANCE_JUDGEIII;JudgeIII -TP_WBALANCE_LABEL;Balans bieli -TP_WBALANCE_LAMP_HEADER;Lamp -TP_WBALANCE_LED_CRS;CRS SP12 WWMR16 -TP_WBALANCE_LED_HEADER;LED -TP_WBALANCE_LED_LSI;LSI Lumelex 2040 -TP_WBALANCE_METHOD;Metoda -TP_WBALANCE_SHADE;Ćień -TP_WBALANCE_SIZE;Wielkość: -TP_WBALANCE_SOLUX35;Solux 3500K -TP_WBALANCE_SOLUX41;Solux 4100K -TP_WBALANCE_SOLUX47;Solux 4700K (vendor) -TP_WBALANCE_SOLUX47_NG;Solux 4700K (Nat. Gallery) -TP_WBALANCE_SPOTWB;Punktowy -TP_WBALANCE_TEMPERATURE;Temperatura -TP_WBALANCE_TUNGSTEN;Wolfram -TP_WBALANCE_WATER1;Pod wodą 1 -TP_WBALANCE_WATER2;Pod wodą 2 -TP_WBALANCE_WATER_HEADER;Pod wodą -ZOOMPANEL_100;(100%) -ZOOMPANEL_NEWCROPWINDOW;Otwórz (nową) lupę -ZOOMPANEL_ZOOM100;Powiększ do 100%\nSkrót: z -ZOOMPANEL_ZOOMFITCROPSCREEN;Dopasuj kadr do ekranu\nSkrót: f -ZOOMPANEL_ZOOMFITSCREEN;Dopasuj cały obraz do ekranu\nSkrót: Alt-f -ZOOMPANEL_ZOOMIN;Przybliż\nSkrót: + -ZOOMPANEL_ZOOMOUT;Oddal\nSkrót: - - -!!!!!!!!!!!!!!!!!!!!!!!!! -! Untranslated keys follow; remove the ! prefix after an entry is translated. -!!!!!!!!!!!!!!!!!!!!!!!!! - -!ADJUSTER_RESET_TO_DEFAULT;Click - reset to default value.\nCtrl+click - reset to initial value. -!BATCHQUEUE_STARTSTOPHINT;Start or stop processing the images in the queue.\n\nShortcut: Ctrl+s -!CURVEEDITOR_AXIS_IN;I: -!CURVEEDITOR_AXIS_LEFT_TAN;LT: -!CURVEEDITOR_AXIS_OUT;O: -!CURVEEDITOR_AXIS_RIGHT_TAN;RT: -!CURVEEDITOR_CATMULLROM;Flexible -!CURVEEDITOR_EDITPOINT_HINT;Enable edition of node in/out values.\n\nRight-click on a node to select it.\nRight-click on empty space to de-select the node. -!DONT_SHOW_AGAIN;Don't show this message again. -!DYNPROFILEEDITOR_DELETE;Delete -!DYNPROFILEEDITOR_EDIT;Edit -!DYNPROFILEEDITOR_EDIT_RULE;Edit Dynamic Profile Rule -!DYNPROFILEEDITOR_ENTRY_TOOLTIP;The matching is case insensitive.\nUse the "re:" prefix to enter\na regular expression. -!DYNPROFILEEDITOR_IMGTYPE_ANY;Any -!DYNPROFILEEDITOR_IMGTYPE_HDR;HDR -!DYNPROFILEEDITOR_IMGTYPE_PS;Pixel Shift -!DYNPROFILEEDITOR_IMGTYPE_STD;Standard -!DYNPROFILEEDITOR_MOVE_DOWN;Move Down -!DYNPROFILEEDITOR_MOVE_UP;Move Up -!DYNPROFILEEDITOR_NEW;New -!DYNPROFILEEDITOR_NEW_RULE;New Dynamic Profile Rule -!DYNPROFILEEDITOR_PROFILE;Processing Profile -!EXIFFILTER_IMAGETYPE;Image type -!EXIFPANEL_SHOWALL;Show all -!EXPORT_BYPASS;Processing steps to bypass -!EXPORT_BYPASS_EQUALIZER;Bypass Wavelet Levels -!EXPORT_PIPELINE;Processing pipeline -!EXPORT_USE_FAST_PIPELINE;Dedicated (full processing on resized image) -!EXPORT_USE_FAST_PIPELINE_TIP;Use a dedicated processing pipeline for images in Fast Export mode, that trades speed for quality. Resizing of the image is done as early as possible, instead of doing it at the end like in the normal pipeline. The speedup can be significant, but be prepared to see artifacts and a general degradation of output quality. -!EXPORT_USE_NORMAL_PIPELINE;Standard (bypass some steps, resize at the end) -!FILEBROWSER_CACHECLEARFROMFULL;Clear all including cached profiles -!FILEBROWSER_CACHECLEARFROMPARTIAL;Clear all except cached profiles -!FILEBROWSER_RESETDEFAULTPROFILE;Reset to default -!FILEBROWSER_SHOWNOTTRASHHINT;Show only non-deleted images. -!FILEBROWSER_SHOWORIGINALHINT;Show only original images.\n\nWhen several images exist with the same filename but different extensions, the one considered original is the one whose extension is nearest the top of the parsed extensions list in Preferences > File Browser > Parsed Extensions. -!FILECHOOSER_FILTER_ANY;All files -!FILECHOOSER_FILTER_COLPROF;Color profiles (*.icc) -!FILECHOOSER_FILTER_CURVE;Curve files -!FILECHOOSER_FILTER_LCP;Lens correction profiles -!FILECHOOSER_FILTER_PP;Processing profiles -!FILECHOOSER_FILTER_SAME;Same format as current photo -!FILECHOOSER_FILTER_TIFF;TIFF files -!GENERAL_APPLY;Apply -!GENERAL_ASIMAGE;As Image -!GENERAL_CURRENT;Current -!GENERAL_OPEN;Open -!GENERAL_RESET;Reset -!GENERAL_SAVE_AS;Save as... -!GENERAL_SLIDER;Slider -!GIMP_PLUGIN_INFO;Welcome to the RawTherapee GIMP plugin!\nOnce you are done editing, simply close the main RawTherapee window and the image will be automatically imported in GIMP. -!HISTOGRAM_TOOLTIP_MODE;Toggle between linear, log-linear and log-log scaling of the histogram. -!HISTORY_MSG_95;L*a*b* - Chromaticity -!HISTORY_MSG_166;Exposure - Reset -!HISTORY_MSG_173;NR - Detail recovery -!HISTORY_MSG_203;NR - Color space -!HISTORY_MSG_235;B&W - CM - Auto -!HISTORY_MSG_237;B&W - CM -!HISTORY_MSG_256;NR - Median - Type -!HISTORY_MSG_273;CT - Color Balance SMH -!HISTORY_MSG_297;NR - Mode -!HISTORY_MSG_299;NR - Chrominance curve -!HISTORY_MSG_300;- -!HISTORY_MSG_301;NR - Luma control -!HISTORY_MSG_302;NR - Chroma method -!HISTORY_MSG_303;NR - Chroma method -!HISTORY_MSG_304;W - Contrast levels -!HISTORY_MSG_305;Wavelet Levels -!HISTORY_MSG_306;W - Process -!HISTORY_MSG_307;W - Process -!HISTORY_MSG_308;W - Process direction -!HISTORY_MSG_309;W - ES - Detail -!HISTORY_MSG_310;W - Residual - Sky tar/prot -!HISTORY_MSG_311;W - Wavelet levels -!HISTORY_MSG_312;W - Residual - Shadows threshold -!HISTORY_MSG_313;W - Chroma - Sat/past -!HISTORY_MSG_314;W - Gamut - Reduce artifacts -!HISTORY_MSG_315;W - Residual - Contrast -!HISTORY_MSG_316;W - Gamut - Skin tar/prot -!HISTORY_MSG_317;W - Gamut - Skin hue -!HISTORY_MSG_318;W - Contrast - Highlight levels -!HISTORY_MSG_319;W - Contrast - Highlight range -!HISTORY_MSG_320;W - Contrast - Shadow range -!HISTORY_MSG_321;W - Contrast - Shadow levels -!HISTORY_MSG_322;W - Gamut - Avoid color shift -!HISTORY_MSG_323;W - ES - Local contrast -!HISTORY_MSG_324;W - Chroma - Pastel -!HISTORY_MSG_325;W - Chroma - Saturated -!HISTORY_MSG_326;W - Chroma - Method -!HISTORY_MSG_327;W - Contrast - Apply to -!HISTORY_MSG_328;W - Chroma - Link strength -!HISTORY_MSG_329;W - Toning - Opacity RG -!HISTORY_MSG_330;W - Toning - Opacity BY -!HISTORY_MSG_331;W - Contrast levels - Extra -!HISTORY_MSG_332;W - Tiling method -!HISTORY_MSG_333;W - Residual - Shadows -!HISTORY_MSG_334;W - Residual - Chroma -!HISTORY_MSG_335;W - Residual - Highlights -!HISTORY_MSG_336;W - Residual - Highlights threshold -!HISTORY_MSG_337;W - Residual - Sky hue -!HISTORY_MSG_338;W - ES - Radius -!HISTORY_MSG_339;W - ES - Strength -!HISTORY_MSG_340;W - Strength -!HISTORY_MSG_341;W - Edge performance -!HISTORY_MSG_342;W - ES - First level -!HISTORY_MSG_343;W - Chroma levels -!HISTORY_MSG_344;W - Meth chroma sl/cur -!HISTORY_MSG_345;W - ES - Local contrast -!HISTORY_MSG_346;W - ES - Local contrast method -!HISTORY_MSG_347;W - Denoise - Level 1 -!HISTORY_MSG_348;W - Denoise - Level 2 -!HISTORY_MSG_349;W - Denoise - Level 3 -!HISTORY_MSG_350;W - ES - Edge detection -!HISTORY_MSG_351;W - Residual - HH curve -!HISTORY_MSG_352;W - Background -!HISTORY_MSG_353;W - ES - Gradient sensitivity -!HISTORY_MSG_354;W - ES - Enhanced -!HISTORY_MSG_355;W - ES - Threshold low -!HISTORY_MSG_356;W - ES - Threshold high -!HISTORY_MSG_357;W - Denoise - Link with ES -!HISTORY_MSG_358;W - Gamut - CH -!HISTORY_MSG_359;Hot/Dead - Threshold -!HISTORY_MSG_360;TM - Gamma -!HISTORY_MSG_361;W - Final - Chroma balance -!HISTORY_MSG_362;W - Residual - Compression method -!HISTORY_MSG_363;W - Residual - Compression strength -!HISTORY_MSG_364;W - Final - Contrast balance -!HISTORY_MSG_365;W - Final - Delta balance -!HISTORY_MSG_366;W - Residual - Compression gamma -!HISTORY_MSG_367;W - Final - 'After' contrast curve -!HISTORY_MSG_368;W - Final - Contrast balance -!HISTORY_MSG_369;W - Final - Balance method -!HISTORY_MSG_370;W - Final - Local contrast curve -!HISTORY_MSG_371;Post-Resize Sharpening -!HISTORY_MSG_372;PRS USM - Radius -!HISTORY_MSG_373;PRS USM - Amount -!HISTORY_MSG_374;PRS USM - Threshold -!HISTORY_MSG_375;PRS USM - Sharpen only edges -!HISTORY_MSG_376;PRS USM - Edge detection radius -!HISTORY_MSG_377;PRS USM - Edge tolerance -!HISTORY_MSG_378;PRS USM - Halo control -!HISTORY_MSG_379;PRS USM - Halo control amount -!HISTORY_MSG_380;PRS - Method -!HISTORY_MSG_381;PRS RLD - Radius -!HISTORY_MSG_382;PRS RLD - Amount -!HISTORY_MSG_383;PRS RLD - Damping -!HISTORY_MSG_384;PRS RLD - Iterations -!HISTORY_MSG_385;W - Residual - Color Balance -!HISTORY_MSG_386;W - Residual - CB green high -!HISTORY_MSG_387;W - Residual - CB blue high -!HISTORY_MSG_388;W - Residual - CB green mid -!HISTORY_MSG_389;W - Residual - CB blue mid -!HISTORY_MSG_390;W - Residual - CB green low -!HISTORY_MSG_391;W - Residual - CB blue low -!HISTORY_MSG_392;W - Residual - Color Balance -!HISTORY_MSG_393;DCP - Look table -!HISTORY_MSG_394;DCP - Baseline exposure -!HISTORY_MSG_395;DCP - Base table -!HISTORY_MSG_396;W - Contrast sub-tool -!HISTORY_MSG_397;W - Chroma sub-tool -!HISTORY_MSG_398;W - ES sub-tool -!HISTORY_MSG_399;W - Residual sub-tool -!HISTORY_MSG_400;W - Final sub-tool -!HISTORY_MSG_401;W - Toning sub-tool -!HISTORY_MSG_402;W - Denoise sub-tool -!HISTORY_MSG_403;W - ES - Edge sensitivity -!HISTORY_MSG_404;W - ES - Base amplification -!HISTORY_MSG_405;W - Denoise - Level 4 -!HISTORY_MSG_406;W - ES - Neighboring pixels -!HISTORY_MSG_407;Retinex - Method -!HISTORY_MSG_408;Retinex - Radius -!HISTORY_MSG_409;Retinex - Contrast -!HISTORY_MSG_410;Retinex - Offset -!HISTORY_MSG_411;Retinex - Strength -!HISTORY_MSG_412;Retinex - Gaussian gradient -!HISTORY_MSG_413;Retinex - Contrast -!HISTORY_MSG_414;Retinex - Histogram - Lab -!HISTORY_MSG_415;Retinex - Transmission -!HISTORY_MSG_416;Retinex -!HISTORY_MSG_417;Retinex - Transmission median -!HISTORY_MSG_418;Retinex - Threshold -!HISTORY_MSG_419;Retinex - Color space -!HISTORY_MSG_420;Retinex - Histogram - HSL -!HISTORY_MSG_421;Retinex - Gamma -!HISTORY_MSG_422;Retinex - Gamma -!HISTORY_MSG_423;Retinex - Gamma slope -!HISTORY_MSG_424;Retinex - HL threshold -!HISTORY_MSG_425;Retinex - Log base -!HISTORY_MSG_426;Retinex - Hue equalizer -!HISTORY_MSG_427;Output rendering intent -!HISTORY_MSG_428;Monitor rendering intent -!HISTORY_MSG_429;Retinex - Iterations -!HISTORY_MSG_430;Retinex - Transmission gradient -!HISTORY_MSG_431;Retinex - Strength gradient -!HISTORY_MSG_432;Retinex - M - Highlights -!HISTORY_MSG_433;Retinex - M - Highlights TW -!HISTORY_MSG_434;Retinex - M - Shadows -!HISTORY_MSG_435;Retinex - M - Shadows TW -!HISTORY_MSG_436;Retinex - M - Radius -!HISTORY_MSG_437;Retinex - M - Method -!HISTORY_MSG_438;Retinex - M - Equalizer -!HISTORY_MSG_439;Retinex - Process -!HISTORY_MSG_440;CbDL - Method -!HISTORY_MSG_441;Retinex - Gain transmission -!HISTORY_MSG_442;Retinex - Scale -!HISTORY_MSG_443;Output black point compensation -!HISTORY_MSG_444;WB - Temp bias -!HISTORY_MSG_445;Raw sub-image -!HISTORY_MSG_449;PS - ISO adaption -!HISTORY_MSG_452;PS - Show motion -!HISTORY_MSG_453;PS - Show mask only -!HISTORY_MSG_457;PS - Check red/blue -!HISTORY_MSG_462;PS - Check green -!HISTORY_MSG_464;PS - Blur motion mask -!HISTORY_MSG_465;PS - Blur radius -!HISTORY_MSG_468;PS - Fill holes -!HISTORY_MSG_469;PS - Median -!HISTORY_MSG_471;PS - Motion correction -!HISTORY_MSG_472;PS - Smooth transitions -!HISTORY_MSG_473;PS - Use LMMSE -!HISTORY_MSG_474;PS - Equalize -!HISTORY_MSG_475;PS - Equalize channel -!HISTORY_MSG_476;CAM02 - Temp out -!HISTORY_MSG_477;CAM02 - Green out -!HISTORY_MSG_478;CAM02 - Yb out -!HISTORY_MSG_479;CAM02 - CAT02 adaptation out -!HISTORY_MSG_480;CAM02 - Automatic CAT02 out -!HISTORY_MSG_481;CAM02 - Temp scene -!HISTORY_MSG_482;CAM02 - Green scene -!HISTORY_MSG_483;CAM02 - Yb scene -!HISTORY_MSG_484;CAM02 - Auto Yb scene -!HISTORY_MSG_485;Lens Correction -!HISTORY_MSG_486;Lens Correction - Camera -!HISTORY_MSG_487;Lens Correction - Lens -!HISTORY_MSG_488;Dynamic Range Compression -!HISTORY_MSG_489;DRC - Detail -!HISTORY_MSG_490;DRC - Amount -!HISTORY_MSG_491;White Balance -!HISTORY_MSG_492;RGB Curves -!HISTORY_MSG_493;L*a*b* Adjustments -!HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors -!HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction -!HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction -!HISTORY_MSG_COLORTONING_LABREGION_CHANNEL;CT - Channel -!HISTORY_MSG_COLORTONING_LABREGION_CHROMATICITYMASK;CT - region C mask -!HISTORY_MSG_COLORTONING_LABREGION_HUEMASK;CT - H mask -!HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESS;CT - Lightness -!HISTORY_MSG_COLORTONING_LABREGION_LIGHTNESSMASK;CT - L mask -!HISTORY_MSG_COLORTONING_LABREGION_LIST;CT - List -!HISTORY_MSG_COLORTONING_LABREGION_MASKBLUR;CT - region mask blur -!HISTORY_MSG_COLORTONING_LABREGION_OFFSET;CT - region offset -!HISTORY_MSG_COLORTONING_LABREGION_POWER;CT - region power -!HISTORY_MSG_COLORTONING_LABREGION_SATURATION;CT - Saturation -!HISTORY_MSG_COLORTONING_LABREGION_SHOWMASK;CT - region show mask -!HISTORY_MSG_COLORTONING_LABREGION_SLOPE;CT - region slope -!HISTORY_MSG_DEHAZE_DEPTH;Dehaze - Depth -!HISTORY_MSG_DEHAZE_ENABLED;Haze Removal -!HISTORY_MSG_DEHAZE_SHOW_DEPTH_MAP;Dehaze - Show depth map -!HISTORY_MSG_DEHAZE_STRENGTH;Dehaze - Strength -!HISTORY_MSG_DUALDEMOSAIC_AUTO_CONTRAST;Dual demosaic - Auto threshold -!HISTORY_MSG_DUALDEMOSAIC_CONTRAST;Dual demosaic - Contrast threshold -!HISTORY_MSG_HISTMATCHING;Auto-matched tone curve -!HISTORY_MSG_ICM_OUTPUT_PRIMARIES;Output - Primaries -!HISTORY_MSG_ICM_OUTPUT_TEMP;Output - ICC-v4 illuminant D -!HISTORY_MSG_ICM_OUTPUT_TYPE;Output - Type -!HISTORY_MSG_ICM_WORKING_GAMMA;Working - Gamma -!HISTORY_MSG_ICM_WORKING_SLOPE;Working - Slope -!HISTORY_MSG_ICM_WORKING_TRC_METHOD;Working - TRC method -!HISTORY_MSG_LOCALCONTRAST_AMOUNT;Local Contrast - Amount -!HISTORY_MSG_LOCALCONTRAST_DARKNESS;Local Contrast - Darkness -!HISTORY_MSG_LOCALCONTRAST_ENABLED;Local Contrast -!HISTORY_MSG_LOCALCONTRAST_LIGHTNESS;Local Contrast - Lightness -!HISTORY_MSG_LOCALCONTRAST_RADIUS;Local Contrast - Radius -!HISTORY_MSG_METADATA_MODE;Metadata copy mode -!HISTORY_MSG_MICROCONTRAST_CONTRAST;Microcontrast - Contrast threshold -!HISTORY_MSG_PIXELSHIFT_DEMOSAIC;PS - Demosaic method for motion -!HISTORY_MSG_PREPROCESS_LINEDENOISE_DIRECTION;Line noise filter direction -!HISTORY_MSG_PREPROCESS_PDAFLINESFILTER;PDAF lines filter -!HISTORY_MSG_PRSHARPEN_CONTRAST;PRS - Contrast threshold -!HISTORY_MSG_RAWCACORR_AUTOIT;Raw CA Correction - Iterations -!HISTORY_MSG_RAWCACORR_COLORSHIFT;Raw CA Correction - Avoid color shift -!HISTORY_MSG_RAW_BORDER;Raw border -!HISTORY_MSG_RESIZE_ALLOWUPSCALING;Resize - Allow upscaling -!HISTORY_MSG_SHARPENING_BLUR;Sharpening - Blur radius -!HISTORY_MSG_SHARPENING_CONTRAST;Sharpening - Contrast threshold -!HISTORY_MSG_SH_COLORSPACE;S/H - Colorspace -!HISTORY_MSG_SOFTLIGHT_ENABLED;Soft light -!HISTORY_MSG_SOFTLIGHT_STRENGTH;Soft light - Strength -!HISTORY_MSG_TM_FATTAL_ANCHOR;DRC - Anchor -!ICCPROFCREATOR_COPYRIGHT;Copyright: -!ICCPROFCREATOR_COPYRIGHT_RESET_TOOLTIP;Reset to the default copyright, granted to "RawTherapee, CC0" -!ICCPROFCREATOR_CUSTOM;Custom -!ICCPROFCREATOR_DESCRIPTION;Description: -!ICCPROFCREATOR_DESCRIPTION_ADDPARAM;Append gamma and slope values to the description -!ICCPROFCREATOR_DESCRIPTION_TOOLTIP;Leave empty to set the default description. -!ICCPROFCREATOR_GAMMA;Gamma -!ICCPROFCREATOR_ICCVERSION;ICC version: -!ICCPROFCREATOR_ILL;Illuminant: -!ICCPROFCREATOR_ILL_41;D41 -!ICCPROFCREATOR_ILL_50;D50 -!ICCPROFCREATOR_ILL_55;D55 -!ICCPROFCREATOR_ILL_60;D60 -!ICCPROFCREATOR_ILL_65;D65 -!ICCPROFCREATOR_ILL_80;D80 -!ICCPROFCREATOR_ILL_DEF;Default -!ICCPROFCREATOR_ILL_INC;StdA 2856K -!ICCPROFCREATOR_ILL_TOOLTIP;You can only set the illuminant for ICC v4 profiles. -!ICCPROFCREATOR_PRIMARIES;Primaries: -!ICCPROFCREATOR_PRIM_ACESP0;ACES AP0 -!ICCPROFCREATOR_PRIM_ACESP1;ACES AP1 -!ICCPROFCREATOR_PRIM_ADOBE;Adobe RGB (1998) -!ICCPROFCREATOR_PRIM_BEST;BestRGB -!ICCPROFCREATOR_PRIM_BETA;BetaRGB -!ICCPROFCREATOR_PRIM_BLUX;Blue X -!ICCPROFCREATOR_PRIM_BLUY;Blue Y -!ICCPROFCREATOR_PRIM_BRUCE;BruceRGB -!ICCPROFCREATOR_PRIM_GREX;Green X -!ICCPROFCREATOR_PRIM_GREY;Green Y -!ICCPROFCREATOR_PRIM_PROPH;Prophoto -!ICCPROFCREATOR_PRIM_REC2020;Rec2020 -!ICCPROFCREATOR_PRIM_REDX;Red X -!ICCPROFCREATOR_PRIM_REDY;Red Y -!ICCPROFCREATOR_PRIM_SRGB;sRGB -!ICCPROFCREATOR_PRIM_TOOLTIP;You can only set custom primaries for ICC v4 profiles. -!ICCPROFCREATOR_PRIM_WIDEG;Widegamut -!ICCPROFCREATOR_PROF_V2;ICC v2 -!ICCPROFCREATOR_PROF_V4;ICC v4 -!ICCPROFCREATOR_SAVEDIALOG_TITLE;Save ICC profile as... -!ICCPROFCREATOR_SLOPE;Slope -!ICCPROFCREATOR_TRC_PRESET;Tone response curve: -!IPTCPANEL_CATEGORYHINT;Identifies the subject of the image in the opinion of the provider. -!IPTCPANEL_CITYHINT;Enter the name of the city pictured in this image. -!IPTCPANEL_COPYRIGHT;Copyright notice -!IPTCPANEL_COPYRIGHTHINT;Enter a Notice on the current owner of the Copyright for this image, such as ©2008 Jane Doe. -!IPTCPANEL_COUNTRYHINT;Enter the name of the country pictured in this image. -!IPTCPANEL_CREATOR;Creator -!IPTCPANEL_CREATORHINT;Enter the name of the person that created this image. -!IPTCPANEL_CREATORJOBTITLE;Creator's job title -!IPTCPANEL_CREATORJOBTITLEHINT;Enter the Job Title of the person listed in the Creator field. -!IPTCPANEL_DATECREATEDHINT;Enter the Date the image was taken. -!IPTCPANEL_DESCRIPTION;Description -!IPTCPANEL_DESCRIPTIONHINT;Enter a "caption" describing the who, what, and why of what is happening in this image, this might include names of people, and/or their role in the action that is taking place within the image. -!IPTCPANEL_DESCRIPTIONWRITER;Description writer -!IPTCPANEL_DESCRIPTIONWRITERHINT;Enter the name of the person involved in writing, editing or correcting the description of the image. -!IPTCPANEL_HEADLINEHINT;Enter a brief publishable synopsis or summary of the contents of the image. -!IPTCPANEL_INSTRUCTIONSHINT;Enter information about embargoes, or other restrictions not covered by the Copyright field. -!IPTCPANEL_KEYWORDSHINT;Enter any number of keywords, terms or phrases used to express the subject matter in the image. -!IPTCPANEL_PROVINCE;Province or state -!IPTCPANEL_PROVINCEHINT;Enter the name of the province or state pictured in this image. -!IPTCPANEL_SOURCEHINT;Enter or edit the name of a person or party who has a role in the content supply chain, such as a person or entity from whom you received this image from. -!IPTCPANEL_SUPPCATEGORIES;Supplemental categories -!IPTCPANEL_SUPPCATEGORIESHINT;Further refines the subject of the image. -!IPTCPANEL_TITLEHINT;Enter a short verbal and human readable name for the image, this may be the file name. -!IPTCPANEL_TRANSREFERENCE;Job ID -!IPTCPANEL_TRANSREFERENCEHINT;Enter a number or identifier needed for workflow control or tracking. -!MAIN_BUTTON_ICCPROFCREATOR;ICC Profile Creator -!MAIN_BUTTON_SENDTOEDITOR;Edit image in external editor -!MAIN_MSG_TOOMANYOPENEDITORS;Too many open editors.\nPlease close an editor to continue. -!MAIN_TAB_ADVANCED;Advanced -!MAIN_TAB_ADVANCED_TOOLTIP;Shortcut: Alt-w -!MAIN_TAB_FAVORITES;Favorites -!MAIN_TAB_FAVORITES_TOOLTIP;Shortcut: Alt-u -!MAIN_TAB_INSPECT; Inspect -!MAIN_TOOLTIP_BACKCOLOR3;Background color of the preview: middle grey\nShortcut: 9 -!MAIN_TOOLTIP_PREVIEWSHARPMASK;Preview the sharpening contrast mask.\nShortcut: p\n\nOnly works when sharpening is enabled and zoom >= 100%. -!MONITOR_PROFILE_SYSTEM;System default -!OPTIONS_BUNDLED_MISSING;The bundled profile "%1" could not be found!\n\nYour installation could be damaged.\n\nDefault internal values will be used instead. -!OPTIONS_DEFIMG_MISSING;The default profile for non-raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead. -!OPTIONS_DEFRAW_MISSING;The default profile for raw photos could not be found or is not set.\n\nPlease check your profiles' directory, it may be missing or damaged.\n\n"%1" will be used instead. -!PARTIALPASTE_ADVANCEDGROUP;Advanced Settings -!PARTIALPASTE_DEHAZE;Haze removal -!PARTIALPASTE_EQUALIZER;Wavelet levels -!PARTIALPASTE_LOCALCONTRAST;Local contrast -!PARTIALPASTE_METADATA;Metadata mode -!PARTIALPASTE_PREPROCESS_PDAFLINESFILTER;PDAF lines filter -!PARTIALPASTE_PRSHARPENING;Post-resize sharpening -!PARTIALPASTE_RAWCACORR_AVOIDCOLORSHIFT;CA avoid color shift -!PARTIALPASTE_RAWCACORR_CAREDBLUE;CA red & blue -!PARTIALPASTE_RAW_BORDER;Raw border -!PARTIALPASTE_RAW_IMAGENUM;Sub-image -!PARTIALPASTE_RAW_PIXELSHIFT;Pixel Shift -!PARTIALPASTE_RETINEX;Retinex -!PARTIALPASTE_SOFTLIGHT;Soft light -!PARTIALPASTE_TM_FATTAL;Dynamic range compression -!PREFERENCES_APPEARANCE;Appearance -!PREFERENCES_APPEARANCE_COLORPICKERFONT;Color picker font -!PREFERENCES_APPEARANCE_CROPMASKCOLOR;Crop mask color -!PREFERENCES_APPEARANCE_MAINFONT;Main font -!PREFERENCES_APPEARANCE_NAVGUIDECOLOR;Navigator guide color -!PREFERENCES_APPEARANCE_THEME;Theme -!PREFERENCES_AUTOSAVE_TP_OPEN;Save tool collapsed/expanded state on exit -!PREFERENCES_CACHECLEAR;Clear -!PREFERENCES_CACHECLEAR_ALL;Clear all cached files: -!PREFERENCES_CACHECLEAR_ALLBUTPROFILES;Clear all cached files except for cached processing profiles: -!PREFERENCES_CACHECLEAR_ONLYPROFILES;Clear only cached processing profiles: -!PREFERENCES_CACHECLEAR_SAFETY;Only files in the cache are cleared. Processing profiles stored alongside the source images are not touched. -!PREFERENCES_CLUTSCACHE;HaldCLUT Cache -!PREFERENCES_CLUTSCACHE_LABEL;Maximum number of cached CLUTs -!PREFERENCES_CMMBPC;Black point compensation -!PREFERENCES_CROP;Crop Editing -!PREFERENCES_CROP_AUTO_FIT;Automatically zoom to fit the crop -!PREFERENCES_CROP_GUIDES;Guides shown when not editing the crop -!PREFERENCES_CROP_GUIDES_FRAME;Frame -!PREFERENCES_CROP_GUIDES_FULL;Original -!PREFERENCES_CROP_GUIDES_NONE;None -!PREFERENCES_CURVEBBOXPOS;Position of curve copy & paste buttons -!PREFERENCES_CURVEBBOXPOS_ABOVE;Above -!PREFERENCES_CURVEBBOXPOS_BELOW;Below -!PREFERENCES_CURVEBBOXPOS_LEFT;Left -!PREFERENCES_CURVEBBOXPOS_RIGHT;Right -!PREFERENCES_D50_OLD;5000K -!PREFERENCES_DIRECTORIES;Directories -!PREFERENCES_EDITORCMDLINE;Custom command line -!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT;Same thumbnail height between the Filmstrip and the File Browser -!PREFERENCES_FSTRIP_SAME_THUMB_HEIGHT_HINT;Having separate thumbnail size will require more processing time each time you'll switch between the single Editor tab and the File Browser. -!PREFERENCES_GREY18_OLD;Yb=18 CIE L#50 -!PREFERENCES_GREYSC;Scene Yb luminance (%) -!PREFERENCES_GREYSC18;Yb=18 CIE L#50 -!PREFERENCES_GREYSCA;Automatic -!PREFERENCES_IMG_RELOAD_NEEDED;These changes require the image to be reloaded (or a new image to be opened) to take effect. -!PREFERENCES_INSPECT_LABEL;Inspect -!PREFERENCES_INSPECT_MAXBUFFERS_LABEL;Maximum number of cached images -!PREFERENCES_INSPECT_MAXBUFFERS_TOOLTIP;Set the maximum number of images stored in cache when hovering over them in the File Browser; systems with little RAM (2GB) should keep this value set to 1 or 2. -!PREFERENCES_LANG;Language -!PREFERENCES_MAXRECENTFOLDERS;Maximum number of recent folders -!PREFERENCES_MONINTENT;Default rendering intent -!PREFERENCES_MONITOR;Monitor -!PREFERENCES_MONPROFILE;Default color profile -!PREFERENCES_MONPROFILE_WARNOSX;Due to MacOS limitations, only sRGB is supported. -!PREFERENCES_NAVIGATIONFRAME;Navigation -!PREFERENCES_OVERLAY_FILENAMES_FILMSTRIP;Overlay filenames on thumbnails in the editor pannel -!PREFERENCES_PARSEDEXTDOWNHINT;Move selected extension down in the list. -!PREFERENCES_PARSEDEXTUPHINT;Move selected extension up in the list. -!PREFERENCES_PERFORMANCE_THREADS;Threads -!PREFERENCES_PERFORMANCE_THREADS_LABEL;Maximum number of threads for Noise Reduction and Wavelet Levels (0 = Automatic) -!PREFERENCES_PREVDEMO;Preview Demosaic Method -!PREFERENCES_PREVDEMO_FAST;Fast -!PREFERENCES_PREVDEMO_LABEL;Demosaicing method used for the preview at <100% zoom: -!PREFERENCES_PREVDEMO_SIDECAR;As in PP3 -!PREFERENCES_PRINTER;Printer (Soft-Proofing) -!PREFERENCES_PROFILESAVEBOTH;Save processing profile both to the cache and next to the input file -!PREFERENCES_PROFILESAVELOCATION;Processing profile saving location -!PREFERENCES_PROFILE_NONE;None -!PREFERENCES_PRTINTENT;Rendering intent -!PREFERENCES_PRTPROFILE;Color profile -!PREFERENCES_REMEMBERZOOMPAN;Remember zoom % and pan offset -!PREFERENCES_REMEMBERZOOMPAN_TOOLTIP;Remember the zoom % and pan offset of the current image when opening a new image.\n\nThis option only works in "Single Editor Tab Mode" and when "Demosaicing method used for the preview at <100% zoom" is set to "As in PP3". -!PREFERENCES_SAVE_TP_OPEN_NOW;Save tool collapsed/expanded state now -!PREFERENCES_SERIALIZE_TIFF_READ;TIFF Read Settings -!PREFERENCES_SERIALIZE_TIFF_READ_LABEL;Serialize reading of TIFF files -!PREFERENCES_SERIALIZE_TIFF_READ_TOOLTIP;Enabling this option when working with folders containing uncompressed TIFF files can increase performance of thumbnail generation. -!PREFERENCES_SHOWFILMSTRIPTOOLBAR;Show Filmstrip toolbar -!PREFERENCES_TAB_DYNAMICPROFILE;Dynamic Profile Rules -!PREFERENCES_TAB_PERFORMANCE;Performance -!PREFERENCES_THUMBNAIL_INSPECTOR_JPEG;Embedded JPEG preview -!PREFERENCES_THUMBNAIL_INSPECTOR_MODE;Image to show -!PREFERENCES_THUMBNAIL_INSPECTOR_RAW;Neutral raw rendering -!PREFERENCES_THUMBNAIL_INSPECTOR_RAW_IF_NO_JPEG_FULLSIZE;Embedded JPEG if fullsize, neutral raw otherwise -!PREFERENCES_TUNNELMETADATA;Copy Exif/IPTC/XMP unchanged to output file -!PROFILEPANEL_PDYNAMIC;Dynamic -!QINFO_FRAMECOUNT;%2 frames -!QINFO_HDR;HDR / %2 frame(s) -!QINFO_PIXELSHIFT;Pixel Shift / %2 frame(s) -!SAMPLEFORMAT_0;Unknown data format -!SAMPLEFORMAT_1;8-bit unsigned -!SAMPLEFORMAT_2;16-bit unsigned -!SAMPLEFORMAT_4;24-bit LogLuv -!SAMPLEFORMAT_8;32-bit LogLuv -!SAMPLEFORMAT_16;16-bit floating-point -!SAMPLEFORMAT_32;24-bit floating-point -!SAMPLEFORMAT_64;32-bit floating-point -!SAVEDLG_FILEFORMAT_FLOAT; floating-point -!SAVEDLG_SUBSAMP_TOOLTIP;Best compression:\nJ:a:b 4:2:0\nh/v 2/2\nChroma halved horizontally and vertically.\n\nBalanced:\nJ:a:b 4:2:2\nh/v 2/1\nChroma halved horizontally.\n\nBest quality:\nJ:a:b 4:4:4\nh/v 1/1\nNo chroma subsampling. -!SOFTPROOF_GAMUTCHECK_TOOLTIP;Highlight pixels with out-of-gamut colors with respect to:\n- the printer profile, if one is set and soft-proofing is enabled,\n- the output profile, if a printer profile is not set and soft-proofing is enabled,\n- the monitor profile, if soft-proofing is disabled. -!SOFTPROOF_TOOLTIP;Soft-proofing simulates the appearance of the image:\n- when printed, if a printer profile is set in Preferences > Color Management,\n- when viewed on a display that uses the current output profile, if a printer profile is not set. -!TOOLBAR_TOOLTIP_COLORPICKER;Lockable Color Picker\n\nWhen the tool is active:\n- Add a picker: left-click.\n- Drag a picker: left-click and drag.\n- Delete a picker: right-click.\n- Delete all pickers: Ctrl+Shift+right-click.\n- Revert to hand tool: right-click outside any picker. -!TP_BWMIX_MIXC;Channel Mixer -!TP_BWMIX_NEUTRAL;Reset -!TP_CBDL_AFT;After Black-and-White -!TP_CBDL_BEF;Before Black-and-White -!TP_CBDL_METHOD;Process located -!TP_CBDL_METHOD_TOOLTIP;Choose whether the Contrast by Detail Levels tool is to be positioned after the Black-and-White tool, which makes it work in L*a*b* space, or before it, which makes it work in RGB space. -!TP_COLORAPP_ABSOLUTELUMINANCE;Absolute luminance -!TP_COLORAPP_CAT02ADAPTATION_TOOLTIP;When setting manually, values above 65 are recommended. -!TP_COLORAPP_FREE;Free temp+green + CAT02 + [output] -!TP_COLORAPP_MEANLUMINANCE;Mean luminance (Yb%) -!TP_COLORAPP_NEUTRAL;Reset -!TP_COLORAPP_NEUTRAL_TIP;Reset all sliders checkbox and curves to their default values -!TP_COLORAPP_TEMP_TOOLTIP;To select an illuminant, always set Tint=1.\n\nA temp=2856\nD50 temp=5003\nD55 temp=5503\nD65 temp=6504\nD75 temp=7504 -!TP_COLORAPP_VIEWING_ABSOLUTELUMINANCE_TOOLTIP;Absolute luminance of the viewing environment\n(usually 16 cd/m²). -!TP_COLORTONING_LABGRID;L*a*b* color correction grid -!TP_COLORTONING_LABGRID_VALUES;HL: a=%1 b=%2\nS: a=%3 b=%4 -!TP_COLORTONING_LABREGIONS;Color correction regions -!TP_COLORTONING_LABREGION_ABVALUES;a=%1 b=%2 -!TP_COLORTONING_LABREGION_CHANNEL;Channel -!TP_COLORTONING_LABREGION_CHANNEL_ALL;All -!TP_COLORTONING_LABREGION_CHANNEL_B;Blue -!TP_COLORTONING_LABREGION_CHANNEL_G;Green -!TP_COLORTONING_LABREGION_CHANNEL_R;Red -!TP_COLORTONING_LABREGION_CHROMATICITYMASK;C -!TP_COLORTONING_LABREGION_HUEMASK;H -!TP_COLORTONING_LABREGION_LIGHTNESS;Lightness -!TP_COLORTONING_LABREGION_LIGHTNESSMASK;L -!TP_COLORTONING_LABREGION_LIST_TITLE;Correction -!TP_COLORTONING_LABREGION_MASK;Mask -!TP_COLORTONING_LABREGION_MASKBLUR;Mask Blur -!TP_COLORTONING_LABREGION_OFFSET;Offset -!TP_COLORTONING_LABREGION_POWER;Power -!TP_COLORTONING_LABREGION_SATURATION;Saturation -!TP_COLORTONING_LABREGION_SHOWMASK;Show mask -!TP_COLORTONING_LABREGION_SLOPE;Slope -!TP_CROP_GTHARMMEANS;Harmonic Means -!TP_CROP_GTTRIANGLE1;Golden Triangles 1 -!TP_CROP_GTTRIANGLE2;Golden Triangles 2 -!TP_CROP_RESETCROP;Reset -!TP_DEHAZE_DEPTH;Depth -!TP_DEHAZE_LABEL;Haze Removal -!TP_DEHAZE_SHOW_DEPTH_MAP;Show Depth Map -!TP_DEHAZE_STRENGTH;Strength -!TP_DIRPYRDENOISE_CHROMINANCE_AMZ;Auto multi-zones -!TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL;Automatic global -!TP_DIRPYRDENOISE_CHROMINANCE_AUTOGLOBAL_TOOLTIP;Try to evaluate chroma noise\nBe careful, this calculation is average, and is quite subjective ! -!TP_DIRPYRDENOISE_CHROMINANCE_CURVE;Chrominance curve -!TP_DIRPYRDENOISE_CHROMINANCE_CURVE_TOOLTIP;Increase (multiply) the value of all chrominance sliders.\nThis curve lets you adjust the strength of chromatic noise reduction as a function of chromaticity, for instance to increase the action in areas of low saturation and to decrease it in those of high saturation. -!TP_DIRPYRDENOISE_CHROMINANCE_FRAME;Chrominance -!TP_DIRPYRDENOISE_CHROMINANCE_MANUAL;Manual -!TP_DIRPYRDENOISE_CHROMINANCE_METHOD;Method -!TP_DIRPYRDENOISE_CHROMINANCE_METHODADVANCED_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. -!TP_DIRPYRDENOISE_CHROMINANCE_METHOD_TOOLTIP;Manual\nActs on the full image.\nYou control the noise reduction settings manually.\n\nAutomatic global\nActs on the full image.\n9 zones are used to calculate a global chrominance noise reduction setting.\n\nAutomatic multi-zones\nNo preview - works only during saving, but using the "Preview" method by matching the tile size and center to the preview size and center you can get an idea of the expected results.\nThe image is divided into tiles (about 10 to 70 depending on image size) and each tile receives its own chrominance noise reduction settings.\n\nPreview\nActs on the whole image.\nThe part of the image visible in the preview is used to calculate global chrominance noise reduction settings. -!TP_DIRPYRDENOISE_CHROMINANCE_PMZ;Preview multi-zones -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW;Preview -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEWRESIDUAL_INFO_TOOLTIP;Displays the remaining noise levels of the part of the image visible in the preview after wavelet.\n\n>300 Very noisy\n100-300 Noisy\n50-100 A little noisy\n<50 Very low noise\n\nBeware, the values will differ between RGB and L*a*b* mode. The RGB values are less accurate because the RGB mode does not completely separate luminance and chrominance. -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_INFO;Preview size=%1, Center: Px=%2 Py=%3 -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO;Preview noise: Mean=%1 High=%2 -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_NOISEINFO_EMPTY;Preview noise: Mean= - High= - -!TP_DIRPYRDENOISE_CHROMINANCE_PREVIEW_TILEINFO;Tile size=%1, Center: Tx=%2 Ty=%3 -!TP_DIRPYRDENOISE_LABEL;Noise Reduction -!TP_DIRPYRDENOISE_LUMINANCE_CONTROL;Luminance control -!TP_DIRPYRDENOISE_LUMINANCE_FRAME;Luminance -!TP_DIRPYRDENOISE_MAIN_COLORSPACE_LAB;L*a*b* -!TP_DIRPYRDENOISE_MEDIAN_METHOD_CHROMINANCE;Chroma only -!TP_DIRPYRDENOISE_MEDIAN_METHOD_WEIGHTED;Weighted L* (little) + a*b* (normal) -!TP_DIRPYRDENOISE_MEDIAN_PASSES_TOOLTIP;Applying three median filter iterations with a 3×3 window size often leads to better results than using one median filter iteration with a 7×7 window size. -!TP_DIRPYRDENOISE_MEDIAN_TYPE_TOOLTIP;Apply a median filter of the desired window size. The larger the window's size, the longer it takes.\n\n3×3 soft: treats 5 pixels in a 3×3 pixel window.\n3×3: treats 9 pixels in a 3×3 pixel window.\n5×5 soft: treats 13 pixels in a 5×5 pixel window.\n5×5: treats 25 pixels in a 5×5 pixel window.\n7×7: treats 49 pixels in a 7×7 pixel window.\n9×9: treats 81 pixels in a 9×9 pixel window.\n\nSometimes it is possible to achieve higher quality running several iterations with a smaller window size than one iteration with a larger one. -!TP_DIRPYRDENOISE_SLI;Slider -!TP_DIRPYRDENOISE_TYPE_3X3;3×3 -!TP_DIRPYRDENOISE_TYPE_3X3SOFT;3×3 soft -!TP_DIRPYRDENOISE_TYPE_5X5;5×5 -!TP_DIRPYRDENOISE_TYPE_5X5SOFT;5×5 soft -!TP_DIRPYRDENOISE_TYPE_7X7;7×7 -!TP_DIRPYRDENOISE_TYPE_9X9;9×9 -!TP_DIRPYREQUALIZER_ARTIF;Reduce artifacts -!TP_DISTORTION_AUTO_TIP;Automatically corrects lens distortion in raw files by matching it against the embedded JPEG image if one exists and has had its lens disortion auto-corrected by the camera. -!TP_EPD_GAMMA;Gamma -!TP_EXPOSURE_CLAMPOOG;Clip out-of-gamut colors -!TP_EXPOSURE_HISTMATCHING;Auto-Matched Tone Curve -!TP_EXPOSURE_HISTMATCHING_TOOLTIP;Automatically adjust sliders and curves (except exposure compensation) to match the look of the embedded JPEG thumbnail. -!TP_EXPOSURE_TCMODE_LUMINANCE;Luminance -!TP_EXPOSURE_TCMODE_PERCEPTUAL;Perceptual -!TP_FILMSIMULATION_SLOWPARSEDIR;RawTherapee is configured to look for Hald CLUT images, which are used for the Film Simulation tool, in a folder which is taking too long to load.\nGo to Preferences > Image Processing > Film Simulation\nto see which folder is being used. You should either point RawTherapee to a folder which contains only Hald CLUT images and nothing more, or to an empty folder if you don't want to use the Film Simulation tool.\n\nRead the Film Simulation article in RawPedia for more information.\n\nDo you want to cancel the scan now? -!TP_ICM_APPLYBASELINEEXPOSUREOFFSET;Baseline exposure -!TP_ICM_APPLYBASELINEEXPOSUREOFFSET_TOOLTIP;Employ the embedded DCP baseline exposure offset. The setting is only available if the selected DCP has one. -!TP_ICM_APPLYHUESATMAP;Base table -!TP_ICM_APPLYHUESATMAP_TOOLTIP;Employ the embedded DCP base table (HueSatMap). The setting is only available if the selected DCP has one. -!TP_ICM_APPLYLOOKTABLE;Look table -!TP_ICM_APPLYLOOKTABLE_TOOLTIP;Employ the embedded DCP look table. The setting is only available if the selected DCP has one. -!TP_ICM_BPC;Black Point Compensation -!TP_ICM_PROFILEINTENT;Rendering Intent -!TP_ICM_SAVEREFERENCE;Save Reference Image -!TP_ICM_SAVEREFERENCE_APPLYWB;Apply white balance -!TP_ICM_SAVEREFERENCE_APPLYWB_TOOLTIP;Generally, apply the white balance when saving images to create ICC profiles, and do not apply the white balance to create DCP profiles. -!TP_ICM_WORKING_TRC;Tone response curve: -!TP_ICM_WORKING_TRC_CUSTOM;Custom -!TP_ICM_WORKING_TRC_GAMMA;Gamma -!TP_ICM_WORKING_TRC_NONE;None -!TP_ICM_WORKING_TRC_SLOPE;Slope -!TP_ICM_WORKING_TRC_TOOLTIP;Only for built-in profiles. -!TP_LENSPROFILE_CORRECTION_AUTOMATCH;Automatically -!TP_LENSPROFILE_CORRECTION_LCPFILE;LCP file -!TP_LENSPROFILE_CORRECTION_MANUAL;Manually -!TP_LENSPROFILE_LENS_WARNING;Warning: the crop factor used for lens profiling is larger than the crop factor of the camera, the results might be wrong. -!TP_LENSPROFILE_MODE_HEADER;Select the lens profile: -!TP_LENSPROFILE_USE_CA;Chromatic aberration -!TP_LENSPROFILE_USE_GEOMETRIC;Geometric -!TP_LENSPROFILE_USE_HEADER;Select distortions to correct: -!TP_LENSPROFILE_USE_VIGNETTING;Vignetting -!TP_LOCALCONTRAST_AMOUNT;Amount -!TP_LOCALCONTRAST_DARKNESS;Darkness level -!TP_LOCALCONTRAST_LABEL;Local Contrast -!TP_LOCALCONTRAST_LIGHTNESS;Lightness level -!TP_LOCALCONTRAST_RADIUS;Radius -!TP_METADATA_EDIT;Apply modifications -!TP_METADATA_MODE;Metadata copy mode -!TP_METADATA_STRIP;Strip all metadata -!TP_METADATA_TUNNEL;Copy unchanged -!TP_NEUTRAL;Reset -!TP_PREPROCESS_LINEDENOISE_DIRECTION;Direction -!TP_PREPROCESS_LINEDENOISE_DIRECTION_BOTH;Both -!TP_PREPROCESS_LINEDENOISE_DIRECTION_HORIZONTAL;Horizontal -!TP_PREPROCESS_LINEDENOISE_DIRECTION_PDAF_LINES;Horizontal only on PDAF rows -!TP_PREPROCESS_LINEDENOISE_DIRECTION_VERTICAL;Vertical -!TP_PREPROCESS_PDAFLINESFILTER;PDAF lines filter -!TP_PRSHARPENING_LABEL;Post-Resize Sharpening -!TP_PRSHARPENING_TOOLTIP;Sharpens the image after resizing. Only works when the "Lanczos" resizing method is used. It is impossible to preview the effects of this tool. See RawPedia for usage instructions. -!TP_RAWCACORR_AUTOIT;Iterations -!TP_RAWCACORR_AUTOIT_TOOLTIP;This setting is available if "Auto-correction" is checked.\nAuto-correction is conservative, meaning that it often does not correct all chromatic aberration.\nTo correct the remaining chromatic aberration, you can use up to five iterations of automatic chromatic aberration correction.\nEach iteration will reduce the remaining chromatic aberration from the last iteration at the cost of additional processing time. -!TP_RAWCACORR_AVOIDCOLORSHIFT;Avoid color shift -!TP_RAWCACORR_CASTR;Strength -!TP_RAW_1PASSMEDIUM;1-pass (Markesteijn) -!TP_RAW_2PASS;1-pass+fast -!TP_RAW_3PASSBEST;3-pass (Markesteijn) -!TP_RAW_4PASS;3-pass+fast -!TP_RAW_AHD;AHD -!TP_RAW_AMAZE;AMaZE -!TP_RAW_AMAZEVNG4;AMaZE+VNG4 -!TP_RAW_BORDER;Border -!TP_RAW_DCB;DCB -!TP_RAW_DCBVNG4;DCB+VNG4 -!TP_RAW_DUALDEMOSAICAUTOCONTRAST;Auto threshold -!TP_RAW_DUALDEMOSAICAUTOCONTRAST_TOOLTIP;If the checkbox is checked (recommended), RawTherapee calculates an optimum value based on flat regions in the image.\nIf there is no flat region in the image or the image is too noisy, the value will be set to 0.\nTo set the value manually, uncheck the checkbox first (reasonable values depend on the image). -!TP_RAW_DUALDEMOSAICCONTRAST;Contrast threshold -!TP_RAW_EAHD;EAHD -!TP_RAW_FAST;Fast -!TP_RAW_HD;Threshold -!TP_RAW_HD_TOOLTIP;Lower values make hot/dead pixel detection more aggressive, but false positives may lead to artifacts. If you notice any artifacts appearing when enabling the Hot/Dead Pixel Filters, gradually increase the threshold value until they disappear. -!TP_RAW_HPHD;HPHD -!TP_RAW_IGV;IGV -!TP_RAW_IMAGENUM;Sub-image -!TP_RAW_IMAGENUM_TOOLTIP;Some raw files consist of several sub-images (Pentax/Sony Pixel Shift, Pentax 3-in-1 HDR, Canon Dual Pixel).\n\nWhen using any demosaicing method other than Pixel Shift, this selects which sub-image is used.\n\nWhen using the Pixel Shift demosaicing method on a Pixel Shift raw, all sub-images are used, and this selects which sub-image should be used for moving parts. -!TP_RAW_LMMSE;LMMSE -!TP_RAW_MONO;Mono -!TP_RAW_NONE;None (Shows sensor pattern) -!TP_RAW_PIXELSHIFT;Pixel Shift -!TP_RAW_PIXELSHIFTBLUR;Blur motion mask -!TP_RAW_PIXELSHIFTDMETHOD;Demosaic method for motion -!TP_RAW_PIXELSHIFTEPERISO;Sensitivity -!TP_RAW_PIXELSHIFTEPERISO_TOOLTIP;The default value of 0 should work fine for base ISO.\nHigher values increase sensitivity of motion detection.\nChange in small steps and watch the motion mask while changing.\nIncrease sensitivity for underexposed or high ISO images. -!TP_RAW_PIXELSHIFTEQUALBRIGHT;Equalize brightness of frames -!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL;Equalize per channel -!TP_RAW_PIXELSHIFTEQUALBRIGHTCHANNEL_TOOLTIP;Enabled: Equalize the RGB channels individually.\nDisabled: Use same equalization factor for all channels. -!TP_RAW_PIXELSHIFTEQUALBRIGHT_TOOLTIP;Equalize the brightness of the frames to the brightness of the selected frame.\nIf there are overexposed areas in the frames select the brightest frame to avoid magenta color cast in overexposed areas or enable motion correction. -!TP_RAW_PIXELSHIFTGREEN;Check green channel for motion -!TP_RAW_PIXELSHIFTHOLEFILL;Fill holes in motion mask -!TP_RAW_PIXELSHIFTHOLEFILL_TOOLTIP;Fill holes in motion mask -!TP_RAW_PIXELSHIFTLMMSE;Use LMMSE for moving parts -!TP_RAW_PIXELSHIFTLMMSE_TOOLTIP;Use LMMSE instead of AMaZE for areas of motion.\nUseful for high ISO images. -!TP_RAW_PIXELSHIFTMEDIAN;Use median for moving parts -!TP_RAW_PIXELSHIFTMEDIAN_TOOLTIP;Use median of all frames instead of selected frame for regions with motion.\nRemoves objects which are at different places in all frames.\nGives motion effect on slow moving (overlapping) objects. -!TP_RAW_PIXELSHIFTMM_AUTO;Automatic -!TP_RAW_PIXELSHIFTMM_CUSTOM;Custom -!TP_RAW_PIXELSHIFTMM_OFF;Off -!TP_RAW_PIXELSHIFTMOTIONMETHOD;Motion Correction -!TP_RAW_PIXELSHIFTMOTION_TOOLTIP;0 means no motion detection.\n1 - 99 means motion will be detected according to this value. Increase value to increase detection rate.\n100 means the AMaZE-demosaiced frame will be used. -!TP_RAW_PIXELSHIFTNONGREENCROSS;Check red/blue channels for motion -!TP_RAW_PIXELSHIFTSHOWMOTION;Show motion mask -!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY;Show only motion mask -!TP_RAW_PIXELSHIFTSHOWMOTIONMASKONLY_TOOLTIP;Shows the motion mask without the image. -!TP_RAW_PIXELSHIFTSHOWMOTION_TOOLTIP;Overlays the image with a green mask showing the regions with motion. -!TP_RAW_PIXELSHIFTSIGMA;Blur radius -!TP_RAW_PIXELSHIFTSIGMA_TOOLTIP;The default radius of 1.0 usually fits well for base ISO.\nIncrease the value for high ISO shots, 5.0 is a good starting point.\nWatch the motion mask while changing the value. -!TP_RAW_PIXELSHIFTSMOOTH;Smooth transitions -!TP_RAW_PIXELSHIFTSMOOTH_TOOLTIP;Smooth transitions between areas with motion and areas without.\nSet to 0 to disable transition smoothing.\nSet to 1 to either get the AMaZE/LMMSE result of the selected frame (depending on whether "Use LMMSE" is selected), or the median of all four frames if "Use median" is selected. -!TP_RAW_RCD;RCD -!TP_RAW_RCDVNG4;RCD+VNG4 -!TP_RAW_VNG4;VNG4 -!TP_RESIZE_ALLOW_UPSCALING;Allow Upscaling -!TP_RETINEX_CONTEDIT_HSL;HSL histogram -!TP_RETINEX_CONTEDIT_LAB;L*a*b* histogram -!TP_RETINEX_CONTEDIT_LH;Hue -!TP_RETINEX_CONTEDIT_MAP;Equalizer -!TP_RETINEX_CURVEEDITOR_CD;L=f(L) -!TP_RETINEX_CURVEEDITOR_CD_TOOLTIP;Luminance according to luminance L=f(L)\nCorrect raw data to reduce halos and artifacts. -!TP_RETINEX_CURVEEDITOR_LH;Strength=f(H) -!TP_RETINEX_CURVEEDITOR_LH_TOOLTIP;Strength according to hue Strength=f(H)\nThis curve also acts on chroma when using the "Highlight" retinex method. -!TP_RETINEX_CURVEEDITOR_MAP;L=f(L) -!TP_RETINEX_CURVEEDITOR_MAP_TOOLTIP;This curve can be applied alone or with a Gaussian mask or wavelet mask.\nBeware of artifacts! -!TP_RETINEX_EQUAL;Equalizer -!TP_RETINEX_FREEGAMMA;Free gamma -!TP_RETINEX_GAIN;Gain -!TP_RETINEX_GAINOFFS;Gain and Offset (brightness) -!TP_RETINEX_GAINTRANSMISSION;Gain transmission -!TP_RETINEX_GAINTRANSMISSION_TOOLTIP;Amplify or reduce the transmission map to achieve the desired luminance.\nThe x-axis is the transmission.\nThe y-axis is the gain. -!TP_RETINEX_GAIN_TOOLTIP;Acts on the restored image.\n\nThis is very different from the others settings. Used for black or white pixels, and to help balance the histogram. -!TP_RETINEX_GAMMA;Gamma -!TP_RETINEX_GAMMA_FREE;Free -!TP_RETINEX_GAMMA_HIGH;High -!TP_RETINEX_GAMMA_LOW;Low -!TP_RETINEX_GAMMA_MID;Middle -!TP_RETINEX_GAMMA_NONE;None -!TP_RETINEX_GAMMA_TOOLTIP;Restore tones by applying gamma before and after Retinex. Different from Retinex curves or others curves (Lab, Exposure, etc.). -!TP_RETINEX_GRAD;Transmission gradient -!TP_RETINEX_GRADS;Strength gradient -!TP_RETINEX_GRADS_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Strength is reduced when iterations increase, and conversely. -!TP_RETINEX_GRAD_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Variance and Threshold are reduced when iterations increase, and conversely. -!TP_RETINEX_HIGH;High -!TP_RETINEX_HIGHLIG;Highlight -!TP_RETINEX_HIGHLIGHT;Highlight threshold -!TP_RETINEX_HIGHLIGHT_TOOLTIP;Increase action of High algorithm.\nMay require you to re-adjust "Neighboring pixels" and to increase the "White-point correction" in the Raw tab -> Raw White Points tool. -!TP_RETINEX_HSLSPACE_LIN;HSL-Linear -!TP_RETINEX_HSLSPACE_LOG;HSL-Logarithmic -!TP_RETINEX_ITER;Iterations (Tone-mapping) -!TP_RETINEX_ITERF;Tone mapping -!TP_RETINEX_ITER_TOOLTIP;Simulate a tone-mapping operator.\nHigh values increase the processing time. -!TP_RETINEX_LABEL;Retinex -!TP_RETINEX_LABEL_MASK;Mask -!TP_RETINEX_LABSPACE;L*a*b* -!TP_RETINEX_LOW;Low -!TP_RETINEX_MAP;Method -!TP_RETINEX_MAP_GAUS;Gaussian mask -!TP_RETINEX_MAP_MAPP;Sharp mask (wavelet partial) -!TP_RETINEX_MAP_MAPT;Sharp mask (wavelet total) -!TP_RETINEX_MAP_METHOD_TOOLTIP;Use the mask generated by the Gaussian function above (Radius, Method) to reduce halos and artifacts.\n\nCurve only: apply a diagonal contrast curve on the mask.\nBeware of artifacts!\n\nGaussian mask: generate and use a Gaussian blur of the original mask.\nQuick.\n\nSharp mask: generate and use a wavelet on the original mask.\nSlow. -!TP_RETINEX_MAP_NONE;None -!TP_RETINEX_MEDIAN;Transmission median filter -!TP_RETINEX_METHOD;Method -!TP_RETINEX_METHOD_TOOLTIP;Low = Reinforce low light.\nUniform = Equalize action.\nHigh = Reinforce high light.\nHighlights = Remove magenta in highlights. -!TP_RETINEX_MLABEL;Restored haze-free Min=%1 Max=%2 -!TP_RETINEX_MLABEL_TOOLTIP;Should be near min=0 max=32768\nRestored image with no mixture. -!TP_RETINEX_NEIGHBOR;Radius -!TP_RETINEX_NEUTRAL;Reset -!TP_RETINEX_NEUTRAL_TIP;Reset all sliders and curves to their default values. -!TP_RETINEX_OFFSET;Offset (brightness) -!TP_RETINEX_SCALES;Gaussian gradient -!TP_RETINEX_SCALES_TOOLTIP;If slider at 0, all iterations are identical.\nIf > 0 Scale and radius are reduced when iterations increase, and conversely. -!TP_RETINEX_SETTINGS;Settings -!TP_RETINEX_SKAL;Scale -!TP_RETINEX_SLOPE;Free gamma slope -!TP_RETINEX_STRENGTH;Strength -!TP_RETINEX_THRESHOLD;Threshold -!TP_RETINEX_THRESHOLD_TOOLTIP;Limits in/out.\nIn = image source,\nOut = image gauss. -!TP_RETINEX_TLABEL;TM Min=%1 Max=%2 Mean=%3 Sigma=%4 -!TP_RETINEX_TLABEL2;TM Tm=%1 TM=%2 -!TP_RETINEX_TLABEL_TOOLTIP;Transmission map result.\nMin and Max are used by Variance.\nMean and Sigma.\nTm=Min TM=Max of transmission map. -!TP_RETINEX_TRANF;Transmission -!TP_RETINEX_TRANSMISSION;Transmission map -!TP_RETINEX_TRANSMISSION_TOOLTIP;Transmission according to transmission.\nAbscissa: transmission from negative values (min), mean, and positives values (max).\nOrdinate: amplification or reduction. -!TP_RETINEX_UNIFORM;Uniform -!TP_RETINEX_VARIANCE;Contrast -!TP_RETINEX_VARIANCE_TOOLTIP;Low variance increase local contrast and saturation, but can lead to artifacts. -!TP_RETINEX_VIEW;Process -!TP_RETINEX_VIEW_MASK;Mask -!TP_RETINEX_VIEW_METHOD_TOOLTIP;Standard - Normal display.\nMask - Displays the mask.\nUnsharp mask - Displays the image with a high radius unsharp mask.\nTransmission - Auto/Fixed - Displays the file transmission-map, before any action on contrast and brightness.\n\nAttention: the mask does not correspond to reality, but is amplified to make it more visible. -!TP_RETINEX_VIEW_NONE;Standard -!TP_RETINEX_VIEW_TRAN;Transmission - Auto -!TP_RETINEX_VIEW_TRAN2;Transmission - Fixed -!TP_RETINEX_VIEW_UNSHARP;Unsharp mask -!TP_SHARPENING_BLUR;Blur radius -!TP_SHARPENING_CONTRAST;Contrast threshold -!TP_SHARPENMICRO_CONTRAST;Contrast threshold -!TP_SOFTLIGHT_LABEL;Soft Light -!TP_SOFTLIGHT_STRENGTH;Strength -!TP_TM_FATTAL_AMOUNT;Amount -!TP_TM_FATTAL_ANCHOR;Anchor -!TP_TM_FATTAL_LABEL;Dynamic Range Compression -!TP_TM_FATTAL_THRESHOLD;Detail -!TP_WAVELET_1;Level 1 -!TP_WAVELET_2;Level 2 -!TP_WAVELET_3;Level 3 -!TP_WAVELET_4;Level 4 -!TP_WAVELET_5;Level 5 -!TP_WAVELET_6;Level 6 -!TP_WAVELET_7;Level 7 -!TP_WAVELET_8;Level 8 -!TP_WAVELET_9;Level 9 -!TP_WAVELET_APPLYTO;Apply To -!TP_WAVELET_AVOID;Avoid color shift -!TP_WAVELET_B0;Black -!TP_WAVELET_B1;Grey -!TP_WAVELET_B2;Residual -!TP_WAVELET_BACKGROUND;Background -!TP_WAVELET_BACUR;Curve -!TP_WAVELET_BALANCE;Contrast balance d/v-h -!TP_WAVELET_BALANCE_TOOLTIP;Alters the balance between the wavelet directions: vertical-horizontal and diagonal.\nIf contrast, chroma or residual tone mapping are activated, the effect due to balance is amplified. -!TP_WAVELET_BALCHRO;Chroma balance -!TP_WAVELET_BALCHRO_TOOLTIP;If enabled, the 'Contrast balance' curve or slider also modifies chroma balance. -!TP_WAVELET_BANONE;None -!TP_WAVELET_BASLI;Slider -!TP_WAVELET_BATYPE;Contrast balance method -!TP_WAVELET_CBENAB;Toning and Color Balance -!TP_WAVELET_CB_TOOLTIP;For strong values product color-toning by combining it or not with levels decomposition 'toning'\nFor low values you can change the white balance of the background (sky, ...) without changing that of the front plane, generally more contrasted -!TP_WAVELET_CCURVE;Local contrast -!TP_WAVELET_CH1;Whole chroma range -!TP_WAVELET_CH2;Saturated/pastel -!TP_WAVELET_CH3;Link contrast levels -!TP_WAVELET_CHCU;Curve -!TP_WAVELET_CHR;Chroma-contrast link strength -!TP_WAVELET_CHRO;Saturated/pastel threshold -!TP_WAVELET_CHRO_TOOLTIP;Sets the wavelet level which will be the threshold between saturated and pastel colors.\n1-x: saturated\nx-9: pastel\n\nIf the value exceeds the amount of wavelet levels you are using then it will be ignored. -!TP_WAVELET_CHR_TOOLTIP;Adjusts chroma as a function of "contrast levels" and "chroma-contrast link strength" -!TP_WAVELET_CHSL;Sliders -!TP_WAVELET_CHTYPE;Chrominance method -!TP_WAVELET_COLORT;Opacity Red-Green -!TP_WAVELET_COMPCONT;Contrast -!TP_WAVELET_COMPGAMMA;Compression gamma -!TP_WAVELET_COMPGAMMA_TOOLTIP;Adjusting the gamma of the residual image allows you to equilibrate the data and histogram. -!TP_WAVELET_COMPTM;Tone mapping -!TP_WAVELET_CONTEDIT;'After' contrast curve -!TP_WAVELET_CONTR;Gamut -!TP_WAVELET_CONTRA;Contrast -!TP_WAVELET_CONTRAST_MINUS;Contrast - -!TP_WAVELET_CONTRAST_PLUS;Contrast + -!TP_WAVELET_CONTRA_TOOLTIP;Changes contrast of the residual image. -!TP_WAVELET_CTYPE;Chrominance control -!TP_WAVELET_CURVEEDITOR_CC_TOOLTIP;Modifies local contrast as a function of the original local contrast (abscissa).\nLow abscissa values represent small local contrast (real values about 10..20).\n50% abscissa represents average local contrast (real value about 100..300).\n66% abscissa represents standard deviation of local contrast (real value about 300..800).\n100% abscissa represents maximum local contrast (real value about 3000..8000). -!TP_WAVELET_CURVEEDITOR_CH;Contrast levels=f(Hue) -!TP_WAVELET_CURVEEDITOR_CH_TOOLTIP;Modifies each level's contrast as a function of hue.\nTake care not to overwrite changes made with the Gamut sub-tool's hue controls.\nThe curve will only have an effect when wavelet contrast level sliders are non-zero. -!TP_WAVELET_CURVEEDITOR_CL;L -!TP_WAVELET_CURVEEDITOR_CL_TOOLTIP;Applies a final contrast luminance curve at the end of the wavelet treatment. -!TP_WAVELET_CURVEEDITOR_HH;HH -!TP_WAVELET_CURVEEDITOR_HH_TOOLTIP;Modifies the residual image's hue as a function of hue. -!TP_WAVELET_DALL;All directions -!TP_WAVELET_DAUB;Edge performance -!TP_WAVELET_DAUB2;D2 - low -!TP_WAVELET_DAUB4;D4 - standard -!TP_WAVELET_DAUB6;D6 - standard plus -!TP_WAVELET_DAUB10;D10 - medium -!TP_WAVELET_DAUB14;D14 - high -!TP_WAVELET_DAUB_TOOLTIP;Changes Daubechies coefficients:\nD4 = Standard,\nD14 = Often best performance, 10% more time-intensive.\n\nAffects edge detection as well as the general quality of the firsts levels. However the quality is not strictly related to this coefficient and can vary with images and uses. -!TP_WAVELET_DONE;Vertical -!TP_WAVELET_DTHR;Diagonal -!TP_WAVELET_DTWO;Horizontal -!TP_WAVELET_EDCU;Curve -!TP_WAVELET_EDGCONT;Local contrast -!TP_WAVELET_EDGCONT_TOOLTIP;Adjusting the points to the left decreases contrast, and to the right increases it.\nBottom-left, top-left, top-right and bottom-right represent respectively local contrast for low values, mean, mean+stdev and maxima. -!TP_WAVELET_EDGE;Edge Sharpness -!TP_WAVELET_EDGEAMPLI;Base amplification -!TP_WAVELET_EDGEDETECT;Gradient sensitivity -!TP_WAVELET_EDGEDETECTTHR;Threshold low (noise) -!TP_WAVELET_EDGEDETECTTHR2;Threshold high (detection) -!TP_WAVELET_EDGEDETECTTHR_TOOLTIP;This adjuster lets you target edge detection for example to avoid applying edge sharpness to fine details, such as noise in the sky. -!TP_WAVELET_EDGEDETECT_TOOLTIP;Moving the slider to the right increases edge sensitivity. This affects local contrast, edge settings and noise. -!TP_WAVELET_EDGESENSI;Edge sensitivity -!TP_WAVELET_EDGREINF_TOOLTIP;Reinforce or reduce the action of the first level, do the opposite to the second level, and leave the rest unchanged. -!TP_WAVELET_EDGTHRESH;Detail -!TP_WAVELET_EDGTHRESH_TOOLTIP;Change the repartition between the first levels and the others. The higher the threshold the more the action is centered on the first levels. Be careful with negative values, they increase the action of high levels and can introduce artifacts. -!TP_WAVELET_EDRAD;Radius -!TP_WAVELET_EDRAD_TOOLTIP;This radius adjustment is very different from those in other sharpening tools. Its value is compared to each level through a complex function. In this sense, a value of zero still has an effect. -!TP_WAVELET_EDSL;Threshold Sliders -!TP_WAVELET_EDTYPE;Local contrast method -!TP_WAVELET_EDVAL;Strength -!TP_WAVELET_FINAL;Final Touchup -!TP_WAVELET_FINEST;Finest -!TP_WAVELET_HIGHLIGHT;Highlight luminance range -!TP_WAVELET_HS1;Whole luminance range -!TP_WAVELET_HS2;Shadows/Highlights -!TP_WAVELET_HUESKIN;Skin hue -!TP_WAVELET_HUESKIN_TOOLTIP;The bottom points set the beginning of the transition zone, and the upper points the end of it, where the effect is at its maximum.\n\nIf you need to move the area significantly, or if there are artifacts, then the white balance is incorrect. -!TP_WAVELET_HUESKY;Sky hue -!TP_WAVELET_HUESKY_TOOLTIP;The bottom points set the beginning of the transition zone, and the upper points the end of it, where the effect is at its maximum.\n\nIf you need to move the area significantly, or if there are artifacts, then the white balance is incorrect. -!TP_WAVELET_ITER;Delta balance levels -!TP_WAVELET_ITER_TOOLTIP;Left: increase low levels and reduce high levels,\nRight: reduce low levels and increase high levels. -!TP_WAVELET_LABEL;Wavelet Levels -!TP_WAVELET_LARGEST;Coarsest -!TP_WAVELET_LEVCH;Chroma -!TP_WAVELET_LEVDIR_ALL;All levels in all directions -!TP_WAVELET_LEVDIR_INF;Below or equal the level -!TP_WAVELET_LEVDIR_ONE;One level -!TP_WAVELET_LEVDIR_SUP;Above the level -!TP_WAVELET_LEVELS;Wavelet levels -!TP_WAVELET_LEVELS_TOOLTIP;Choose the number of detail levels the image is to be decomposed into. More levels require more RAM and require a longer processing time. -!TP_WAVELET_LEVF;Contrast -!TP_WAVELET_LEVLABEL;Preview maximum possible levels = %1 -!TP_WAVELET_LEVONE;Level 2 -!TP_WAVELET_LEVTHRE;Level 4 -!TP_WAVELET_LEVTWO;Level 3 -!TP_WAVELET_LEVZERO;Level 1 -!TP_WAVELET_LINKEDG;Link with Edge Sharpness' Strength -!TP_WAVELET_LIPST;Enhanced algoritm -!TP_WAVELET_LOWLIGHT;Shadow luminance range -!TP_WAVELET_MEDGREINF;First level -!TP_WAVELET_MEDI;Reduce artifacts in blue sky -!TP_WAVELET_MEDILEV;Edge detection -!TP_WAVELET_MEDILEV_TOOLTIP;When you enable Edge Detection, it is recommanded:\n- to disabled low contrast levels to avoid artifacts,\n- to use high values of gradient sensitivity.\n\nYou can modulate the strength with 'refine' from Denoise and Refine. -!TP_WAVELET_NEUTRAL;Neutral -!TP_WAVELET_NOIS;Denoise -!TP_WAVELET_NOISE;Denoise and Refine -!TP_WAVELET_NPHIGH;High -!TP_WAVELET_NPLOW;Low -!TP_WAVELET_NPNONE;None -!TP_WAVELET_NPTYPE;Neighboring pixels -!TP_WAVELET_NPTYPE_TOOLTIP;This algorithm uses the proximity of a pixel and eight of its neighbors. If less difference, edges are reinforced. -!TP_WAVELET_OPACITY;Opacity Blue-Yellow -!TP_WAVELET_OPACITYW;Contrast balance d/v-h curve -!TP_WAVELET_OPACITYWL;Final local contrast -!TP_WAVELET_OPACITYWL_TOOLTIP;Modify the final local contrast at the end of the wavelet treatment.\n\nThe left side represents the smallest local contrast, progressing to the largest local contrast on the right. -!TP_WAVELET_PASTEL;Pastel chroma -!TP_WAVELET_PROC;Process -!TP_WAVELET_RE1;Reinforced -!TP_WAVELET_RE2;Unchanged -!TP_WAVELET_RE3;Reduced -!TP_WAVELET_RESCHRO;Chroma -!TP_WAVELET_RESCON;Shadows -!TP_WAVELET_RESCONH;Highlights -!TP_WAVELET_RESID;Residual Image -!TP_WAVELET_SAT;Saturated chroma -!TP_WAVELET_SETTINGS;Wavelet Settings -!TP_WAVELET_SKIN;Skin targetting/protection -!TP_WAVELET_SKIN_TOOLTIP;At -100 skin-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 skin-tones are protected while all other tones are affected. -!TP_WAVELET_SKY;Sky targetting/protection -!TP_WAVELET_SKY_TOOLTIP;At -100 sky-tones are targetted.\nAt 0 all tones are treated equally.\nAt +100 sky-tones are protected while all other tones are affected. -!TP_WAVELET_STREN;Strength -!TP_WAVELET_STRENGTH;Strength -!TP_WAVELET_SUPE;Extra -!TP_WAVELET_THR;Shadows threshold -!TP_WAVELET_THRESHOLD;Highlight levels -!TP_WAVELET_THRESHOLD2;Shadow levels -!TP_WAVELET_THRESHOLD2_TOOLTIP;Only levels between 9 and 9 minus the value will be affected by the shadow luminance range. Other levels will be fully treated. The highest level possible is limited by the highlight level value (9 minus highlight level value). -!TP_WAVELET_THRESHOLD_TOOLTIP;Only levels beyond the chosen value will be affected by the highlight luminance range. Other levels will be fully treated. The chosen value here limits the highest possible value of the shadow levels. -!TP_WAVELET_THRH;Highlights threshold -!TP_WAVELET_TILESBIG;Big tiles -!TP_WAVELET_TILESFULL;Full image -!TP_WAVELET_TILESIZE;Tiling method -!TP_WAVELET_TILESLIT;Little tiles -!TP_WAVELET_TILES_TOOLTIP;Processing the full image leads to better quality and is the recommended option, while using tiles is a fall-back solution for users with little RAM. Refer to RawPedia for memory requirements. -!TP_WAVELET_TMSTRENGTH;Compression strength -!TP_WAVELET_TMSTRENGTH_TOOLTIP;Control the strength of tone mapping or contrast compression of the residual image. When the value is different from 0, the Strength and Gamma sliders of the Tone Mapping tool in the Exposure tab will become grayed out. -!TP_WAVELET_TMTYPE;Compression method -!TP_WAVELET_TON;Toning -!TP_WBALANCE_PICKER;Pick -!TP_WBALANCE_TEMPBIAS;AWB temperature bias -!TP_WBALANCE_TEMPBIAS_TOOLTIP;Allows to alter the computation of the "auto white balance"\nby biasing it towards warmer or cooler temperatures. The bias\nis expressed as a percentage of the computed temperature,\nso that the result is given by "computedTemp + computedTemp * bias". From c71d70f0ea4834afff15758fdd5b83dbab7c201b Mon Sep 17 00:00:00 2001 From: Desmis Date: Sun, 13 Jan 2019 14:49:11 +0100 Subject: [PATCH 08/23] Add structure to shape detection for colorlight and exposure --- rtdata/languages/default | 3 + rtengine/dcrop.cc | 2 +- rtengine/improccoordinator.cc | 16 +- rtengine/improcfun.h | 8 +- rtengine/iplocallab.cc | 924 ++++++++-------------------------- rtengine/procevents.h | 2 + rtengine/procparams.cc | 10 +- rtengine/procparams.h | 2 + rtengine/refreshmap.cc | 4 +- rtengine/simpleprocess.cc | 8 +- rtgui/locallab.cc | 37 ++ rtgui/locallab.h | 3 + rtgui/paramsedited.cc | 14 + rtgui/paramsedited.h | 2 + 14 files changed, 301 insertions(+), 734 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index a51999ede..fd1e80cf2 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -864,6 +864,8 @@ HISTORY_MSG_608;Local - Color Mask L HISTORY_MSG_609;Local - Exp Mask C HISTORY_MSG_610;Local - Exp Mask L HISTORY_MSG_611;Local - Color Mask H +HISTORY_MSG_612;Local - Color Structure +HISTORY_MSG_613;Local - Exp Structure HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -2039,6 +2041,7 @@ TP_LOCALLAB_USEMASK;Use mask TP_LOCALLAB_SOFT;Soft Light TP_LOCALLAB_STRENG;Strength TP_LOCALLAB_STRENGTH;Noise +TP_LOCALLAB_STRUCCOL;Structure TP_LOCALLAB_STYPE;Shape method TP_LOCALLAB_STYPE_TOOLTIP;You can choose between:\nSymmetrical - left handle linked to right, top handle linked to bottom.\nIndependent - all handles are independent. TP_LOCALLAB_SYMSL;Symmetrical (mouse + sliders) diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index cca4fd2ec..b8afd3c7a 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -951,7 +951,7 @@ void Crop::update(int todo) hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, sca); - parent->ipf.Lab_Local(1, sp, parent->sobelrefs, (float**)shbuffer, labnCrop, labnCrop, reservCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, lllocalcurve2, + parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, lllocalcurve2, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, LHutili, HHutili, cclocalcurve2, localskutili, sklocalcurve2, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, huere, chromare, lumare, sobelre); lllocalcurve2.clear(); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 267c95aea..fcb09d36a 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -27,6 +27,7 @@ #include #include #include +#include "jaggedarray.h" #include "iccstore.h" #include @@ -772,6 +773,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) float **shbuffer = nullptr; int sca = 1; double huere, chromare, lumare, huerefblu, sobelre; + JaggedArray blend(pW, pH); for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) { // Set local curves of current spot to LUT @@ -805,9 +807,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) // Reference parameters computation if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reserv, reserv, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } else { - ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, nprevl, nprevl, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, @@ -830,13 +832,13 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) * - maxspot, huerefs, centerx and centery aren't used in Lab_Local (only for printf) so values aren't important * - shbuffer is used as nullptr */ - ipf.Lab_Local(3, sp, sobelrefs, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, + ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, LHutili, HHutili, cclocalcurve, localskutili, sklocalcurve, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, huer, chromar, lumar, sobeler); if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reserv, reserv, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } else { - ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, nprevl, nprevl, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } // Clear local curves @@ -848,9 +850,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) { //update references after threatment if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reserv, reserv, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } else { - ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, nprevl, nprevl, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } huerblu = huerefblurs[sp] = huerefblu; huer = huerefs[sp] = huere; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 35adef0d6..bf6d59b11 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -286,10 +286,10 @@ public: //locallab void MSRLocal(int sp, float** luminance, float** templ, const float* const *originalLuminance, const int width, const int height, const LocallabParams &loc, const int skip, const LocretigainCurve &locRETgainCcurve, const int chrome, const int scall, const float krad, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); // void calc_ref (LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huere, double &chromare, double &lumare, double &sobelref); - void calc_ref(int sp, LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &huere, double &chromare, double &lumare, double &sobelref, LUTu & histogram); + void calc_ref(int sp, LabImage* original, LabImage* transformed, float **blend, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &huere, double &chromare, double &lumare, double &sobelref, LUTu & histogram); void copy_ref(LabImage* spotbuffer, LabImage* original, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp, double &huerefspot, double &chromarefspot, double &lumarefspot); void paste_ref(LabImage* spotbuffer, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp); - void Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, LUTf & lightCurveloc, double & huerefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref); + void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, LUTf & lightCurveloc, double & huerefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk); void BlurNoise_Localold(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy); void InverseBlurNoise_Local(const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy); @@ -302,7 +302,7 @@ public: void vibrancelocal(int sp, int bfw, int bfh, LabImage* lab, LabImage* dest, bool & localskutili, LUTf & sklocalcurve); // void Expo_vibr_Local(float moddE, float powdE, int senstype, float **buflight, float **bufchro, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, const LabImage * const tmp1, int cx, int cy, int sk); - void Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk); + void Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk); void exlabLocal(const local_params& lp, int bfh, int bfw, LabImage* bufexporig, LabImage* lab, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve); void Exclude_Local(float moddE, float powdE, int sen, float **deltaso, float **buflight, float **bufchro, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * rsv, LabImage * reserv, int cx, int cy, int sk); @@ -311,7 +311,7 @@ public: void fftw_denoise(int GW, int GH, int max_numblox_W, int min_numblox_W, float **tmp1, array2D *Lin, int numThreads, const struct local_params & lp, int chrom); - void ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float **buflight, float **bufchro, float **bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); + void ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float **buflight, float **bufchro, float **bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, float ** blendch, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); void InverseColorLight_Local(const struct local_params& lp, LUTf & lightCurveloc, LabImage* original, LabImage* transformed, int cx, int cy, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, int sk); void Sharp_Local(int call, float **loctemp, int senstype, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 09a616ebc..f15db7384 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -157,8 +157,11 @@ struct local_params { float thr; int prox; int chro, cont, sens, sensh, senscb, sensbn, senstm, sensex, sensexclu, sensden, senslc, senssf; + float struco; + float struexp; float ligh; int shamo, shdamp, shiter, senssha, sensv; + float neig; float strng; float lcamount; double shrad; @@ -361,7 +364,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall double local_dyy = locallab.spots.at(sp).iter / 8000.0; float iterati = (float) locallab.spots.at(sp).iter; // double local_dyy = locallab.proxi; - + float neigh = float (locallab.spots.at(sp).neigh); float chromaPastel = float (locallab.spots.at(sp).pastels) / 100.0f; float chromaSatur = float (locallab.spots.at(sp).saturated) / 100.0f; int local_sensiv = locallab.spots.at(sp).sensiv; @@ -465,6 +468,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall int local_sensicb = locallab.spots.at(sp).sensicb; int local_contrast = locallab.spots.at(sp).contrast; float local_lightness = (float) locallab.spots.at(sp).lightness; + float structcolor = (float) locallab.spots.at(sp).structcol; + float structexpo = (float) locallab.spots.at(sp).structexp; int local_transit = locallab.spots.at(sp).transit; double radius = (double) locallab.spots.at(sp).radius; double sharradius = ((double) locallab.spots.at(sp).sharradius) / 100. ; @@ -499,6 +504,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.lxL = w * local_xL; lp.lyT = h * local_yT; lp.chro = local_chroma; + lp.struco = structcolor; + lp.struexp = structexpo; lp.sens = local_sensi; lp.sensh = local_sensih; lp.dehaze = local_dehaze; @@ -507,7 +514,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.ligh = local_lightness; lp.senssf = local_sensisf; lp.strng = strlight; - + lp.neig = neigh; if (lp.ligh >= -2.f && lp.ligh <= 2.f) { lp.ligh /= 5.f; } @@ -5039,7 +5046,7 @@ void ImProcFunctions::Exclude_Local(float moddE, float powdE, int sen, float **d } -void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk) +void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk) { //local exposure and vibrance @@ -5068,7 +5075,11 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La constexpr float bchsens = 1.f - 20.f * achsens; const float multchro = varsens * achsens + bchsens; - //luma + //sobel + sobelref /= 100.; + if(sobelref > 60.) sobelref = 60.; + sobelref = log(1.f + sobelref); + //skin constexpr float amplchsensskin = 1.6f; @@ -5206,17 +5217,30 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float rchro = sqrt(SQR(origblur->b[y][x]) + SQR(origblur->a[y][x])) / 327.68f; #endif float rL = origblur->L[y][x] / 327.68f; + float csob = 0.f; + float rs = 0.f; + if (senstype == 1){ + csob = (blend2[loy - begy][lox - begx])/100.f ; + if(csob > 60.f) csob = 60.f; + csob = log(1.f + csob); + rs = sobelref / csob; + } float rhuemask = 0.f; float rchromask = 0.f; float rLmask = 0.f; float dE = 0.f; + float rsob = 0.f; + if(lp.struexp > 0.f && rs > 0.f && senstype == 1) { + rsob = 1.1f * lp.struexp * (rs); + } + if (usemask) { rhuemask = xatan2f(origblurmask->b[y][x], origblurmask->a[y][x]); rchromask = sqrt(SQR(origblurmask->b[y][x]) + SQR(origblurmask->a[y][x])) / 327.68f; rLmask = origblurmask->L[y][x] / 327.68f; - dE = sqrt(SQR(refa - origblurmask->a[y][x] / 327.68f) + SQR(refb - origblurmask->b[y][x] / 327.68f) + SQR(lumaref - origblurmask->L[y][x] / 327.68f)); + dE = rsob + sqrt(SQR(refa - origblurmask->a[y][x] / 327.68f) + SQR(refb - origblurmask->b[y][x] / 327.68f) + SQR(lumaref - origblurmask->L[y][x] / 327.68f)); } else { - dE = sqrt(SQR(refa - origblur->a[y][x] / 327.68f) + SQR(refb - origblur->b[y][x] / 327.68f) + SQR(lumaref - rL)); + dE = rsob + sqrt(SQR(refa - origblur->a[y][x] / 327.68f) + SQR(refb - origblur->b[y][x] / 327.68f) + SQR(lumaref - rL)); rhuemask = rhue; rchromask = rchro; rLmask = rL; @@ -5646,7 +5670,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } -void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float ** buflight, float ** bufchro, float ** bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) +void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float ** buflight, float ** bufchro, float ** bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, float ** blendch, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) { BENCHFUN // chroma and lightness @@ -5699,7 +5723,9 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm float refb = chromaref * sin(hueref); // const float moddE = 2.f; - + sobelref /= 100.; + if(sobelref > 60.) sobelref = 60.; + sobelref = log(1.f + sobelref); // constant and variables to prepare shape detection if (lumaref + modlum >= 100.f) { modlum = (100.f - lumaref) / 2.f; @@ -5839,17 +5865,27 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm if (fabs(origblur->b[y][x]) < 0.01f) { origblur->b[y][x] = 0.01f; } + //Sobel + float csob = (blend2[loy - begy][lox - begx])/100.f ; //+ (blendch[loy - begy][lox - begx])/100.f ; + if(csob > 60.f) csob = 60.f; + csob = log(1.f + csob); + float rs = sobelref / csob; + float dE = 0.f; float rhuemask = 0.f; float rchromask = 0.f; float rLmask = 0.f; + float rsob = 0.f; + if(lp.struco > 0.f && rs > 0.f) { + rsob = 1.1f * lp.struco * (rs); + } if (lp.showmaskcolmet >= 2) { rhuemask = xatan2f(origblurmask->b[y][x], origblurmask->a[y][x]); rchromask = sqrt(SQR(origblurmask->b[y][x]) + SQR(origblurmask->a[y][x])) / 327.68f; rLmask = origblurmask->L[y][x] / 327.68f; - dE = sqrt(SQR(refa - origblurmask->a[y][x] / 327.68f) + SQR(refb - origblurmask->b[y][x] / 327.68f) + SQR(lumaref - origblurmask->L[y][x] / 327.68f)); + dE = rsob + sqrt(SQR(refa - origblurmask->a[y][x] / 327.68f) + SQR(refb - origblurmask->b[y][x] / 327.68f) + SQR(lumaref - origblurmask->L[y][x] / 327.68f)); } else { - dE = sqrt(SQR(refa - origblur->a[y][x] / 327.68f) + SQR(refb - origblur->b[y][x] / 327.68f) + SQR(lumaref - rL)); + dE = rsob + sqrt(SQR(refa - origblur->a[y][x] / 327.68f) + SQR(refb - origblur->b[y][x] / 327.68f) + SQR(lumaref - rL)); rhuemask = rhue; rchromask = rchro; rLmask = rL; @@ -7051,7 +7087,7 @@ void ImProcFunctions::InverseColorLight_Local(const struct local_params & lp, LU } -void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transformed, int cx, int cy, int oW, int oH, int sk, double & huerefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, LUTu & histogram) +void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transformed, float **blend, int cx, int cy, int oW, int oH, int sk, double & huerefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, LUTu & histogram) { if (params->locallab.enabled) { //always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise @@ -7129,6 +7165,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform spotSise2 = (spotSi - 1) / 2; + JaggedArray blend3(spotSi, spotSi); origsob = new LabImage(spotSi, spotSi); sobelL = new LabImage(spotSi, spotSi); @@ -7183,13 +7220,14 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform aveL += original->L[y - cy][x - cx]; aveA += original->a[y - cy][x - cx]; aveB += original->b[y - cy][x - cx]; + // aveblend += 100.f * blend2[y - cy][x - cx]; aveChro += sqrtf(SQR(original->b[y - cy][x - cx]) + SQR(original->a[y - cy][x - cx])); nab++; } } //ref for sobel - bool toto = false; + bool toto = true; if (toto) { for (int y = max(cy, (int)(lp.yc - spotSise2)); y < min(transformed->H + cy, (int)(lp.yc + spotSise2 + 1)); y++) { @@ -7206,19 +7244,19 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform } const float radius = 3.f / (sk * 1.4f); //0 to 70 ==> see skip - SobelCannyLuma(sobelL->L, origsob->L, spotSi, spotSi, radius); - // SobelCannyLuma (sobelL, deltasobelL, origsob, spotSi, spotSi, radius ); + SobelCannyLuma(sobelL->L, origsob->L, spotSi, spotSi, radius); int nbs = 0; for (int y = 0; y < spotSi ; y ++) for (int x = 0; x < spotSi ; x ++) { - avesobel += sobelL->L[y][x]; + avesobel += sobelL->L[y][x]; + // avesobel += blend3[y][x]; nbs++; } sobelref = avesobel / nbs; - // printf ("sobelref=%f \n", sobelref); + printf ("sobelref=%f \n", sobelref); } delete sobelL; @@ -7577,7 +7615,7 @@ void ImProcFunctions::fftw_denoise(int GW, int GH, int max_numblox_W, int min_nu -void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, int cx, int cy, int oW, int oH, int sk, +void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, double & huerefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref) { @@ -7781,700 +7819,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu } - - bool titi = false; - - if (titi) { //&& call == 3 - -//actually does not work at all, I make different tests ! - - // if (lp.strucc > 0) { - //change coordonate to XX, YY XX=x, YY=-y to can use easily trigo functions and polar coordonates - // xc yc are XX=0 YY=0 - //at the end we convert inverse - // we have 4 quarter for the area bfw * bfh : TOP, LEFT, BOTTOM, RIGHT - //Cdeltae Ldeltae - deltaE Chroma and Luma in area bfw bfh - //Cdeltaesob Ldeltaesob - Sobel transformed of deltaE Chroma and Luma in area bfw bfh - - //retreive coordonate and values of references around current exclude Spot - - //retrieve datas for hueref, sobelref and centerX Y for all spot around - /* - huerefs[sp]; - sobelrefs[sp]; - centerx[sp]; - centery[sp]; - */ - /* - int currentcenterx = centerx[0]; - int currentcentery = centery[0]; - printf("cuX=%i cuY=%i sp=%i\n", currentcenterx, currentcentery, sp); - - for (int i = 1; i < maxspot; i++) { - printf("i=%i hue=%f sob=%f cex=%i cey=%i\n", i, huerefs[i], sobelrefs[i], centerx[i], centery[i]); - - } - */ - - JaggedArray Cdeltae(bfw, bfh); - JaggedArray Cdeltaesob(bfw, bfh); - JaggedArray Ldeltae(bfw, bfh); - JaggedArray Ldeltaesob(bfw, bfh); - - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ir = 0; ir < bfh; ir++) //fill with 0 - for (int jr = 0; jr < bfw; jr++) { - Cdeltae[ir][jr] = 0.f; - Ldeltae[ir][jr] = 0.f; - Cdeltaesob[ir][jr] = 0.f; - Ldeltaesob[ir][jr] = 0.f; - } - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ir = 0; ir < bfh; ir++) - for (int jr = 0; jr < bfw; jr++) { - float tempc = SQR(bufreserv->a[ir][jr] - bufexclu->a[ir][jr]) + SQR(bufreserv->b[ir][jr] - bufexclu->b[ir][jr]); - float templ = fabs(bufreserv->L[ir][jr] - bufexclu->L[ir][jr]); - Cdeltae[ir][jr] = sqrt(tempc); - Ldeltae[ir][jr] = templ; - } - - - SobelCannyLuma(Cdeltaesob, Cdeltae, bfw, bfh, 0);//0 or other thing eg radiussob if noise... - SobelCannyLuma(Ldeltaesob, Ldeltae, bfw, bfh, 0); - - int Xo = trunc(-lp.lxL); - int Xe = trunc(lp.lx); - int Yo = trunc(-lp.ly); - int Ye = trunc(lp.lyT); - int ar = 1;//to avoid crash due to round values - //init first quarter top - int XR = max(-Xo, Xe); - - //rr maximum radius to stock data - int rr = sqrt(SQR(XR) + SQR(Ye)) + ar; //+ ar to prevent crash due to round float - //polar coord - JaggedArray val(rr, xEn - begx + ar); - JaggedArray CdE(rr, xEn - begx + ar); - JaggedArray LdE(rr, xEn - begx + ar); - JaggedArray CdEsob(rr, xEn - begx + ar); - JaggedArray LdEsob(rr, xEn - begx + ar); - JaggedArray Soderiv(rr, xEn - begx + ar); - JaggedArray Chderiv(rr, xEn - begx + ar); - JaggedArray Luderiv(rr, xEn - begx + ar); - JaggedArray goodmax(rr, xEn - begx + ar); - JaggedArray Soderiv2(rr, xEn - begx + ar); - JaggedArray Chderiv2(rr, xEn - begx + ar); - JaggedArray Luderiv2(rr, xEn - begx + ar); - JaggedArray Totalderiv2(rr, xEn - begx + ar); - - //cDe and LdE to stock delta E chroma and luma in area top and polar coord - //cDesob and LdEsob Sobel canny of delta E chroma and luma - //Chderiv Luderiv derivative of Sobel deltae Chroma Luma - //Soderiv derivative of sobel - - //good max : find the good max value. This value perhaps is max, but perhaps it is after - on the radius - and before the end - - //keep radius On OFF action - float *rad = nullptr; - rad = new float[xEn - begx + ar]; - - float *maxsob = nullptr; - maxsob = new float[xEn - begx + ar]; - float *meanbef = nullptr; - meanbef = new float[xEn - begx + ar]; - float *meanaft = nullptr; - meanaft = new float[xEn - begx + ar]; - - //radlim maximum radius - float *radlim = nullptr; - radlim = new float[xEn - begx + ar]; - - //init second quarter left - int YL = max(-Yo, Ye); - int rrL = sqrt(SQR(YL) + SQR(Xo)) + ar; - - JaggedArray valL(rrL, yEn - begy + ar); - JaggedArray CdEL(rrL, yEn - begy + ar); - JaggedArray LdEL(rrL, yEn - begy + ar); - JaggedArray CdEsobL(rrL, yEn - begy + ar); - JaggedArray LdEsobL(rrL, yEn - begy + ar); - JaggedArray SoderivL(rrL, yEn - begy + ar); - JaggedArray ChderivL(rrL, yEn - begy + ar); - JaggedArray LuderivL(rrL, yEn - begy + ar); - - float *radL = nullptr; - radL = new float[yEn - begy + ar]; - float *radlimL = nullptr; - radlimL = new float[yEn - begy + ar]; - - - //init third quarter bottom - XR = max(-Xo, Xe); - int rrB = sqrt(SQR(XR) + SQR(Yo)) + ar; - - JaggedArray valB(rrB, xEn - begx + ar); - JaggedArray CdEB(rrB, xEn - begx + ar); - JaggedArray LdEB(rrB, xEn - begx + ar); - JaggedArray CdEsobB(rrB, xEn - begx + ar); - JaggedArray LdEsobB(rrB, xEn - begx + ar); - JaggedArray SoderivB(rrB, xEn - begx + ar); - JaggedArray ChderivB(rrB, xEn - begx + ar); - JaggedArray LuderivB(rrB, xEn - begx + ar); - - float *radB = nullptr; - radB = new float[xEn - begx + ar]; - float *radlimB = nullptr; - radlimB = new float[xEn - begx + ar]; - - - //init fourth quarter right - YL = max(-Yo, Ye); - int rrR = sqrt(SQR(YL) + SQR(Xe)) + ar; - JaggedArray valR(rrR, yEn - begy + ar); - JaggedArray CdER(rrR, yEn - begy + ar); - JaggedArray LdER(rrR, yEn - begy + ar); - JaggedArray CdEsobR(rrR, yEn - begy + ar); - JaggedArray LdEsobR(rrR, yEn - begy + ar); - JaggedArray SoderivR(rrR, yEn - begy + ar); - JaggedArray ChderivR(rrR, yEn - begy + ar); - JaggedArray LuderivR(rrR, yEn - begy + ar); - - float *radR = nullptr; - radR = new float[yEn - begy + ar]; - float *radlimR = nullptr; - radlimR = new float[yEn - begy + ar]; - - //printf("huar=%f sob=%f cx=%i\n", huerefs[2], sobelrefs[2], centerx[1]); - - - for (int w = 0; w < (xEn - begx); w++) { - rad[w] = 0.f; - radlim[w] = 0.f; - radB[w] = 0.f; - radlimB[w] = 0.f; - } - - for (int w = 0; w < (xEn - begx); w++) { - for (int z = 0; z < rr; z++) { - val[w][z] = 0.f; - Soderiv[w][z] = 0.f; - Chderiv[w][z] = 0.f; - Luderiv[w][z] = 0.f; - Soderiv2[w][z] = 0.f; - Chderiv2[w][z] = 0.f; - Luderiv2[w][z] = 0.f; - Totalderiv2[w][z] = 0.f; - CdE[w][z] = 0.f; - LdE[w][z] = 0.f; - CdEsob[w][z] = 0.f; - LdEsob[w][z] = 0.f; - goodmax[w][z] = 0.f; - - } - } - - for (int w = 0; w < (xEn - begx); w++) { - for (int z = 0; z < rrB; z++) { - valB[w][z] = 0.f; - SoderivB[w][z] = 0.f; - ChderivB[w][z] = 0.f; - LuderivB[w][z] = 0.f; - CdEB[w][z] = 0.f; - LdEB[w][z] = 0.f; - CdEsobB[w][z] = 0.f; - LdEsobB[w][z] = 0.f; - } - } - - for (int w = 0; w < (yEn - begy); w++) { - for (int z = 0; z < rrL; z++) { - valL[w][z] = 0.f; - SoderivL[w][z] = 0.f; - ChderivL[w][z] = 0.f; - LuderivL[w][z] = 0.f; - CdEL[w][z] = 0.f; - LdEL[w][z] = 0.f; - CdEsobL[w][z] = 0.f; - LdEsobL[w][z] = 0.f; - } - } - - for (int w = 0; w < (yEn - begy); w++) { - for (int z = 0; z < rrR; z++) { - valR[w][z] = 0.f; - SoderivR[w][z] = 0.f; - ChderivR[w][z] = 0.f; - LuderivR[w][z] = 0.f; - CdER[w][z] = 0.f; - LdER[w][z] = 0.f; - CdEsobR[w][z] = 0.f; - LdEsobR[w][z] = 0.f; - } - } - - for (int w = 0; w < (yEn - begy); w++) { - radL[w] = 0.f; - radlimL[w] = 0.f; - radR[w] = 0.f; - radlimR[w] = 0.f; - } - - float sobelponder = 2.f * sobelref; - float2 sincosval; - - if (sobelponder > 25000.f) { - sobelponder = 25000.f; - } - - //first step : fill val[m][r] with Sobel-Canny datas - //Canny with very smal denoise to keep good datas :radiussob # 1 2 3 - float valm = 0.f; - - for (int XX = Xo; XX < Xe; XX++) { //first quarter superior - int m = trunc(XX - Xo); - - if (m < 0) { - m = 0; - } - - radlim[m] = sqrt(SQR(XX) + SQR(Ye)); - - float tetacur = xatan2f(Ye, XX);//we can probably supprres xatan2f and repace by XX / Ye but I keep it in case of - float valedge = 0.f; - // float maxval = -10000.f; - // float minval = 100000.f; - - for (int r = 1; r < radlim[m] - (ar + 2); r++) { - sincosval = xsincosf(tetacur); - float xcur = r * sincosval.y; - float ycur = r * sincosval.x; - - int xxcur = trunc(lp.xc) + trunc(xcur) - begx; - xxcur = LIM (xxcur, 0, bfw - 1); - - int yycur = trunc(lp.yc) - trunc(ycur) - begy; // - before ceil(ycur) to convert YY ==> y - yycur = LIM (yycur, 0, bfh - 1); - valm = tmpsob->L[yycur][xxcur]; - CdEsob[m][r] = Cdeltaesob[yycur][xxcur]; - LdEsob[m][r] = Ldeltaesob[yycur][xxcur]; - LdE[m][r] = Ldeltae[yycur][xxcur]; - CdE[m][r] = Cdeltae[yycur][xxcur]; - - if (valm > valedge) { - // if(m > maxm) maxm = m; - val[m][r] = valm; - - if (XX == 2) { - // printf("XX=%i m=%i r=%i val=%i CdE=%i LdE=%i\n", XX, m, r, (int) val[m][r], (int)CdE[m][r], (int)LdE[m][r]); - } - } - - } - - - } - - valm = 0.f; - - for (int YY = Yo; YY < Ye; YY++) { //second quarter left - int m = ceil(YY - Yo); - - if (m < 0) { - m = 0; - } - - radlimL[m] = sqrt(SQR(YY) + SQR(Xo)); - - float tetacur = xatan2f(YY, Xo); - float valedge = 00.f; - - for (int r = 0; r < radlimL[m] - (ar + 2); r++) { - sincosval = xsincosf(tetacur); - float xcur = r * sincosval.y; - float ycur = r * sincosval.x; - - int xxcur = ceil(lp.xc) + ceil(xcur) - begx; - xxcur = LIM (xxcur, 0, bfw - 1); - - int yycur = ceil(lp.yc) - ceil(ycur) - begy; - yycur = LIM (yycur, 0, bfh - 1); - valm = tmpsob->L[yycur][xxcur]; - CdEsobL[m][r] = Cdeltaesob[yycur][xxcur]; - LdEsobL[m][r] = Ldeltaesob[yycur][xxcur]; - LdEL[m][r] = Ldeltae[yycur][xxcur]; - CdEL[m][r] = Cdeltae[yycur][xxcur]; - - if (valm > valedge) { - valL[m][r] = valm; - - if (YY == 0) { - // printf ("YYL=%i m=%i r=%i val=%i \n", YY, m, r, (int) valL[m][r]); - } - } - } - } - - valm = 0.f; - - for (int XX = Xo; XX < Xe; XX++) { //third quarter bottom - int m = ceil(XX - Xo); - - if (m < 0) { - m = 0; - } - - radlimB[m] = sqrt(SQR(XX) + SQR(Yo)); - - float tetacur = xatan2f(Yo, XX); - float valedge = 0.f; - - for (int r = 0; r < radlimB[m] - (ar + 2); r++) { - sincosval = xsincosf(tetacur); - float xcur = r * sincosval.y; - float ycur = r * sincosval.x; - - int xxcur = ceil(lp.xc) + ceil(xcur) - begx; - xxcur = LIM (xxcur, 0, bfw - 1); - - int yycur = ceil(lp.yc) - ceil(ycur) - begy; // - before ceil(ycur) to convert YY ==> y - yycur = LIM (yycur, 0, bfh - 1); - valm = tmpsob->L[yycur][xxcur]; - CdEsobB[m][r] = Cdeltaesob[yycur][xxcur]; - LdEsobB[m][r] = Ldeltaesob[yycur][xxcur]; - LdEB[m][r] = Ldeltae[yycur][xxcur]; - CdEB[m][r] = Cdeltae[yycur][xxcur]; - - if (valm > valedge) { - // if(m > maxm) maxm = m; - valB[m][r] = valm; - - if (XX == 0) { - // printf ("XXB=%i m=%i r=%i val=%i \n", XX, m, r, (int) valB[m][r]); - } - } - } - } - - valm = 0.f; - - for (int YY = Yo; YY < Ye; YY++) { //fourth quarter right - int m = ceil(YY - Yo); - - if (m < 0) { - m = 0; - } - - radlimR[m] = sqrt(SQR(YY) + SQR(Xe)); - - float tetacur = xatan2f(YY, Xe); - float valedge = 00.f; - - for (int r = 0; r < radlimR[m] - (ar + 2); r++) { - sincosval = xsincosf(tetacur); - float xcur = r * sincosval.y; - float ycur = r * sincosval.x; - - int xxcur = ceil(lp.xc) + ceil(xcur) - begx; - xxcur = LIM (xxcur, 0, bfw - 1); - - int yycur = ceil(lp.yc) - ceil(ycur) - begy; - yycur = LIM (yycur, 0, bfh - 1); - valm = tmpsob->L[yycur][xxcur]; - CdEsobR[m][r] = Cdeltaesob[yycur][xxcur]; - LdEsobR[m][r] = Ldeltaesob[yycur][xxcur]; - LdER[m][r] = Ldeltae[yycur][xxcur]; - CdER[m][r] = Cdeltae[yycur][xxcur]; - - if (valm > valedge) { - valR[m][r] = valm; - - if (YY == 0) { - // printf ("YYR=%i m=%i r=%i val=%i \n", YY, m, r, (int) valR[m][r]); - } - } - } - } - - - - //second step : moving average to forgot isolate datas - // it seems that most of edge are among 3 or 4 pixels - // average convolution on 3 datas (only 'r' !) - // derivative function - for (int XX = Xo; XX < Xe; XX++) { //first quarter superior - int m = trunc(XX - Xo); - - if (m < 0) { - m = 0; - } - - float maxval = -10000.f; - int rmax = 0; - float maxso = -10000.f; - // int rmaxso = 0; - float maxch = -10000.f; - // int rmaxch = 0; - int rma = 0; - - //average convolution and first max - for (int r = 1; r < radlim[m] - (ar + 3); r++) { - val[m][r] = 0.333f * (val[m][r - 1] + val[m][r] + val[m][r + 1]); - CdE[m][r] = 0.333f * (CdE[m][r - 1] + CdE[m][r] + CdE[m][r + 1]); - LdE[m][r] = 0.333f * (LdE[m][r - 1] + LdE[m][r] + LdE[m][r + 1]); - CdEsob[m][r] = 0.333f * (CdEsob[m][r - 1] + CdEsob[m][r] + CdEsob[m][r + 1]); - LdEsob[m][r] = 0.333f * (LdEsob[m][r - 1] + LdEsob[m][r] + LdEsob[m][r + 1]); - - if (val[m][r] > maxval) { - maxval = val[m][r]; - rmax = r; - } - } - - maxsob[m] = maxval; - - float meanbe = 0.f; - float meanaf = 0.f; - int nbbef = 0; - int nbaft = 0; - - for (int r = 2; r < radlim[m] - (ar + 4); r++) { - if (r < rmax - 1) { - meanbe += val[m][r]; - nbbef ++; - } - - if (r > rmax + 1) { - meanaf += val[m][r]; - nbaft ++; - } - - if (val[m][r] < 0.4f * sobelrefs[1]) { // TODO Locallab Correct ? - rma = r; - break; - } - } - - rad[m] = rma; - - meanbe /= nbbef; - meanaf /= nbaft; - meanbef[m] = meanbe; - meanaft[m] = meanaf; - - if (XX == 0) { - - printf(" maxsob=%i ram=%i meanbef=%i meanaft=%i\n", (int) maxsob[m], rmax, (int) meanbef[m], (int) meanaft[m]); - } - - //derivative function on 2 values - for (int r = 2; r < radlim[m] - (ar + 6); r++) { - Soderiv[m][r] = (val[m][r] - val[m][r + 2]); - Chderiv[m][r] = (CdEsob[m][r] - CdEsob[m][r + 2]); - Luderiv[m][r] = (LdEsob[m][r] - LdEsob[m][r + 2]); - - if (XX == 0) { - - // printf("X=%i m=%i r=%i So=%i Chd=%i Ld=%i Sdri=%i Csodri=%i Lsodri=%i\n", XX, m, r, (int) val[m][r], (int)CdE[m][r], (int)LdE[m][r], (int) Soderiv[m][r], (int) Chderiv[m][r], (int) Luderiv[m][r]); - } - - // if(val[m][r] < 1.5f* sobelrefs[1]) rad[m] = r; - } - - //pseudo second derivative - //find maxi of derivative and also change sign - for (int r = 2; r < radlim[m] - (ar + 6); r++) { - if (r + 4 < radlim[m] - (ar + 6)) { - if (signbit(Chderiv[m][r]) + signbit(Chderiv[m][r + 4]) == 1) { //one is positive and one is negative - Chderiv2[m][r] = fabs(Chderiv[m][r] - Chderiv[m][r + 4]); - } - - if (signbit(Soderiv[m][r]) + signbit(Soderiv[m][r + 4]) == 1) { //one is positive and one is negative - Soderiv2[m][r] = fabs(Soderiv[m][r] - Soderiv[m][r + 4]); - } - - if (signbit(Luderiv[m][r]) + signbit(Luderiv[m][r + 4]) == 1) { //one is positive and one is negative - Luderiv2[m][r] = fabs(Luderiv[m][r] - Luderiv[m][r + 4]); - } - - Totalderiv2[m][r] = Luderiv2[m][r] + Chderiv2[m][r] + Soderiv2[m][r]; - - if (Chderiv2[m][r] > maxch) { - maxch = Chderiv2[m][r]; - // rmaxch = r; - } - - - if (Soderiv2[m][r] > maxso) { - maxso = Soderiv2[m][r]; - // rmaxso = r; - } - - } - - if (XX == 0) { - - // printf("X=%i m=%i r=%i So=%i Chd=%i Ld=%i Sdri2=%i Cdri2=%i Ldri2=%i To=%i\n", XX, m, r, (int) val[m][r], (int)CdE[m][r], (int)LdE[m][r], (int) Soderiv2[m][r], (int) Chderiv2[m][r], (int) Luderiv2[m][r], (int) Totalderiv2[m][r]); - } - - - } - - //we must now calculate rad[m] in function of others criterail - // rad[m] = rmaxch; - // if(val[m][r] < 1.5f* sobelrefs[1]) rad[m] = r; - - - } - - for (int YY = Yo; YY < Ye; YY++) { //second quarter left - int m = ceil(YY - Yo); - - if (m < 0) { - m = 0; - } - - //average convolution and first max - for (int r = 1; r < radlimL[m] - (ar + 3); r++) { - valL[m][r] = 0.333f * (valL[m][r - 1] + valL[m][r] + valL[m][r + 1]); - CdEL[m][r] = 0.333f * (CdEL[m][r - 1] + CdEL[m][r] + CdEL[m][r + 1]); - LdEL[m][r] = 0.333f * (LdEL[m][r - 1] + LdEL[m][r] + LdEL[m][r + 1]); - CdEsobL[m][r] = 0.333f * (CdEsobL[m][r - 1] + CdEsobL[m][r] + CdEsobL[m][r + 1]); - LdEsobL[m][r] = 0.333f * (LdEsobL[m][r - 1] + LdEsobL[m][r] + LdEsobL[m][r + 1]); - } - - //derivative function on 2 values - for (int r = 2; r < radlimL[m] - (ar + 6); r++) { - SoderivL[m][r] = (valL[m][r] - valL[m][r + 2]); - ChderivL[m][r] = (CdEsobL[m][r] - CdEsobL[m][r + 2]); - LuderivL[m][r] = (LdEsobL[m][r] - LdEsobL[m][r + 2]); - - if (YY == 0) { - - // printf("Y=%i m=%i r=%i So=%i Chd=%i Ld=%i Sdri=%i Csodri=%i Lsodri=%i\n", YY, m, r, (int) valL[m][r], (int)CdEL[m][r], (int)LdEL[m][r], (int) SoderivL[m][r], (int) ChderivL[m][r], (int) LuderivL[m][r]); - } - } - } - - - for (int XX = Xo; XX < Xe; XX++) { //third quarter inf - int m = trunc(XX - Xo); - - if (m < 0) { - m = 0; - } - - //average convolution and first max - for (int r = 1; r < radlimB[m] - (ar + 3); r++) { - valB[m][r] = 0.333f * (valB[m][r - 1] + valB[m][r] + valB[m][r + 1]); - CdEB[m][r] = 0.333f * (CdEB[m][r - 1] + CdEB[m][r] + CdEB[m][r + 1]); - LdEB[m][r] = 0.333f * (LdEB[m][r - 1] + LdEB[m][r] + LdEB[m][r + 1]); - CdEsobB[m][r] = 0.333f * (CdEsobB[m][r - 1] + CdEsobB[m][r] + CdEsobB[m][r + 1]); - LdEsobB[m][r] = 0.333f * (LdEsobB[m][r - 1] + LdEsobB[m][r] + LdEsobB[m][r + 1]); - } - - //derivative function on 2 values - for (int r = 2; r < radlimB[m] - (ar + 6); r++) { - SoderivB[m][r] = (valB[m][r] - valB[m][r + 2]); - ChderivB[m][r] = (CdEsobB[m][r] - CdEsobB[m][r + 2]); - LuderivB[m][r] = (LdEsobB[m][r] - LdEsobB[m][r + 2]); - - if (XX == Xe / 2) { - - // printf("X=%i m=%i r=%i So=%i Chd=%i Ld=%i Sdri=%i Csodri=%i Lsodri=%i\n", XX, m, r, (int) valB[m][r], (int)CdEB[m][r], (int)LdEB[m][r], (int) SoderivB[m][r], (int) ChderivB[m][r], (int) LuderivB[m][r]); - } - } - } - - for (int YY = Yo; YY < Ye; YY++) { //second quarter left - int m = ceil(YY - Yo); - - if (m < 0) { - m = 0; - } - - //average convolution and first max - for (int r = 1; r < radlimR[m] - (ar + 3); r++) { - valR[m][r] = 0.333f * (valR[m][r - 1] + valR[m][r] + valR[m][r + 1]); - CdER[m][r] = 0.333f * (CdER[m][r - 1] + CdER[m][r] + CdER[m][r + 1]); - LdER[m][r] = 0.333f * (LdER[m][r - 1] + LdER[m][r] + LdER[m][r + 1]); - CdEsobR[m][r] = 0.333f * (CdEsobR[m][r - 1] + CdEsobR[m][r] + CdEsobR[m][r + 1]); - LdEsobR[m][r] = 0.333f * (LdEsobR[m][r - 1] + LdEsobR[m][r] + LdEsobR[m][r + 1]); - } - - //derivative function on 2 values - for (int r = 2; r < radlimR[m] - (ar + 6); r++) { - SoderivR[m][r] = (valR[m][r] - valR[m][r + 2]); - ChderivR[m][r] = (CdEsobR[m][r] - CdEsobR[m][r + 2]); - LuderivR[m][r] = (LdEsobR[m][r] - LdEsobR[m][r + 2]); - - if (YY == 0) { - - //printf("Y=%i m=%i r=%i So=%i Chd=%i Ld=%i Sdri=%i Csodri=%i Lsodri=%i\n", YY, m, r, (int) valR[m][r], (int)CdER[m][r], (int)LdER[m][r], (int) SoderivR[m][r], (int) ChderivR[m][r], (int) LuderivR[m][r]); - } - } - } - - //real algo to find good radius - - - // put good values in delatasobelL - for (int XX = Xo; XX < Xe; XX++) { //first quarter superior - int m = trunc(XX - Xo); - - if (m < 0) { - m = 0; - } - - radlim[m] = sqrt(SQR(XX) + SQR(Ye)); - - float tetacur = xatan2f(Ye, XX); - // float valedge = 0.f; - - for (int r = 0; r < radlim[m] - (ar + 2); r++) { - sincosval = xsincosf(tetacur); - float xcur = r * sincosval.y; - float ycur = r * sincosval.x; - - int xxcur = trunc(lp.xc) + trunc(xcur) - begx; - xxcur = LIM (xxcur, 0, bfw - 1); - - int yycur = trunc(lp.yc) - trunc(ycur) - begy; // - before ceil(ycur) to convert YY ==> y - yycur = LIM (yycur, 0, bfh - 1); - - if (r > rad[m]) { - deltasobelL->L[yycur][xxcur] = 0.f; - } - - } - } - - delete[] radlimR; - delete[] radR; - - delete[] radlimB; - delete[] radB; - - delete[] radlimL; - delete[] radL; - - delete[] radlim; - delete[] rad; - delete[] maxsob; - delete[] meanaft; - delete[] meanbef; - - - - } - //then restore non modified area //TODO then use instead of others modifications Color and Light, Blur, etc. @@ -9988,7 +9332,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu } } - Expo_vibr_Local(moddE, powdE, 2, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuev, chromaref, lumaref, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); + Expo_vibr_Local(moddE, powdE, 2, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuev, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); //call Expo_vibr_Local with first parameter = 2 for vibrance } @@ -10361,7 +9705,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu } } - Expo_vibr_Local(moddE, powdE, 3, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuesf, chromaref, lumaref, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); + Expo_vibr_Local(moddE, powdE, 3, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuesf, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); } @@ -10802,6 +10146,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu JaggedArray buflightslid(bfw, bfh); JaggedArray bufchroslid(bfw, bfh); JaggedArray bufhh(bfw, bfh); + JaggedArray blend2(bfw, bfh); + JaggedArray blendch(bfw, bfh); + JaggedArray buforigchro(bfw, bfh); float adjustr = 1.0f; @@ -10850,7 +10197,81 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; int xEn = lp.xc + lp.lx; + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + bufcolorig->L[loy - begy][lox - begx] = original->L[y][x]; + // buforigchro[loy - begy][lox - begx] = sqrt(SQR(original->a[y][x]) + SQR(original->b[y][x])); + } + } + + const float radius = 3.f / (sk * 1.4f); + int spotSi = 1 + 2 * max(1, lp.cir / sk); + if (spotSi < 5) { + spotSi = 5; + } + + if(bfw > 2* spotSi && bfh > 2* spotSi && lp.struco > 0.f) { + SobelCannyLuma(blend2,bufcolorig->L , bfw, bfh, radius); + // SobelCannyLuma(blendch, buforigchro , bfw, bfh, radius); + array2D ble(bfw, bfh); + array2D blec(bfw, bfh); + array2D guid(bfw, bfh); +#ifdef _OPENMP + #pragma omp parallel for +#endif + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + ble[ir][jr] = blend2[ir][jr] / 32768.f; + // blec[ir][jr] = blendch[ir][jr] / 32768.f; + guid[ir][jr] = bufcolorig->L[ir][jr] / 32768.f; + } + float blur = 25 / sk * (10.f + 1.2f * lp.struco); + printf("Blur=%f \n", blur); + + rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiThread); + // rtengine::guidedFilter(guid, blec, blec, blur, 0.001, multiThread); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + blend2[ir][jr] = ble[ir][jr] * 32768.f; + // blendch[ir][jr] = ble[ir][jr] * 32768.f; + } + + bool execmedian = true; + int passes = 1; + if (execmedian) + { + float** tmL; + int wid = bfw; + int hei = bfh; + tmL = new float*[hei]; + for (int i = 0; i < hei; ++i) { + tmL[i] = new float[wid]; + } + Median medianTypeL = Median::TYPE_3X3_STRONG; + Median_Denoise(blend2, blend2, wid, hei, medianTypeL, passes, multiThread, tmL); + // Median_Denoise(blendch, blendch, wid, hei, medianTypeL, 1, multiThread, tmL); + + for (int i = 0; i < hei; ++i) { + delete[] tmL[i]; + } + delete[] tmL; + } + + + } + #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -10884,6 +10305,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu float kmaskHb = 0; if (lp.showmaskcolmet >= 2) { + if (locllmasCurve) { valLL = (float)(locllmasCurve[500.f * (bufcolorig->L[loy - begy][lox - begx]) / 32768.f]); valLL = 1.f - valLL; @@ -10922,6 +10344,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu bufmaskblur->a[loy - begy][lox - begx] = kmaskCa + kmaskHa; bufmaskblur->b[loy - begy][lox - begx] = kmaskCb + kmaskHb; + } } } @@ -11117,7 +10540,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu } } - ColorLight_Local(moddE, powdE, call, bufcolorig, originalmask, buflight, bufchro, bufchroslid, bufhh, buflightslid, LHutili, HHutili, hueplus, huemoins, hueref, dhue, chromaref, lumaref, lllocalcurve, loclhCurve, lochhCurve, lightCurveloc, lp, original, transformed, cx, cy, sk); + ColorLight_Local(moddE, powdE, call, bufcolorig, originalmask, buflight, bufchro, bufchroslid, bufhh, buflightslid, LHutili, HHutili, hueplus, huemoins, hueref, dhue, chromaref, lumaref, sobelref, blend2, blendch, lllocalcurve, loclhCurve, lochhCurve, lightCurveloc, lp, original, transformed, cx, cy, sk); if (call <= 3) { @@ -11179,6 +10602,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu JaggedArray buflightcurv(bfw, bfh); JaggedArray buf_a_cat(bfw, bfh, true); JaggedArray buf_b_cat(bfw, bfh, true); + JaggedArray blend2(bfw, bfh); if (call <= 3) { //simpleprocess, dcrop, improccoordinator @@ -11225,8 +10649,74 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; int xEn = lp.xc + lp.lx; - - + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + bufexporig->L[loy - begy][lox - begx] = original->L[y][x]; + } + } + + const float radius = 3.f / (sk * 1.4f); + int spotSi = 1 + 2 * max(1, lp.cir / sk); + if (spotSi < 5) { + spotSi = 5; + } + + if(bfw > 2* spotSi && bfh > 2* spotSi && lp.struexp > 0.f) { + SobelCannyLuma(blend2,bufexporig->L , bfw, bfh, radius); + array2D ble(bfw, bfh); + array2D guid(bfw, bfh); +#ifdef _OPENMP + #pragma omp parallel for +#endif + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + ble[ir][jr] = blend2[ir][jr] / 32768.f; + guid[ir][jr] = bufexporig->L[ir][jr] / 32768.f; + } + float blur = 25 / sk * (10.f + 1.2f * lp.struexp); + printf("Blur=%f \n", blur); + + rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiThread); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + blend2[ir][jr] = ble[ir][jr] * 32768.f; + } + + bool execmedian = true; + int passes = 1; + if (execmedian) + { + float** tmL; + int wid = bfw; + int hei = bfh; + tmL = new float*[hei]; + for (int i = 0; i < hei; ++i) { + tmL[i] = new float[wid]; + } + Median medianTypeL = Median::TYPE_3X3_STRONG; + Median_Denoise(blend2, blend2, wid, hei, medianTypeL, passes, multiThread, tmL); + + for (int i = 0; i < hei; ++i) { + delete[] tmL[i]; + } + delete[] tmL; + } + + + } + #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) @@ -11461,7 +10951,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, LUTf & sobelrefs, float** shbu } } } - Expo_vibr_Local(moddE, powdE, 1, originalmask, buflight, bufl_ab, buf_a_cat, buf_b_cat, hueplus, huemoins, hueref, dhueex, chromaref, lumaref, lp, original, transformed, difLab, bufcat02fin, cx, cy, sk); + Expo_vibr_Local(moddE, powdE, 1, originalmask, buflight, bufl_ab, buf_a_cat, buf_b_cat, hueplus, huemoins, hueref, dhueex, chromaref, lumaref, sobelref, blend2, lp, original, transformed, difLab, bufcat02fin, cx, cy, sk); //view mask } diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 98299dbfd..2df20710d 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -638,6 +638,8 @@ enum ProcEventCode { EvlocallabCCmaskexpshape = 608, EvlocallabLLmaskexpshape = 609, EvlocallabHHmaskshape = 610, + Evlocallabstructcol = 611, + Evlocallabstructexp = 612, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 2a5715401..1aaee5735 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2362,6 +2362,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : contrast(0), chroma(0), sensi(19), + structcol(0), qualitycurveMethod("none"), showmaskcolMethod("none"), llcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, @@ -2375,12 +2376,13 @@ LocallabParams::LocallabSpot::LocallabSpot() : // Exposure expexpose(false), expcomp(0), - hlcompr(20), + hlcompr(60), hlcomprthresh(33), black(0), shcompr(50), warm(0), sensiex(19), + structexp(0), excurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, showmaskexpMethod("none"), CCmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, @@ -2498,6 +2500,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && contrast == other.contrast && chroma == other.chroma && sensi == other.sensi + && structcol == other.structcol && qualitycurveMethod == other.qualitycurveMethod && showmaskcolMethod == other.showmaskcolMethod && llcurve == other.llcurve @@ -2517,6 +2520,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && shcompr == other.shcompr && warm == other.warm && sensiex == other.sensiex + && structexp == other.structexp && excurve == other.excurve && showmaskexpMethod == other.showmaskexpMethod && CCmaskexpcurve == other.CCmaskexpcurve @@ -3586,6 +3590,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).contrast, "Locallab", "Contrast_" + std::to_string(i), spot.contrast, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chroma, "Locallab", "Chroma_" + std::to_string(i), spot.chroma, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sensi, "Locallab", "Sensi_" + std::to_string(i), spot.sensi, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).structcol, "Locallab", "Structcol_" + std::to_string(i), spot.structcol, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).qualitycurveMethod, "Locallab", "QualityCurveMethod_" + std::to_string(i), spot.qualitycurveMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).showmaskcolMethod, "Locallab", "ShowmaskcolMethod_" + std::to_string(i), spot.showmaskcolMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).llcurve, "Locallab", "LLCurve_" + std::to_string(i), spot.llcurve, keyFile); @@ -3605,6 +3610,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).shcompr, "Locallab", "Shcompr_" + std::to_string(i), spot.shcompr, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).warm, "Locallab", "Warm_" + std::to_string(i), spot.warm, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sensiex, "Locallab", "Sensiex_" + std::to_string(i), spot.sensiex, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).structexp, "Locallab", "Structexp_" + std::to_string(i), spot.structexp, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).excurve, "Locallab", "ExCurve_" + std::to_string(i), spot.excurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).showmaskexpMethod, "Locallab", "ShowmaskexpMethod_" + std::to_string(i), spot.showmaskexpMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).CCmaskexpcurve, "Locallab", "CCmaskexpCurve_" + std::to_string(i), spot.CCmaskexpcurve, keyFile); @@ -4801,6 +4807,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Contrast_" + std::to_string(i), pedited, spot.contrast, spotEdited.contrast); assignFromKeyfile(keyFile, "Locallab", "Chroma_" + std::to_string(i), pedited, spot.chroma, spotEdited.chroma); assignFromKeyfile(keyFile, "Locallab", "Sensi_" + std::to_string(i), pedited, spot.sensi, spotEdited.sensi); + assignFromKeyfile(keyFile, "Locallab", "Structcol_" + std::to_string(i), pedited, spot.structcol, spotEdited.structcol); assignFromKeyfile(keyFile, "Locallab", "QualityCurveMethod_" + std::to_string(i), pedited, spot.qualitycurveMethod, spotEdited.qualitycurveMethod); assignFromKeyfile(keyFile, "Locallab", "ShowmaskcolMethod_" + std::to_string(i), pedited, spot.showmaskcolMethod, spotEdited.showmaskcolMethod); assignFromKeyfile(keyFile, "Locallab", "LLCurve_" + std::to_string(i), pedited, spot.llcurve, spotEdited.llcurve); @@ -4820,6 +4827,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Shcompr_" + std::to_string(i), pedited, spot.shcompr, spotEdited.shcompr); assignFromKeyfile(keyFile, "Locallab", "Warm_" + std::to_string(i), pedited, spot.warm, spotEdited.warm); assignFromKeyfile(keyFile, "Locallab", "Sensiex_" + std::to_string(i), pedited, spot.sensiex, spotEdited.sensiex); + assignFromKeyfile(keyFile, "Locallab", "Structexp_" + std::to_string(i), pedited, spot.structexp, spotEdited.structexp); assignFromKeyfile(keyFile, "Locallab", "ExCurve_" + std::to_string(i), pedited, spot.excurve, spotEdited.excurve); assignFromKeyfile(keyFile, "Locallab", "ShowmaskexpMethod_" + std::to_string(i), pedited, spot.showmaskexpMethod, spotEdited.showmaskexpMethod); assignFromKeyfile(keyFile, "Locallab", "CCmaskexpCurve_" + std::to_string(i), pedited, spot.CCmaskexpcurve, spotEdited.CCmaskexpcurve); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index bf8d32af9..b0444edb1 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -959,6 +959,7 @@ struct LocallabParams { int contrast; int chroma; int sensi; + int structcol; Glib::ustring qualitycurveMethod; Glib::ustring showmaskcolMethod; std::vector llcurve; @@ -978,6 +979,7 @@ struct LocallabParams { int shcompr; int warm; int sensiex; + int structexp; std::vector excurve; Glib::ustring showmaskexpMethod; std::vector CCmaskexpcurve; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index 089533f53..d4c0cbdf3 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -637,7 +637,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //EvlocallabLLmaskshape LUMINANCECURVE, //EvlocallabCCmaskexpshape LUMINANCECURVE, //EvlocallabLLmaskexpshape - LUMINANCECURVE //EvlocallabHHmaskshape + LUMINANCECURVE, //EvlocallabHHmaskshape + LUMINANCECURVE, //Evlocallabstructcol + LUMINANCECURVE //Evlocallabstructexp }; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 183c995c5..3271ebe48 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -32,6 +32,7 @@ #include #include #include +#include "jaggedarray.h" #undef THREAD_PRIORITY_NORMAL @@ -1091,6 +1092,7 @@ private: // int maxspot = 1; float** shbuffer = nullptr; + JaggedArray blend(fw, fh); for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) { if (params.locallab.spots.at(sp).inverssha) { @@ -1133,15 +1135,15 @@ private: double huere, chromare, lumare, huerefblu, sobelre; if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reservView, reservView, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reservView, reservView, blend, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } else { - ipf.calc_ref(sp, labView, labView, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, labView, labView, blend, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, 1); - ipf.Lab_Local(2, sp, sobelrefs, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, + ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, LHutili, HHutili, cclocalcurve, localskutili, sklocalcurve, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerefblu, huere, chromare, lumare, sobelre); // Clear local curves diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 055ed98e7..d4c5ffc18 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -76,6 +76,7 @@ Locallab::Locallab(): contrast(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CONTRAST"), -100, 100, 1, 0))), chroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMA"), -100, 150, 1, 0))), sensi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), + structcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), // Exposure expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -200, 200, 5, 0))), hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 60))), @@ -84,6 +85,7 @@ Locallab::Locallab(): shcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRSHADOWS"), 0, 100, 1, 50))), warm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-orange-small.png"))))), sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), + structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), // Vibrance saturated(Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.))), pastels(Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.))), @@ -214,6 +216,7 @@ Locallab::Locallab(): sensi->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); sensi->setAdjusterListener(this); + structcol->setAdjusterListener(this); qualitycurveMethod->append(M("TP_LOCALLAB_CURVNONE")); qualitycurveMethod->append(M("TP_LOCALLAB_CURVCURR")); @@ -328,6 +331,7 @@ Locallab::Locallab(): superFrame->add(*superBox); colorBox->pack_start(*superFrame); colorBox->pack_start(*sensi); + colorBox->pack_start(*structcol); Gtk::HBox* const qualcurvbox = Gtk::manage(new Gtk::HBox()); qualcurvbox->pack_start(*labqualcurv, Gtk::PACK_SHRINK, 4); qualcurvbox->pack_start(*qualitycurveMethod); @@ -368,6 +372,7 @@ Locallab::Locallab(): sensiex->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); sensiex->setAdjusterListener(this); + structexp->setAdjusterListener(this); curveEditorG->setCurveListener(this); @@ -426,6 +431,7 @@ Locallab::Locallab(): exposeBox->pack_start(*shcompr); exposeBox->pack_start(*warm); exposeBox->pack_start(*sensiex); + exposeBox->pack_start(*structexp); exposeBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor exposeBox->pack_start(*maskexpFrame); @@ -1475,6 +1481,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).contrast = contrast->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).chroma = chroma->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensi = sensi->getIntValue(); + pp->locallab.spots.at(pp->locallab.selspot).structcol = structcol->getIntValue(); if (qualitycurveMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "none"; @@ -1504,6 +1511,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).LLmaskcurve = LLmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).HHmaskcurve = HHmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).invers = invers->get_active(); + pp->locallab.spots.at(pp->locallab.selspot).structexp = structexp->getIntValue(); // Exposure pp->locallab.spots.at(pp->locallab.selspot).expexpose = expexpose->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).expcomp = expcomp->getIntValue(); @@ -1658,6 +1666,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).contrast = pe->locallab.spots.at(pp->locallab.selspot).contrast || contrast->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).chroma = pe->locallab.spots.at(pp->locallab.selspot).chroma || chroma->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensi = pe->locallab.spots.at(pp->locallab.selspot).sensi || sensi->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).structcol = pe->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = pe->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod || showmaskcolMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).llcurve = pe->locallab.spots.at(pp->locallab.selspot).llcurve || !llshape->isUnChanged(); @@ -1677,6 +1686,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).shcompr = pe->locallab.spots.at(pp->locallab.selspot).shcompr || shcompr->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).warm = pe->locallab.spots.at(pp->locallab.selspot).warm || warm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensiex = pe->locallab.spots.at(pp->locallab.selspot).sensiex || sensiex->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).structexp = pe->locallab.spots.at(pp->locallab.selspot).structexp || structexp->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).excurve = pe->locallab.spots.at(pp->locallab.selspot).excurve || !shapeexpos->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = pe->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod || showmaskexpMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); @@ -1798,6 +1808,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).contrast = pedited->locallab.spots.at(pp->locallab.selspot).contrast || contrast->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).chroma = pedited->locallab.spots.at(pp->locallab.selspot).chroma || chroma->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensi = pedited->locallab.spots.at(pp->locallab.selspot).sensi || sensi->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).structcol = pedited->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = pedited->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod || showmaskcolMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).llcurve = pedited->locallab.spots.at(pp->locallab.selspot).llcurve || !llshape->isUnChanged(); @@ -1817,6 +1828,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).shcompr = pedited->locallab.spots.at(pp->locallab.selspot).shcompr || shcompr->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).warm = pedited->locallab.spots.at(pp->locallab.selspot).warm || warm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensiex = pedited->locallab.spots.at(pp->locallab.selspot).sensiex || sensiex->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).structexp = pedited->locallab.spots.at(pp->locallab.selspot).structexp || structexp->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).excurve = pedited->locallab.spots.at(pp->locallab.selspot).excurve || !shapeexpos->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = pedited->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod || showmaskexpMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); @@ -2412,6 +2424,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe contrast->setDefault((double)defSpot->contrast); chroma->setDefault((double)defSpot->chroma); sensi->setDefault((double)defSpot->sensi); + structcol->setDefault((double)defSpot->structcol); // Exposure expcomp->setDefault((double)defSpot->expcomp); hlcompr->setDefault((double)defSpot->hlcompr); @@ -2420,6 +2433,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe shcompr->setDefault((double)defSpot->shcompr); warm->setDefault((double)defSpot->warm); sensiex->setDefault((double)defSpot->sensiex); + structexp->setDefault((double)defSpot->structexp); // Vibrance saturated->setDefault((double)defSpot->saturated); pastels->setDefault((double)defSpot->pastels); @@ -2486,6 +2500,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe contrast->setDefaultEditedState(Irrelevant); chroma->setDefaultEditedState(Irrelevant); sensi->setDefaultEditedState(Irrelevant); + structcol->setDefaultEditedState(Irrelevant); // Exposure expcomp->setDefaultEditedState(Irrelevant); hlcompr->setDefaultEditedState(Irrelevant); @@ -2494,6 +2509,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe shcompr->setDefaultEditedState(Irrelevant); warm->setDefaultEditedState(Irrelevant); sensiex->setDefaultEditedState(Irrelevant); + structexp->setDefaultEditedState(Irrelevant); // Vibrance saturated->setDefaultEditedState(Irrelevant); pastels->setDefaultEditedState(Irrelevant); @@ -2564,6 +2580,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe contrast->setDefaultEditedState(defSpotState->contrast ? Edited : UnEdited); chroma->setDefaultEditedState(defSpotState->chroma ? Edited : UnEdited); sensi->setDefaultEditedState(defSpotState->sensi ? Edited : UnEdited); + structcol->setDefaultEditedState(defSpotState->structcol ? Edited : UnEdited); // Exposure expcomp->setDefaultEditedState(defSpotState->expcomp ? Edited : UnEdited); hlcompr->setDefaultEditedState(defSpotState->hlcompr ? Edited : UnEdited); @@ -2572,6 +2589,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe shcompr->setDefaultEditedState(defSpotState->shcompr ? Edited : UnEdited); warm->setDefaultEditedState(defSpotState->warm ? Edited : UnEdited); sensiex->setDefaultEditedState(defSpotState->sensiex ? Edited : UnEdited); + structexp->setDefaultEditedState(defSpotState->structexp ? Edited : UnEdited); // Vibrance saturated->setDefaultEditedState(defSpotState->saturated ? Edited : UnEdited); pastels->setDefaultEditedState(defSpotState->pastels ? Edited : UnEdited); @@ -2697,6 +2715,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) listener->panelChanged(Evlocallabsensi, sensi->getTextValue()); } } + + if (a == structcol) { + if (listener) { + listener->panelChanged(Evlocallabstructcol, structcol->getTextValue()); + } + } } // Exposure @@ -2751,6 +2775,13 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) listener->panelChanged(Evlocallabsensiex, sensiex->getTextValue()); } } + + if (a == structexp) { + if (listener) { + listener->panelChanged(Evlocallabstructexp, structexp->getTextValue()); + } + } + } // Vibrance @@ -3136,6 +3167,7 @@ void Locallab::setBatchMode(bool batchMode) contrast->showEditedCB(); chroma->showEditedCB(); sensi->showEditedCB(); + structcol->showEditedCB(); // Exposure expcomp->showEditedCB(); hlcompr->showEditedCB(); @@ -3144,6 +3176,7 @@ void Locallab::setBatchMode(bool batchMode) shcompr->showEditedCB(); warm->showEditedCB(); sensiex->showEditedCB(); + structexp->showEditedCB(); // Vibrance saturated->showEditedCB(); pastels->showEditedCB(); @@ -3441,6 +3474,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con contrast->setValue(pp->locallab.spots.at(index).contrast); chroma->setValue(pp->locallab.spots.at(index).chroma); sensi->setValue(pp->locallab.spots.at(index).sensi); + structcol->setValue(pp->locallab.spots.at(index).structcol); if (pp->locallab.spots.at(index).qualitycurveMethod == "none") { qualitycurveMethod->set_active(0); @@ -3485,6 +3519,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con shcompr->setValue(pp->locallab.spots.at(index).shcompr); warm->setValue(pp->locallab.spots.at(index).warm); sensiex->setValue(pp->locallab.spots.at(index).sensiex); + structexp->setValue(pp->locallab.spots.at(index).structexp); shapeexpos->setCurve(pp->locallab.spots.at(index).excurve); if (pp->locallab.spots.at(index).showmaskexpMethod == "none") { showmaskexpMethod->set_active(0); @@ -3651,6 +3686,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con contrast->setEditedState(spotState->contrast ? Edited : UnEdited); chroma->setEditedState(spotState->chroma ? Edited : UnEdited); sensi->setEditedState(spotState->sensi ? Edited : UnEdited); + structcol->setEditedState(spotState->structcol ? Edited : UnEdited); if (!spotState->qualitycurveMethod) { qualitycurveMethod->set_active_text(M("GENERAL_UNCHANGED")); @@ -3677,6 +3713,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con warm->setEditedState(spotState->warm ? Edited : UnEdited); shcompr->setEditedState(spotState->shcompr ? Edited : UnEdited); sensiex->setEditedState(spotState->sensiex ? Edited : UnEdited); + structexp->setEditedState(spotState->structexp ? Edited : UnEdited); shapeexpos->setUnChanged(!spotState->excurve); if (!spotState->showmaskexpMethod) { showmaskexpMethod->set_active_text(M("GENERAL_UNCHANGED")); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 02489deed..134c55fff 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -92,6 +92,8 @@ private: Adjuster* const contrast; Adjuster* const chroma; Adjuster* const sensi; + Adjuster* const structcol; + // Exposure Adjuster* const expcomp; Adjuster* const hlcompr; @@ -100,6 +102,7 @@ private: Adjuster* const shcompr; Adjuster* const warm; Adjuster* const sensiex; + Adjuster* const structexp; // Vibrance Adjuster* const saturated; Adjuster* const pastels; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 4dd0009cb..d1c8dc4f5 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -948,6 +948,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).contrast = locallab.spots.at(j).contrast && pSpot.contrast == otherSpot.contrast; locallab.spots.at(j).chroma = locallab.spots.at(j).chroma && pSpot.chroma == otherSpot.chroma; locallab.spots.at(j).sensi = locallab.spots.at(j).sensi && pSpot.sensi == otherSpot.sensi; + locallab.spots.at(j).structcol = locallab.spots.at(j).structcol && pSpot.structcol == otherSpot.structcol; locallab.spots.at(j).qualitycurveMethod = locallab.spots.at(j).qualitycurveMethod && pSpot.qualitycurveMethod == otherSpot.qualitycurveMethod; locallab.spots.at(j).showmaskcolMethod = locallab.spots.at(j).showmaskcolMethod && pSpot.showmaskcolMethod == otherSpot.showmaskcolMethod; locallab.spots.at(j).llcurve = locallab.spots.at(j).llcurve && pSpot.llcurve == otherSpot.llcurve; @@ -967,6 +968,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).shcompr = locallab.spots.at(j).shcompr && pSpot.shcompr == otherSpot.shcompr; locallab.spots.at(j).warm = locallab.spots.at(j).warm && pSpot.warm == otherSpot.warm; locallab.spots.at(j).sensiex = locallab.spots.at(j).sensiex && pSpot.sensiex == otherSpot.sensiex; + locallab.spots.at(j).structexp = locallab.spots.at(j).structexp && pSpot.structexp == otherSpot.structexp; locallab.spots.at(j).excurve = locallab.spots.at(j).excurve && pSpot.excurve == otherSpot.excurve; locallab.spots.at(j).showmaskexpMethod = locallab.spots.at(j).showmaskexpMethod && pSpot.showmaskexpMethod == otherSpot.showmaskexpMethod; locallab.spots.at(j).CCmaskexpcurve = locallab.spots.at(j).CCmaskexpcurve && pSpot.CCmaskexpcurve == otherSpot.CCmaskexpcurve; @@ -2575,6 +2577,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).sensi = mods.locallab.spots.at(i).sensi; } + if (locallab.spots.at(i).structcol) { + toEdit.locallab.spots.at(i).structcol = mods.locallab.spots.at(i).structcol; + } + if (locallab.spots.at(i).qualitycurveMethod) { toEdit.locallab.spots.at(i).qualitycurveMethod = mods.locallab.spots.at(i).qualitycurveMethod; } @@ -2648,6 +2654,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).sensiex = mods.locallab.spots.at(i).sensiex; } + if (locallab.spots.at(i).structexp) { + toEdit.locallab.spots.at(i).structexp = mods.locallab.spots.at(i).structexp; + } + if (locallab.spots.at(i).excurve) { toEdit.locallab.spots.at(i).excurve = mods.locallab.spots.at(i).excurve; } @@ -3915,6 +3925,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : contrast(v), chroma(v), sensi(v), + structcol(v), qualitycurveMethod(v), showmaskcolMethod(v), llcurve(v), @@ -3934,6 +3945,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : shcompr(v), warm(v), sensiex(v), + structexp(v), excurve(v), showmaskexpMethod(v), CCmaskexpcurve(v), @@ -4047,6 +4059,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) contrast = v; chroma = v; sensi = v; + structcol = v; qualitycurveMethod = v; showmaskcolMethod = v; llcurve = v; @@ -4066,6 +4079,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) shcompr = v; warm = v; sensiex = v; + structexp = v; excurve = v; showmaskexpMethod = v; CCmaskexpcurve = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 12d688ada..02a6302eb 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -487,6 +487,7 @@ public: bool contrast; bool chroma; bool sensi; + bool structcol; bool qualitycurveMethod; bool showmaskcolMethod; bool llcurve; @@ -506,6 +507,7 @@ public: bool shcompr; bool warm; bool sensiex; + bool structexp; bool excurve; bool showmaskexpMethod; bool CCmaskexpcurve; From c16397367461eb62836f7339539b9eccf4d6a5e1 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 14 Jan 2019 16:50:58 +0100 Subject: [PATCH 09/23] Fixed compilation non SSE ciecamloc_02float and big old bug in local exposure --- rtengine/improccoordinator.cc | 1 + rtengine/improcfun.h | 2 +- rtengine/iplocallab.cc | 154 +++++++++++++++++----------------- 3 files changed, 80 insertions(+), 77 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index fcb09d36a..7aa6667cb 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -847,6 +847,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) sklocalcurve.clear(); exlocalcurve.clear(); } + for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) { //update references after threatment if (params.locallab.spots.at(sp).spotMethod == "exc") { diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index bf6d59b11..7268e1b09 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -302,7 +302,7 @@ public: void vibrancelocal(int sp, int bfw, int bfh, LabImage* lab, LabImage* dest, bool & localskutili, LUTf & sklocalcurve); // void Expo_vibr_Local(float moddE, float powdE, int senstype, float **buflight, float **bufchro, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, const LabImage * const tmp1, int cx, int cy, int sk); - void Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk); + void Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk); void exlabLocal(const local_params& lp, int bfh, int bfw, LabImage* bufexporig, LabImage* lab, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve); void Exclude_Local(float moddE, float powdE, int sen, float **deltaso, float **buflight, float **bufchro, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * rsv, LabImage * reserv, int cx, int cy, int sk); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index f15db7384..72bad688a 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -1024,7 +1024,7 @@ void ImProcFunctions::ciecamloc_02float(int sp, LabImage* lab, LabImage* dest) Ciecam02::jch2xyz_ciecam02float(xx, yy, zz, J, C, h, xw2, yw2, zw2, - f2, c2, nc2, pow1n, nbbj, ncbj, flj, czj, dj, awj); + c2, nc2, pow1n, nbbj, ncbj, flj, czj, dj, awj); float x, y, z; x = xx * 655.35f; y = yy * 655.35f; @@ -5046,7 +5046,7 @@ void ImProcFunctions::Exclude_Local(float moddE, float powdE, int sen, float **d } -void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk) +void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk) { //local exposure and vibrance @@ -5068,7 +5068,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La { varsens = lp.senssf; } - + // printf("varsen=%f \n", varsens); //chroma constexpr float amplchsens = 2.5f; constexpr float achsens = (amplchsens - 1.f) / (100.f - 20.f); //20. default locallab.sensih @@ -5121,18 +5121,18 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float radius = 3.f / sk; bool usemask = lp.showmaskexpmet >= 2 && senstype == 1; - if (usemask) { - origblurmask = new LabImage(GW, GH); + if (usemask) { + origblurmask = new LabImage(GW, GH); #ifdef _OPENMP #pragma omp parallel #endif - { - gaussianBlur(originalmask->L, origblurmask->L, GW, GH, radius); - gaussianBlur(originalmask->a, origblurmask->a, GW, GH, radius); - gaussianBlur(originalmask->b, origblurmask->b, GW, GH, radius); - } - } + { + gaussianBlur(originalmask->L, origblurmask->L, GW, GH, radius); + gaussianBlur(originalmask->a, origblurmask->a, GW, GH, radius); + gaussianBlur(originalmask->b, origblurmask->b, GW, GH, radius); + } + } #ifdef _OPENMP #pragma omp parallel #endif @@ -5221,7 +5221,9 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float rs = 0.f; if (senstype == 1){ csob = (blend2[loy - begy][lox - begx])/100.f ; - if(csob > 60.f) csob = 60.f; + if(csob > 60.f) { + csob = 60.f; + } csob = log(1.f + csob); rs = sobelref / csob; } @@ -5231,9 +5233,9 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float dE = 0.f; float rsob = 0.f; if(lp.struexp > 0.f && rs > 0.f && senstype == 1) { - rsob = 1.1f * lp.struexp * (rs); + rsob = 1.1f * lp.struexp * rs; } - + if (usemask) { rhuemask = xatan2f(origblurmask->b[y][x], origblurmask->a[y][x]); rchromask = sqrt(SQR(origblurmask->b[y][x]) + SQR(origblurmask->a[y][x])) / 327.68f; @@ -5550,36 +5552,37 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La case 1: { // inside transition zone float factorx = localFactor; + float lightc = bufexporig->L[loy - begy][lox - begx]; + float fli = 1.f; + fli = ((100.f + realstr * falL) / 100.f); + float diflc = lightc * fli - original->L[y][x]; + diflc *= kch; + diflc *= factorx; + transformed->L[y][x] = original->L[y][x] + diflc; - // float difL; - difLab->L[loy - begy][lox - begx] = tmp1->L[loy - begy][lox - begx] - original->L[y][x]; - difLab->L[loy - begy][lox - begx] *= factorx * (100.f + realstr * falL) / 100.f; - // difL *= kch * fach; - difLab->L[loy - begy][lox - begx] *= kch ; + float flia = 1.f; + float flib = 1.f; + float chra = bufexporig->a[loy - begy][lox - begx]; + float chrb = bufexporig->b[loy - begy][lox - begx]; - transformed->L[y][x] = original->L[y][x] + difLab->L[loy - begy][lox - begx]; - // float difa, difb; - - difLab->a[loy - begy][lox - begx] = tmp1->a[loy - begy][lox - begx] - original->a[y][x]; - difLab->b[loy - begy][lox - begx] = tmp1->b[loy - begy][lox - begx] - original->b[y][x]; - - if (senstype != 1) { - difLab->a[loy - begy][lox - begx] *= factorx * (100.f + realstrch * falu * falL) / 100.f; - difLab->b[loy - begy][lox - begx] *= factorx * (100.f + realstrch * falu * falL) / 100.f; + if (senstype != 1) { + flia = flib = ((100.f + realstrch * falu * falL) / 100.f); } else { - difLab->a[loy - begy][lox - begx] *= factorx * (100.f + realstra * falu * falL) / 100.f; - difLab->b[loy - begy][lox - begx] *= factorx * (100.f + realstrb * falu * falL) / 100.f; - } - - difLab->a[loy - begy][lox - begx] *= kch * fach; - difLab->b[loy - begy][lox - begx] *= kch * fach; - transformed->a[y][x] = CLIPC(original->a[y][x] + difLab->a[loy - begy][lox - begx]); - transformed->b[y][x] = CLIPC(original->b[y][x] + difLab->b[loy - begy][lox - begx]); - - if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { - transformed->a[y][x] = difLab->a[loy - begy][lox - begx]; - transformed->b[y][x] = difLab->b[loy - begy][lox - begx]; - transformed->L[y][x] = 12000.f + difLab->L[loy - begy][lox - begx]; + flia = ((100.f + realstra * falu * falL) / 100.f); + flib = ((100.f + realstrb * falu * falL) / 100.f); + } + float difa = chra * flia - original->a[y][x]; + float difb = chrb * flib - original->b[y][x]; + difa *= factorx; + difb *= factorx; + difa *= kch * fach; + difb *= kch * fach; + transformed->a[y][x] = original->a[y][x] + difa; + transformed->b[y][x] = original->b[y][x] + difb; + if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { + transformed->L[y][x] = 12000.f + diflc; + transformed->a[y][x] = difa; + transformed->b[y][x] = difb; } break; @@ -5587,42 +5590,41 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } case 2: { // inside selection => full effect, no transition - // float difL; + float lightc = bufexporig->L[loy - begy][lox - begx]; + float fli = 1.f; + fli = ((100.f + realstr * falL) / 100.f); //luma transition + float diflc = lightc * fli - original->L[y][x]; + diflc *= kch; + transformed->L[y][x] = original->L[y][x] + diflc; - difLab->L[loy - begy][lox - begx] = tmp1->L[loy - begy][lox - begx] - original->L[y][x]; - difLab->L[loy - begy][lox - begx] *= (100.f + realstr * falL) / 100.f; - // difL *= kch * fach; - difLab->L[loy - begy][lox - begx] *= kch; - transformed->L[y][x] = original->L[y][x] + difLab->L[loy - begy][lox - begx]; - // float difa, difb; - difLab->a[loy - begy][lox - begx] = tmp1->a[loy - begy][lox - begx] - original->a[y][x]; - difLab->b[loy - begy][lox - begx] = tmp1->b[loy - begy][lox - begx] - original->b[y][x]; - - if (senstype != 1) { - difLab->a[loy - begy][lox - begx] *= (100.f + realstrch * falu * falL) / 100.f; - difLab->b[loy - begy][lox - begx] *= (100.f + realstrch * falu * falL) / 100.f; + float flia = 1.f; + float flib = 1.f; + float chra = bufexporig->a[loy - begy][lox - begx]; + float chrb = bufexporig->b[loy - begy][lox - begx]; + + if (senstype != 1) { + flia = flib = ((100.f + realstrch * falu * falL) / 100.f); } else { - difLab->a[loy - begy][lox - begx] *= (100.f + realstra * falu * falL) / 100.f; - difLab->b[loy - begy][lox - begx] *= (100.f + realstrb * falu * falL) / 100.f; - } + flia = ((100.f + realstra * falu * falL) / 100.f); + flib = ((100.f + realstrb * falu * falL) / 100.f); + } + float difa = chra * flia - original->a[y][x]; + float difb = chrb * flib - original->b[y][x]; + difa *= kch * fach; + difb *= kch * fach; + transformed->a[y][x] = original->a[y][x] + difa; + transformed->b[y][x] = original->b[y][x] + difb; - difLab->a[loy - begy][lox - begx] *= kch * fach; - difLab->b[loy - begy][lox - begx] *= kch * fach; - - transformed->a[y][x] = CLIPC(original->a[y][x] + difLab->a[loy - begy][lox - begx]); - transformed->b[y][x] = CLIPC(original->b[y][x] + difLab->b[loy - begy][lox - begx]); - - if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { - transformed->a[y][x] = difLab->a[loy - begy][lox - begx]; - transformed->b[y][x] = difLab->b[loy - begy][lox - begx]; - transformed->L[y][x] = 12000.f + difLab->L[loy - begy][lox - begx]; + if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { + transformed->L[y][x] = 12000.f + diflc; + transformed->a[y][x] = difa; + transformed->b[y][x] = difb; } } } - //} } @@ -9332,7 +9334,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } - Expo_vibr_Local(moddE, powdE, 2, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuev, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); + Expo_vibr_Local(moddE, powdE, 2, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuev, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); //call Expo_vibr_Local with first parameter = 2 for vibrance } @@ -9705,7 +9707,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } - Expo_vibr_Local(moddE, powdE, 3, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuesf, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); + Expo_vibr_Local(moddE, powdE, 3, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuesf, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); } @@ -10573,16 +10575,16 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet >= 2 || (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili - float hueplus = hueref + dhuev; - float huemoins = hueref - dhuev; + float hueplus = hueref + dhueex; + float huemoins = hueref - dhueex; if (hueplus > rtengine::RT_PI) { - hueplus = hueref + dhuev - 2.f * rtengine::RT_PI; + hueplus = hueref + dhueex - 2.f * rtengine::RT_PI; } if (huemoins < -rtengine::RT_PI) { - huemoins = hueref - dhuev + 2.f * rtengine::RT_PI; + huemoins = hueref - dhueex + 2.f * rtengine::RT_PI; } LabImage *bufexporig = nullptr; @@ -10682,7 +10684,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o guid[ir][jr] = bufexporig->L[ir][jr] / 32768.f; } float blur = 25 / sk * (10.f + 1.2f * lp.struexp); - printf("Blur=%f \n", blur); + // printf("Blur=%f \n", blur); rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiThread); @@ -10951,7 +10953,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } } - Expo_vibr_Local(moddE, powdE, 1, originalmask, buflight, bufl_ab, buf_a_cat, buf_b_cat, hueplus, huemoins, hueref, dhueex, chromaref, lumaref, sobelref, blend2, lp, original, transformed, difLab, bufcat02fin, cx, cy, sk); + Expo_vibr_Local(moddE, powdE, 1, bufexporig, originalmask, buflight, bufl_ab, buf_a_cat, buf_b_cat, hueplus, huemoins, hueref, dhueex, chromaref, lumaref, sobelref, blend2, lp, original, transformed, difLab, bufcat02fin, cx, cy, sk); //view mask } From d1b4c84ef2301d032475d9a3d33eca50c19f04ee Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 15 Jan 2019 11:23:29 +0100 Subject: [PATCH 10/23] Suppress compilation warning due to unused variables --- rtengine/improccoordinator.cc | 12 ++++++------ rtengine/improcfun.h | 6 +++--- rtengine/iplocallab.cc | 30 ++++++++---------------------- rtengine/simpleprocess.cc | 4 ++-- 4 files changed, 19 insertions(+), 33 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 7aa6667cb..3d238ea42 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -807,9 +807,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) // Reference parameters computation if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reserv, reserv, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } else { - ipf.calc_ref(sp, nprevl, nprevl, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, @@ -836,9 +836,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) LHutili, HHutili, cclocalcurve, localskutili, sklocalcurve, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, huer, chromar, lumar, sobeler); if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reserv, reserv, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } else { - ipf.calc_ref(sp, nprevl, nprevl, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } // Clear local curves @@ -851,9 +851,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) { //update references after threatment if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reserv, reserv, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } else { - ipf.calc_ref(sp, nprevl, nprevl, blend, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } huerblu = huerefblurs[sp] = huerefblu; huer = huerefs[sp] = huere; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 7268e1b09..eb0d62a54 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -286,7 +286,7 @@ public: //locallab void MSRLocal(int sp, float** luminance, float** templ, const float* const *originalLuminance, const int width, const int height, const LocallabParams &loc, const int skip, const LocretigainCurve &locRETgainCcurve, const int chrome, const int scall, const float krad, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); // void calc_ref (LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huere, double &chromare, double &lumare, double &sobelref); - void calc_ref(int sp, LabImage* original, LabImage* transformed, float **blend, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &huere, double &chromare, double &lumare, double &sobelref, LUTu & histogram); + void calc_ref(int sp, LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &huere, double &chromare, double &lumare, double &sobelref, LUTu & histogram); void copy_ref(LabImage* spotbuffer, LabImage* original, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp, double &huerefspot, double &chromarefspot, double &lumarefspot); void paste_ref(LabImage* spotbuffer, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp); void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, LUTf & lightCurveloc, double & huerefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref); @@ -302,7 +302,7 @@ public: void vibrancelocal(int sp, int bfw, int bfh, LabImage* lab, LabImage* dest, bool & localskutili, LUTf & sklocalcurve); // void Expo_vibr_Local(float moddE, float powdE, int senstype, float **buflight, float **bufchro, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, const LabImage * const tmp1, int cx, int cy, int sk); - void Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk); + void Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); void exlabLocal(const local_params& lp, int bfh, int bfw, LabImage* bufexporig, LabImage* lab, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve); void Exclude_Local(float moddE, float powdE, int sen, float **deltaso, float **buflight, float **bufchro, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * rsv, LabImage * reserv, int cx, int cy, int sk); @@ -311,7 +311,7 @@ public: void fftw_denoise(int GW, int GH, int max_numblox_W, int min_numblox_W, float **tmp1, array2D *Lin, int numThreads, const struct local_params & lp, int chrom); - void ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float **buflight, float **bufchro, float **bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, float ** blendch, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); + void ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float **buflight, float **bufchro, float **bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); void InverseColorLight_Local(const struct local_params& lp, LUTf & lightCurveloc, LabImage* original, LabImage* transformed, int cx, int cy, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, int sk); void Sharp_Local(int call, float **loctemp, int senstype, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const local_params& lp, LabImage* original, LabImage* transformed, int cx, int cy, int sk); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 72bad688a..e2b548457 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -5046,7 +5046,7 @@ void ImProcFunctions::Exclude_Local(float moddE, float powdE, int sen, float **d } -void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * difLab, const LabImage * const tmp1, int cx, int cy, int sk) +void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) { //local exposure and vibrance @@ -5672,7 +5672,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } -void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float ** buflight, float ** bufchro, float ** bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, float ** blendch, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) +void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float ** buflight, float ** bufchro, float ** bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) { BENCHFUN // chroma and lightness @@ -5868,7 +5868,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm origblur->b[y][x] = 0.01f; } //Sobel - float csob = (blend2[loy - begy][lox - begx])/100.f ; //+ (blendch[loy - begy][lox - begx])/100.f ; + float csob = (blend2[loy - begy][lox - begx])/100.f ; if(csob > 60.f) csob = 60.f; csob = log(1.f + csob); float rs = sobelref / csob; @@ -7089,7 +7089,7 @@ void ImProcFunctions::InverseColorLight_Local(const struct local_params & lp, LU } -void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transformed, float **blend, int cx, int cy, int oW, int oH, int sk, double & huerefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, LUTu & histogram) +void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transformed, int cx, int cy, int oW, int oH, int sk, double & huerefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, LUTu & histogram) { if (params->locallab.enabled) { //always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise @@ -9246,7 +9246,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o LabImage *bufexporig = nullptr; LabImage *bufexpfin = nullptr; - LabImage *difLab = nullptr; int bfh = int (lp.ly + lp.lyT) + del; //bfw bfh real size of square zone int bfw = int (lp.lx + lp.lxL) + del; @@ -9260,7 +9259,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufexporig = new LabImage(bfw, bfh); //buffer for data in zone limit bufexpfin = new LabImage(bfw, bfh); //buffer for data in zone limit - difLab = new LabImage(bfw, bfh); //buffer for data in zone limit #ifdef _OPENMP @@ -9334,7 +9332,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } - Expo_vibr_Local(moddE, powdE, 2, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuev, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); + Expo_vibr_Local(moddE, powdE, 2, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuev, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, cx, cy, sk); //call Expo_vibr_Local with first parameter = 2 for vibrance } @@ -9343,7 +9341,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o delete bufexporig; delete bufexpfin; - delete difLab; } @@ -9621,7 +9618,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o LabImage *bufexporig = nullptr; LabImage *bufexpfin = nullptr; - LabImage *difLab = nullptr; int bfh = int (lp.ly + lp.lyT) + del; //bfw bfh real size of square zone int bfw = int (lp.lx + lp.lxL) + del; @@ -9635,7 +9631,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufexporig = new LabImage(bfw, bfh); //buffer for data in zone limit bufexpfin = new LabImage(bfw, bfh); //buffer for data in zone limit - difLab = new LabImage(bfw, bfh); //buffer for data in zone limit #ifdef _OPENMP @@ -9707,7 +9702,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } - Expo_vibr_Local(moddE, powdE, 3, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuesf, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, difLab, bufexpfin, cx, cy, sk); + Expo_vibr_Local(moddE, powdE, 3, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuesf, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, cx, cy, sk); } @@ -9715,7 +9710,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o delete bufexporig; delete bufexpfin; - delete difLab; } @@ -10149,7 +10143,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o JaggedArray bufchroslid(bfw, bfh); JaggedArray bufhh(bfw, bfh); JaggedArray blend2(bfw, bfh); - JaggedArray blendch(bfw, bfh); JaggedArray buforigchro(bfw, bfh); float adjustr = 1.0f; @@ -10222,7 +10215,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if(bfw > 2* spotSi && bfh > 2* spotSi && lp.struco > 0.f) { SobelCannyLuma(blend2,bufcolorig->L , bfw, bfh, radius); - // SobelCannyLuma(blendch, buforigchro , bfw, bfh, radius); array2D ble(bfw, bfh); array2D blec(bfw, bfh); array2D guid(bfw, bfh); @@ -10232,7 +10224,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o for (int ir = 0; ir < bfh; ir++) for (int jr = 0; jr < bfw; jr++) { ble[ir][jr] = blend2[ir][jr] / 32768.f; - // blec[ir][jr] = blendch[ir][jr] / 32768.f; guid[ir][jr] = bufcolorig->L[ir][jr] / 32768.f; } float blur = 25 / sk * (10.f + 1.2f * lp.struco); @@ -10247,7 +10238,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o for (int ir = 0; ir < bfh; ir++) for (int jr = 0; jr < bfw; jr++) { blend2[ir][jr] = ble[ir][jr] * 32768.f; - // blendch[ir][jr] = ble[ir][jr] * 32768.f; } bool execmedian = true; @@ -10263,7 +10253,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } Median medianTypeL = Median::TYPE_3X3_STRONG; Median_Denoise(blend2, blend2, wid, hei, medianTypeL, passes, multiThread, tmL); - // Median_Denoise(blendch, blendch, wid, hei, medianTypeL, 1, multiThread, tmL); for (int i = 0; i < hei; ++i) { delete[] tmL[i]; @@ -10542,7 +10531,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } - ColorLight_Local(moddE, powdE, call, bufcolorig, originalmask, buflight, bufchro, bufchroslid, bufhh, buflightslid, LHutili, HHutili, hueplus, huemoins, hueref, dhue, chromaref, lumaref, sobelref, blend2, blendch, lllocalcurve, loclhCurve, lochhCurve, lightCurveloc, lp, original, transformed, cx, cy, sk); + ColorLight_Local(moddE, powdE, call, bufcolorig, originalmask, buflight, bufchro, bufchroslid, bufhh, buflightslid, LHutili, HHutili, hueplus, huemoins, hueref, dhue, chromaref, lumaref, sobelref, blend2, lllocalcurve, loclhCurve, lochhCurve, lightCurveloc, lp, original, transformed, cx, cy, sk); if (call <= 3) { @@ -10590,7 +10579,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o LabImage *bufexporig = nullptr; LabImage *bufexpfin = nullptr; LabImage *bufexptemp = nullptr; - LabImage *difLab = nullptr; LabImage *bufcat02fin = nullptr; LabImage *bufmaskorig = nullptr; LabImage *bufmaskblur = nullptr; @@ -10613,7 +10601,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufexporig = new LabImage(bfw, bfh); //buffer for data in zone limit bufexpfin = new LabImage(bfw, bfh); //buffer for data in zone limit bufexptemp = new LabImage(bfw, bfh); //buffer for data in zone limit - difLab = new LabImage(bfw, bfh); //buffer for data in zone limit bufcat02fin = new LabImage(bfw, bfh); //buffer for data in zone limit bufmaskorig = new LabImage(bfw, bfh); bufmaskblur = new LabImage(bfw, bfh); @@ -10953,7 +10940,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } } - Expo_vibr_Local(moddE, powdE, 1, bufexporig, originalmask, buflight, bufl_ab, buf_a_cat, buf_b_cat, hueplus, huemoins, hueref, dhueex, chromaref, lumaref, sobelref, blend2, lp, original, transformed, difLab, bufcat02fin, cx, cy, sk); + Expo_vibr_Local(moddE, powdE, 1, bufexporig, originalmask, buflight, bufl_ab, buf_a_cat, buf_b_cat, hueplus, huemoins, hueref, dhueex, chromaref, lumaref, sobelref, blend2, lp, original, transformed, cx, cy, sk); //view mask } @@ -10962,7 +10949,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o delete bufexporig; delete bufexpfin; delete bufexptemp; - delete difLab; delete bufcat02fin; delete bufmaskorig; delete bufmaskblur; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 3271ebe48..0c210ce3f 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1135,9 +1135,9 @@ private: double huere, chromare, lumare, huerefblu, sobelre; if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reservView, reservView, blend, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reservView, reservView, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } else { - ipf.calc_ref(sp, labView, labView, blend, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, labView, labView, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, From 44549ff4f80f3d925f4b0d39bcfcd0c4801d5e5b Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 16 Jan 2019 13:54:47 +0100 Subject: [PATCH 11/23] Improve local retinex --- rtengine/iplocallab.cc | 74 +++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index e2b548457..95b1a6ea5 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -3896,62 +3896,61 @@ void ImProcFunctions::Reti_Local(float moddE, float powdE, float **buflight, flo float factorx = localFactor; if (chro == 0) { - float difL; - - difL = tmp1->L[loy - begy][lox - begx] - original->L[y][x]; - difL *= factorx * (100.f + realstr * falL) / 100.f; - difL *= kch * fach; - - transformed->L[y][x] = original->L[y][x] + difL; + float lightc = tmp1->L[loy - begy][lox - begx]; + float fli = 1.f; + fli = ((100.f + realstr * falL) / 100.f); + float diflc = lightc * fli - original->L[y][x]; + diflc *= kch * fach; + diflc *= factorx; + transformed->L[y][x] = original->L[y][x] + diflc; } if (chro == 1) { - float difa, difb; + float flia = 1.f; + float flib = 1.f; + float chra = tmp1->a[loy - begy][lox - begx]; + float chrb = tmp1->b[loy - begy][lox - begx]; - difa = tmp1->a[loy - begy][lox - begx] - original->a[y][x]; - difb = tmp1->b[loy - begy][lox - begx] - original->b[y][x]; - difa *= factorx * (100.f + realstrch * falu * falL) / 100.f; - difb *= factorx * (100.f + realstrch * falu * falL) / 100.f; + flia = ((100.f + realstrch * falu * falL) / 100.f); + flib = ((100.f + realstrch * falu * falL) / 100.f); + float difa = chra * flia - original->a[y][x]; + float difb = chrb * flib - original->b[y][x]; + difa *= factorx; + difb *= factorx; difa *= kch * fach; difb *= kch * fach; - transformed->a[y][x] = CLIPC(original->a[y][x] + difa); - transformed->b[y][x] = CLIPC(original->b[y][x] + difb); - + transformed->a[y][x] = original->a[y][x] + difa; + transformed->b[y][x] = original->b[y][x] + difb; } - break; - } - case 2: { // inside selection => full effect, no transition if (chro == 0) { - float difL; - - difL = tmp1->L[loy - begy][lox - begx] - original->L[y][x]; - difL *= (100.f + realstr * falL) / 100.f; - difL *= kch * fach; - transformed->L[y][x] = original->L[y][x] + difL; - + float lightc = tmp1->L[loy - begy][lox - begx]; + float fli = 1.f; + fli = ((100.f + realstr * falL) / 100.f); + float diflc = lightc * fli - original->L[y][x]; + diflc *= kch * fach; + transformed->L[y][x] = original->L[y][x] + diflc; } if (chro == 1) { - float difa, difb; + float flia = 1.f; + float flib = 1.f; + float chra = tmp1->a[loy - begy][lox - begx]; + float chrb = tmp1->b[loy - begy][lox - begx]; - difa = tmp1->a[loy - begy][lox - begx] - original->a[y][x]; - difb = tmp1->b[loy - begy][lox - begx] - original->b[y][x]; - difa *= (100.f + realstrch * falu * falL) / 100.f; - difb *= (100.f + realstrch * falu * falL) / 100.f; + flia = ((100.f + realstrch * falu * falL) / 100.f); + flib = ((100.f + realstrch * falu * falL) / 100.f); + float difa = chra * flia - original->a[y][x]; + float difb = chrb * flib - original->b[y][x]; difa *= kch * fach; difb *= kch * fach; - - transformed->a[y][x] = CLIPC(original->a[y][x] + difa); - transformed->b[y][x] = CLIPC(original->b[y][x] + difb); - + transformed->a[y][x] = original->a[y][x] + difa; + transformed->b[y][x] = original->b[y][x] + difb; } } } - - //} } } } @@ -10006,7 +10005,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (!lp.invret) { - Reti_Local(moddE, powdE, buflight, bufchro, hueplus, huemoins, hueref, dhueret, chromaref, lumaref, lp, original, transformed, tmpl, cx, cy, 0, sk); + // Reti_Local(moddE, powdE, buflight, bufchro, hueplus, huemoins, hueref, dhueret, chromaref, lumaref, lp, original, transformed, tmpl, cx, cy, 0, sk); + Reti_Local(moddE, powdE, buflight, bufchro, hueplus, huemoins, hueref, dhueret, chromaref, lumaref, lp, original, transformed, bufreti, cx, cy, 0, sk); } else { InverseReti_Local(lp, original, transformed, tmpl, cx, cy, 0); } From 334ad09535291de7a3abe9af07b25204a7f76cc6 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 16 Jan 2019 15:03:44 +0100 Subject: [PATCH 12/23] Show Sobel-Canny structure --- rtdata/languages/default | 1 + rtengine/iplocallab.cc | 90 +++++++++++++++++++++++++++++++++------- rtgui/locallab.cc | 18 ++++++-- 3 files changed, 89 insertions(+), 20 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 0e38e9f53..9cba8aba1 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -2037,6 +2037,7 @@ TP_LOCALLAB_SHOWMNONE;None TP_LOCALLAB_SHOWMODIF;Show modifications whithout mask TP_LOCALLAB_SHOWMODIFMASK;Show modifications whith mask TP_LOCALLAB_SHOWMASK;Show mask +TP_LOCALLAB_SHOWSTRUC;Show structure TP_LOCALLAB_USEMASK;Use mask TP_LOCALLAB_SOFT;Soft Light TP_LOCALLAB_STRENG;Strength diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 95b1a6ea5..450862989 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -402,6 +402,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.showmaskcolmet = 3; } else if (locallab.spots.at(sp).showmaskcolMethod == "showmask") { lp.showmaskcolmet = 4; + } else if (locallab.spots.at(sp).showmaskcolMethod == "showstruc") { + lp.showmaskcolmet = 5; } if (locallab.spots.at(sp).showmaskexpMethod == "none") { @@ -414,6 +416,8 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.showmaskexpmet = 3; } else if (locallab.spots.at(sp).showmaskexpMethod == "showmask") { lp.showmaskexpmet = 4; + } else if (locallab.spots.at(sp).showmaskexpMethod == "showstruc") { + lp.showmaskexpmet = 5; } @@ -5119,7 +5123,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La LabImage *origblurmask = nullptr; float radius = 3.f / sk; - bool usemask = lp.showmaskexpmet >= 2 && senstype == 1; + bool usemask = (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) && senstype == 1; if (usemask) { origblurmask = new LabImage(GW, GH); @@ -5663,7 +5667,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } delete origblur; - if (lp.showmaskcolmet >= 2 && senstype == 1) { + if ((lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4)&& senstype == 1) { delete origblurmask; } @@ -5763,7 +5767,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm float radius = 3.f / sk; - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { origblurmask = new LabImage(GW, GH); #ifdef _OPENMP @@ -5880,7 +5884,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm if(lp.struco > 0.f && rs > 0.f) { rsob = 1.1f * lp.struco * (rs); } - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { rhuemask = xatan2f(origblurmask->b[y][x], origblurmask->a[y][x]); rchromask = sqrt(SQR(origblurmask->b[y][x]) + SQR(origblurmask->a[y][x])) / 327.68f; rLmask = origblurmask->L[y][x] / 327.68f; @@ -6590,7 +6594,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm } delete origblur; - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { delete origblurmask; } } @@ -10111,7 +10115,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o //local color and light - if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || lp.qualcurvemet != 0 || lp.showmaskcolmet >= 2) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili + if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || lp.qualcurvemet != 0 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili float hueplus = hueref + dhue; float huemoins = hueref - dhue; @@ -10259,6 +10263,34 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } delete[] tmL; } + if (lp.showmaskcolmet == 5) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + int zone = 0; + float localFactor = 1.f; + const float achm = (float)lp.trans / 100.f; + + if (lp.shapmet == 0) { + calcTransition(lox, loy, achm, lp, zone, localFactor); + } else if (lp.shapmet == 1) { + calcTransitionrect(lox, loy, achm, lp, zone, localFactor); + } + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if(zone > 0) { + transformed->L[y][x] = blend2[loy - begy][lox - begx]; + transformed->a[y][x] = 0.f; + transformed->b[y][x] = 0.f; + } + } + } + } } @@ -10295,7 +10327,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float kmaskHa = 0; float kmaskHb = 0; - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { if (locllmasCurve) { valLL = (float)(locllmasCurve[500.f * (bufcolorig->L[loy - begy][lox - begx]) / 32768.f]); @@ -10342,7 +10374,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float radiusb = 3.f / sk; - if (lp.showmaskcolmet >= 2) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { #ifdef _OPENMP #pragma omp parallel @@ -10423,7 +10455,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o - if (lp.showmaskcolmet != 4) { + if (lp.showmaskcolmet == 0 || lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -10434,9 +10466,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o int loy = cy + y; if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - // bufcolorig->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas - // bufcolorig->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas - // bufcolorig->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas chpro = 0.f; //Chroma curve @@ -10563,7 +10592,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o - if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet >= 2 || (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili + if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili float hueplus = hueref + dhueex; float huemoins = hueref - dhueex; @@ -10703,6 +10732,35 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o delete[] tmL; } + if (lp.showmaskexpmet == 5) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + int zone = 0; + float localFactor = 1.f; + const float achm = (float)lp.trans / 100.f; + + if (lp.shapmet == 0) { + calcTransition(lox, loy, achm, lp, zone, localFactor); + } else if (lp.shapmet == 1) { + calcTransitionrect(lox, loy, achm, lp, zone, localFactor); + } + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if(zone > 0) { + transformed->L[y][x] = blend2[loy - begy][lox - begx]; + transformed->a[y][x] = 0.f; + transformed->b[y][x] = 0.f; + } + } + } + } + } @@ -10731,7 +10789,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float valCC = 0.f; float2 sincosval; - if (lp.showmaskexpmet >= 2) { + if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { if (locllmasexpCurve) { valLL = (float)(locllmasexpCurve[500.f * (bufexporig->L[loy - begy][lox - begx]) / 32768.f]); valLL = 1.f - valLL; @@ -10754,7 +10812,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float radiusb = 3.f / sk; - if (lp.showmaskexpmet >= 2) { + if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { #ifdef _OPENMP #pragma omp parallel @@ -10834,7 +10892,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } - if (lp.showmaskexpmet != 4) { + if (lp.showmaskexpmet == 0 || lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index d4c5ffc18..ef5e21b7c 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -234,6 +234,7 @@ Locallab::Locallab(): showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskcolMethod->append(M("TP_LOCALLAB_USEMASK")); showmaskcolMethod->append(M("TP_LOCALLAB_SHOWMASK")); + showmaskcolMethod->append(M("TP_LOCALLAB_SHOWSTRUC")); showmaskcolMethod->set_active(0); showmaskcolMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); @@ -393,6 +394,7 @@ Locallab::Locallab(): showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMODIFMASK")); showmaskexpMethod->append(M("TP_LOCALLAB_USEMASK")); showmaskexpMethod->append(M("TP_LOCALLAB_SHOWMASK")); + showmaskexpMethod->append(M("TP_LOCALLAB_SHOWSTRUC")); showmaskexpMethod->set_active(0); showmaskexpMethod->set_tooltip_markup(M("TP_LOCALLAB_SHOWMASKCOL_TOOLTIP")); @@ -1501,6 +1503,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = "mask"; } else if (showmaskcolMethod->get_active_row_number() == 4) { pp->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = "showmask"; + } else if (showmaskcolMethod->get_active_row_number() == 5) { + pp->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = "showstruc"; } pp->locallab.spots.at(pp->locallab.selspot).llcurve = llshape->getCurve(); @@ -1532,6 +1536,8 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = "mask"; } else if (showmaskexpMethod->get_active_row_number() == 4) { pp->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = "showmask"; + } else if (showmaskexpMethod->get_active_row_number() == 5) { + pp->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = "showstruc"; } pp->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = LLmaskexpshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = CCmaskexpshape->getCurve(); @@ -2156,7 +2162,7 @@ void Locallab::qualitycurveMethodChanged() void Locallab::showmaskcolMethodChanged() { - if((showmaskcolMethod->get_active_row_number() == 1 || showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 4) && expcolor->getEnabled()) { + if((showmaskcolMethod->get_active_row_number() == 1 || showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 4 || showmaskcolMethod->get_active_row_number() == 5) && expcolor->getEnabled()) { showmaskexpMethod->set_active(0); expexpose->setEnabled(false); } @@ -2171,7 +2177,7 @@ void Locallab::showmaskcolMethodChanged() void Locallab::showmaskexpMethodChanged() { - if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4) && expexpose->getEnabled()) { + if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4 || showmaskexpMethod->get_active_row_number() == 5) && expexpose->getEnabled()) { showmaskcolMethod->set_active(0); expcolor->setEnabled(false); } @@ -3500,6 +3506,8 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con showmaskcolMethod->set_active(3); } else if (pp->locallab.spots.at(index).showmaskcolMethod == "showmask") { showmaskcolMethod->set_active(4); + } else if (pp->locallab.spots.at(index).showmaskcolMethod == "showstruc") { + showmaskcolMethod->set_active(5); } llshape->setCurve(pp->locallab.spots.at(index).llcurve); ccshape->setCurve(pp->locallab.spots.at(index).cccurve); @@ -3531,6 +3539,8 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con showmaskexpMethod->set_active(3); } else if (pp->locallab.spots.at(index).showmaskexpMethod == "showmask") { showmaskexpMethod->set_active(4); + } else if (pp->locallab.spots.at(index).showmaskexpMethod == "showstruc") { + showmaskexpMethod->set_active(5); } CCmaskexpshape->setCurve(pp->locallab.spots.at(index).CCmaskexpcurve); LLmaskexpshape->setCurve(pp->locallab.spots.at(index).LLmaskexpcurve); @@ -3893,14 +3903,14 @@ void Locallab::updateSpecificGUIState() //update showmethod if (multiImage && showmaskcolMethod->get_active_text() == M("GENERAL_UNCHANGED")) { showmaskexpMethod->set_active(0); - } else if((showmaskcolMethod->get_active_row_number() == 1 || showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 4)) { + } else if((showmaskcolMethod->get_active_row_number() == 1 || showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 4 || showmaskcolMethod->get_active_row_number() == 5)) { showmaskexpMethod->set_active(0); expexpose->setEnabled(false); } if (multiImage && showmaskexpMethod->get_active_text() == M("GENERAL_UNCHANGED")) { showmaskcolMethod->set_active(0); - } else if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4)) { + } else if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4 || showmaskexpMethod->get_active_row_number() == 5)) { showmaskcolMethod->set_active(0); expcolor->setEnabled(false); } From 89ec57ea73abb3670f85c9e710a1ae13bba287e4 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 16 Jan 2019 15:21:24 +0100 Subject: [PATCH 13/23] Improvment to show structure --- rtengine/iplocallab.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 450862989..818ef5b64 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -10115,7 +10115,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o //local color and light - if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || lp.qualcurvemet != 0 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili + if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || lp.qualcurvemet != 0 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4 || lp.showmaskcolmet == 5) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili float hueplus = hueref + dhue; float huemoins = hueref - dhue; @@ -10592,7 +10592,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o - if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili + if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || lp.showmaskexpmet == 5|| (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili float hueplus = hueref + dhueex; float huemoins = hueref - dhueex; From eec28d637f228dc814b108d5b347f11c87fe7e76 Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 17 Jan 2019 17:13:27 +0100 Subject: [PATCH 14/23] Fixed bug in color LC(H) - add LC(H) for exposure - add blend for mask color --- rtdata/languages/default | 3 ++ rtengine/curves.cc | 50 +++++++++++++++++++++ rtengine/curves.h | 29 ++++++++++++ rtengine/dcrop.cc | 4 +- rtengine/improccoordinator.cc | 8 +++- rtengine/improccoordinator.h | 1 + rtengine/improcfun.h | 2 +- rtengine/iplocallab.cc | 83 +++++++++++++++++++++++++++++++++-- rtengine/procevents.h | 2 + rtengine/procparams.cc | 8 ++++ rtengine/procparams.h | 2 + rtengine/refreshmap.cc | 4 +- rtengine/simpleprocess.cc | 4 +- rtgui/locallab.cc | 45 +++++++++++++++++-- rtgui/locallab.h | 2 + rtgui/paramsedited.cc | 14 ++++++ rtgui/paramsedited.h | 2 + 17 files changed, 250 insertions(+), 13 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 9cba8aba1..90cc0ff77 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -866,6 +866,8 @@ HISTORY_MSG_610;Local - Exp Mask L HISTORY_MSG_611;Local - Color Mask H HISTORY_MSG_612;Local - Color Structure HISTORY_MSG_613;Local - Exp Structure +HISTORY_MSG_614;Local - Exp Mask H +HISTORY_MSG_615;Local - Blend color HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -1934,6 +1936,7 @@ TP_LOCALLAB_ARTIF;Reduce artifacts - Improve algoritm TP_LOCALLAB_ARTIF_TOOLTIP;Only active for Color-light, Exposure, Retinex, Vibrance, ToneMapping, CBDL. TP_LOCALLAB_AVOID;Avoid color shift TP_LOCALLAB_BILATERAL;Bilateral filter +TP_LOCALLAB_BLENDMASKCOL;Blend TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal - direct blur and noise with all settings.\nInverse - Inverse blur and noise without scope and whithout enhanced algorithm.\nSymmetric - inverse blur and noise with all settings. Be careful some results may be curious TP_LOCALLAB_BLUFR;Blur & Noise TP_LOCALLAB_BLNORM;Normal diff --git a/rtengine/curves.cc b/rtengine/curves.cc index dbd07db70..ba6683806 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -1570,6 +1570,56 @@ void LocretigainCurverab::Set(const std::vector &curvePoints) } } +LocHHmaskexpCurve::LocHHmaskexpCurve() : sum(0.f) {}; + +void LocHHmaskexpCurve::Reset() +{ + lutLocHHmaskexpCurve.reset(); + sum = 0.f; +} + + +void LocHHmaskexpCurve::Set(const Curve &pCurve) +{ + if (pCurve.isIdentity()) { + Reset(); // raise this value if the quality suffers from this number of samples + return; + } + + lutLocHHmaskexpCurve(501); // raise this value if the quality suffers from this number of samples + sum = 0.f; + + for (int i = 0; i < 501; i++) { + lutLocHHmaskexpCurve[i] = pCurve.getVal(double (i) / 500.); + + if (lutLocHHmaskexpCurve[i] < 0.02f) { + lutLocHHmaskexpCurve[i] = 0.02f; + } + + sum += lutLocHHmaskexpCurve[i]; + } + + //lutLocHHCurve.dump("wav"); +} + + + +void LocHHmaskexpCurve::Set(const std::vector &curvePoints) +{ + // if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { + if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { + FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); + ttcurve.setIdentityValue(0.); + Set(ttcurve); + } else { + Reset(); + } +} + + + + + LocLLmaskexpCurve::LocLLmaskexpCurve() : sum(0.f) {}; void LocLLmaskexpCurve::Reset() diff --git a/rtengine/curves.h b/rtengine/curves.h index b078d4e68..2ff10434d 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -632,6 +632,35 @@ public: } }; +class LocHHmaskexpCurve +{ +private: + LUTf lutLocHHmaskexpCurve; // 0xffff range + void Set(const Curve &pCurve); + +public: + float sum; + + virtual ~LocHHmaskexpCurve() {}; + LocHHmaskexpCurve(); + void Reset(); + void Set(const std::vector &curvePoints); + float getSum() const + { + return sum; + } + + float operator[](float index) const + { + return lutLocHHmaskexpCurve[index]; + } + operator bool (void) const + { + return lutLocHHmaskexpCurve; + } +}; + + class LocCCmaskexpCurve { private: diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index b8afd3c7a..80b0aead8 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -905,6 +905,7 @@ void Crop::update(int todo) LocHHmaskCurve lochhmasCurve; LocCCmaskexpCurve locccmasexpCurve; LocLLmaskexpCurve locllmasexpCurve; + LocHHmaskexpCurve lochhmasexpCurve; LocretigainCurverab locRETgainCurverab; locallutili = false; @@ -923,6 +924,7 @@ void Crop::update(int todo) lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve); locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve); locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve); + lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve); locallutili = false; CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve2, sca); localcutili = false; @@ -952,7 +954,7 @@ void Crop::update(int todo) sca); parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, lllocalcurve2, - loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, LHutili, HHutili, cclocalcurve2, localskutili, sklocalcurve2, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, huere, chromare, lumare, sobelre); + loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, lochhmasexpCurve, LHutili, HHutili, cclocalcurve2, localskutili, sklocalcurve2, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, huere, chromare, lumare, sobelre); lllocalcurve2.clear(); cclocalcurve2.clear(); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 3d238ea42..339bc0cf9 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -791,6 +791,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve); locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve); locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve); + lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve); CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve, sca); CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve, sca); CurveFactory::curveskLocal(localskutili, params.locallab.spots.at(sp).skintonescurve, sklocalcurve, sca); @@ -811,6 +812,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) } else { ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } + CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, sca); @@ -832,9 +834,11 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) * - maxspot, huerefs, centerx and centery aren't used in Lab_Local (only for printf) so values aren't important * - shbuffer is used as nullptr */ - ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, + ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, lochhmasexpCurve, LHutili, HHutili, cclocalcurve, localskutili, sklocalcurve, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, huer, chromar, lumar, sobeler); + + /* if (params.locallab.spots.at(sp).spotMethod == "exc") { ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } else { @@ -846,6 +850,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) cclocalcurve.clear(); sklocalcurve.clear(); exlocalcurve.clear(); + */ } for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) { @@ -861,6 +866,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) lumar = lumarefs[sp] = lumare ; sobeler = sobelrefs[sp] = sobelre; } + } //************************************************************* diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index d835e5100..9eafc28f1 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -240,6 +240,7 @@ protected: LocHHmaskCurve lochhmasCurve; LocCCmaskexpCurve locccmasexpCurve; LocLLmaskexpCurve locllmasexpCurve; + LocHHmaskexpCurve lochhmasexpCurve; ProcParams nextParams2; bool locallutili; bool localcutili; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index eb0d62a54..263576fab 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -289,7 +289,7 @@ public: void calc_ref(int sp, LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &huere, double &chromare, double &lumare, double &sobelref, LUTu & histogram); void copy_ref(LabImage* spotbuffer, LabImage* original, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp, double &huerefspot, double &chromarefspot, double &lumarefspot); void paste_ref(LabImage* spotbuffer, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp); - void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, LUTf & lightCurveloc, double & huerefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref); + void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, const LocHHmaskexpCurve & lochhmasexpCurve, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, LUTf & lightCurveloc, double & huerefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk); void BlurNoise_Localold(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy); void InverseBlurNoise_Local(const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 818ef5b64..1b84b867c 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -157,7 +157,8 @@ struct local_params { float thr; int prox; int chro, cont, sens, sensh, senscb, sensbn, senstm, sensex, sensexclu, sensden, senslc, senssf; - float struco; + float struco; + float blendmacol; float struexp; float ligh; int shamo, shdamp, shiter, senssha, sensv; @@ -473,6 +474,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall int local_contrast = locallab.spots.at(sp).contrast; float local_lightness = (float) locallab.spots.at(sp).lightness; float structcolor = (float) locallab.spots.at(sp).structcol; + float blendmaskcolor = ((float) locallab.spots.at(sp).blendmaskcol) / 100.f ; float structexpo = (float) locallab.spots.at(sp).structexp; int local_transit = locallab.spots.at(sp).transit; double radius = (double) locallab.spots.at(sp).radius; @@ -509,6 +511,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.lyT = h * local_yT; lp.chro = local_chroma; lp.struco = structcolor; + lp.blendmacol = blendmaskcolor; lp.struexp = structexpo; lp.sens = local_sensi; lp.sensh = local_sensih; @@ -7102,6 +7105,10 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; int xEn = lp.xc + lp.lx; + begx /= sk; + begy /= sk; + yEn /= sk; + xEn /= sk; //claculate histogram for area selected #ifdef _OPENMP const int numThreads = min(max(transformed->W * transformed->H / (int)histogram.getSize(), 1), omp_get_max_threads()); @@ -7118,7 +7125,8 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform for (int x = 0; x < transformed->W; x++) { int lox = cx + x; int loy = cy + y; - + lox /= sk; + loy /= sk; if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { int pos = (int)(original->L[y][x]); lhist16thrloc[pos]++; @@ -7621,7 +7629,7 @@ void ImProcFunctions::fftw_denoise(int GW, int GH, int max_numblox_W, int min_nu void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, int cx, int cy, int oW, int oH, int sk, - const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, + const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, const LocHHmaskexpCurve & lochhmasexpCurve, bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, double & huerefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref) { //general call of others functions : important return hueref, chromaref, lumaref @@ -10127,7 +10135,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o huemoins = hueref - dhue + 2.f * rtengine::RT_PI; } - +//provisory fixe for contrast slider does not work at all + lp.cont = 0; LabImage *bufcolorig = nullptr; LabImage *bufmaskorig = nullptr; @@ -10413,12 +10422,22 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if(zone > 0) { + bufcolorig->L[loy - begy][lox - begx] += lp.blendmacol * bufmaskorig->L[loy - begy][lox - begx]; + bufcolorig->a[loy - begy][lox - begx] += lp.blendmacol * bufmaskorig->a[loy - begy][lox - begx]; + bufcolorig->b[loy - begy][lox - begx] += lp.blendmacol * bufmaskorig->b[loy - begy][lox - begx]; + + originalmask->L[y][x] = bufcolorig->L[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->L[loy - begy][lox - begx]; + originalmask->a[y][x] = bufcolorig->a[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->a[loy - begy][lox - begx]; + originalmask->b[y][x] = bufcolorig->L[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->b[loy - begy][lox - begx]; +/* bufcolorig->L[loy - begy][lox - begx] -= bufmaskorig->L[loy - begy][lox - begx]; bufcolorig->a[loy - begy][lox - begx] -= bufmaskorig->a[loy - begy][lox - begx]; bufcolorig->b[loy - begy][lox - begx] -= bufmaskorig->b[loy - begy][lox - begx]; + originalmask->L[y][x] = bufcolorig->L[loy - begy][lox - begx]; originalmask->a[y][x] = bufcolorig->a[loy - begy][lox - begx]; originalmask->b[y][x] = bufcolorig->L[loy - begy][lox - begx]; + */ } } } @@ -10785,11 +10804,66 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufmaskblur->a[loy - begy][lox - begx] = original->a[y][x]; bufmaskblur->b[loy - begy][lox - begx] = original->b[y][x]; + // float valLL = 0.f; + // float valCC = 0.f; + // float2 sincosval; float valLL = 0.f; float valCC = 0.f; + float valHH = 0.f; float2 sincosval; + float kmaskL = 0; + float kmaskCa = 0; + float kmaskCb = 0; + + float kmaskHL = 0; + float kmaskHa = 0; + float kmaskHb = 0; + if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { + + if (locllmasexpCurve) { + valLL = (float)(locllmasexpCurve[500.f * (bufexporig->L[loy - begy][lox - begx]) / 32768.f]); + valLL = 1.f - valLL; + kmaskL = 32768.f * valLL; + } + + if (locccmasexpCurve) { + float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))); + float chromaskr = chromask / 45000.f; + valCC = float (locccmasexpCurve[500.f * chromaskr]); + valCC = 1.f - valCC; + sincosval.y = (bufexporig->a[loy - begy][lox - begx]) / chromask; + sincosval.x = (bufexporig->b[loy - begy][lox - begx]) / chromask; + kmaskCa = 45000.f * valCC * sincosval.y; + kmaskCb = 45000.f * valCC * sincosval.x; + } + + if (lochhmasexpCurve) { + float huema= xatan2f(bufexporig->b[loy - begy][lox - begx], bufexporig->a[loy - begy][lox - begx]); + float h = Color::huelab_to_huehsv2(huema); + h += 1.f/6.f; + if (h > 1.f) { + h -= 1.f; + } + float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))); + valHH = float (lochhmasexpCurve[500.f * h]); + valHH = 1.f - valHH; + sincosval.y = (bufexporig->a[loy - begy][lox - begx]) / chromask; + sincosval.x = (bufexporig->b[loy - begy][lox - begx]) / chromask; + kmaskHa = 45000.f * valHH * sincosval.y; + kmaskHb = 45000.f * valHH * sincosval.x; + kmaskHL = 32768.f * valHH; + } + + bufmaskblur->L[loy - begy][lox - begx] = kmaskL + kmaskHL; + bufmaskblur->a[loy - begy][lox - begx] = kmaskCa + kmaskHa; + bufmaskblur->b[loy - begy][lox - begx] = kmaskCb + kmaskHb; + + + } + + /* if (locllmasexpCurve) { valLL = (float)(locllmasexpCurve[500.f * (bufexporig->L[loy - begy][lox - begx]) / 32768.f]); valLL = 1.f - valLL; @@ -10807,6 +10881,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufmaskblur->b[loy - begy][lox - begx] = 45000.f * valCC * sincosval.x; } } + */ } } diff --git a/rtengine/procevents.h b/rtengine/procevents.h index 2df20710d..f92362e97 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -640,6 +640,8 @@ enum ProcEventCode { EvlocallabHHmaskshape = 610, Evlocallabstructcol = 611, Evlocallabstructexp = 612, + EvlocallabHHmaskexpshape = 613, + Evlocallabblendmaskcol = 614, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 1aaee5735..e42e76c95 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2363,6 +2363,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : chroma(0), sensi(19), structcol(0), + blendmaskcol(-100), qualitycurveMethod("none"), showmaskcolMethod("none"), llcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, @@ -2387,6 +2388,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : showmaskexpMethod("none"), CCmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, LLmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, + HHmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, // Vibrance expvibrance(false), @@ -2501,6 +2503,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && chroma == other.chroma && sensi == other.sensi && structcol == other.structcol + && blendmaskcol == other.blendmaskcol && qualitycurveMethod == other.qualitycurveMethod && showmaskcolMethod == other.showmaskcolMethod && llcurve == other.llcurve @@ -2525,6 +2528,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && showmaskexpMethod == other.showmaskexpMethod && CCmaskexpcurve == other.CCmaskexpcurve && LLmaskexpcurve == other.LLmaskexpcurve + && HHmaskexpcurve == other.HHmaskexpcurve // Vibrance && expvibrance == other.expvibrance && saturated == other.saturated @@ -3591,6 +3595,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).chroma, "Locallab", "Chroma_" + std::to_string(i), spot.chroma, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sensi, "Locallab", "Sensi_" + std::to_string(i), spot.sensi, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).structcol, "Locallab", "Structcol_" + std::to_string(i), spot.structcol, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blendmaskcol, "Locallab", "Blendmaskcol_" + std::to_string(i), spot.blendmaskcol, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).qualitycurveMethod, "Locallab", "QualityCurveMethod_" + std::to_string(i), spot.qualitycurveMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).showmaskcolMethod, "Locallab", "ShowmaskcolMethod_" + std::to_string(i), spot.showmaskcolMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).llcurve, "Locallab", "LLCurve_" + std::to_string(i), spot.llcurve, keyFile); @@ -3615,6 +3620,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).showmaskexpMethod, "Locallab", "ShowmaskexpMethod_" + std::to_string(i), spot.showmaskexpMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).CCmaskexpcurve, "Locallab", "CCmaskexpCurve_" + std::to_string(i), spot.CCmaskexpcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmaskexpcurve, "Locallab", "LLmaskexpCurve_" + std::to_string(i), spot.LLmaskexpcurve, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHmaskexpcurve, "Locallab", "HHmaskexpCurve_" + std::to_string(i), spot.HHmaskexpcurve, keyFile); // Vibrance saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expvibrance, "Locallab", "Expvibrance_" + std::to_string(i), spot.expvibrance, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).saturated, "Locallab", "Saturated_" + std::to_string(i), spot.saturated, keyFile); @@ -4808,6 +4814,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Chroma_" + std::to_string(i), pedited, spot.chroma, spotEdited.chroma); assignFromKeyfile(keyFile, "Locallab", "Sensi_" + std::to_string(i), pedited, spot.sensi, spotEdited.sensi); assignFromKeyfile(keyFile, "Locallab", "Structcol_" + std::to_string(i), pedited, spot.structcol, spotEdited.structcol); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskcol_" + std::to_string(i), pedited, spot.blendmaskcol, spotEdited.blendmaskcol); assignFromKeyfile(keyFile, "Locallab", "QualityCurveMethod_" + std::to_string(i), pedited, spot.qualitycurveMethod, spotEdited.qualitycurveMethod); assignFromKeyfile(keyFile, "Locallab", "ShowmaskcolMethod_" + std::to_string(i), pedited, spot.showmaskcolMethod, spotEdited.showmaskcolMethod); assignFromKeyfile(keyFile, "Locallab", "LLCurve_" + std::to_string(i), pedited, spot.llcurve, spotEdited.llcurve); @@ -4832,6 +4839,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "ShowmaskexpMethod_" + std::to_string(i), pedited, spot.showmaskexpMethod, spotEdited.showmaskexpMethod); assignFromKeyfile(keyFile, "Locallab", "CCmaskexpCurve_" + std::to_string(i), pedited, spot.CCmaskexpcurve, spotEdited.CCmaskexpcurve); assignFromKeyfile(keyFile, "Locallab", "LLmaskexpCurve_" + std::to_string(i), pedited, spot.LLmaskexpcurve, spotEdited.LLmaskexpcurve); + assignFromKeyfile(keyFile, "Locallab", "HHmaskexpCurve_" + std::to_string(i), pedited, spot.HHmaskexpcurve, spotEdited.HHmaskexpcurve); // Vibrance assignFromKeyfile(keyFile, "Locallab", "Expvibrance_" + std::to_string(i), pedited, spot.expvibrance, spotEdited.expvibrance); assignFromKeyfile(keyFile, "Locallab", "Saturated_" + std::to_string(i), pedited, spot.saturated, spotEdited.saturated); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index b0444edb1..d4e061a76 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -960,6 +960,7 @@ struct LocallabParams { int chroma; int sensi; int structcol; + int blendmaskcol; Glib::ustring qualitycurveMethod; Glib::ustring showmaskcolMethod; std::vector llcurve; @@ -984,6 +985,7 @@ struct LocallabParams { Glib::ustring showmaskexpMethod; std::vector CCmaskexpcurve; std::vector LLmaskexpcurve; + std::vector HHmaskexpcurve; // Vibrance bool expvibrance; int saturated; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index d4c0cbdf3..a3da742f4 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -639,7 +639,9 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //EvlocallabLLmaskexpshape LUMINANCECURVE, //EvlocallabHHmaskshape LUMINANCECURVE, //Evlocallabstructcol - LUMINANCECURVE //Evlocallabstructexp + LUMINANCECURVE, //Evlocallabstructexp + LUMINANCECURVE, //EvlocallabHHmaskexpshape + LUMINANCECURVE //Evlocallabblendmaskcol }; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 0c210ce3f..b17536fc2 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1080,6 +1080,7 @@ private: LocHHmaskCurve lochhmasCurve; LocCCmaskexpCurve locccmasexpCurve; LocLLmaskexpCurve locllmasexpCurve; + LocHHmaskexpCurve lochhmasexpCurve; LUTf lllocalcurve(65536, 0); LUTf cclocalcurve(65536, 0); LUTf sklocalcurve(65536, 0); @@ -1118,6 +1119,7 @@ private: lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve); locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve); locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve); + lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve); CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve, 1); CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve, 1); CurveFactory::curveskLocal(localskutili, params.locallab.spots.at(sp).skintonescurve, sklocalcurve, 1); @@ -1143,7 +1145,7 @@ private: hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, 1); - ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, + ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, lochhmasexpCurve, LHutili, HHutili, cclocalcurve, localskutili, sklocalcurve, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerefblu, huere, chromare, lumare, sobelre); // Clear local curves diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index ef5e21b7c..2cb0887f7 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -77,6 +77,7 @@ Locallab::Locallab(): chroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMA"), -100, 150, 1, 0))), sensi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), structcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), + blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -150, 100, 1, -100))), // Exposure expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -200, 200, 5, 0))), hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 60))), @@ -107,7 +108,7 @@ Locallab::Locallab(): // Retinex str(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STR"), 0, 100, 1, 0))), chrrt(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHRRT"), 0, 100, 1, 0))), - neigh(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NEIGH"), 14, 150, 1, 50))), + neigh(Gtk::manage(new Adjuster(M("TP_LOCALLAB_NEIGH"), -100, 150, 1, 100))),//14, 150, 1, 50))), vart(Gtk::manage(new Adjuster(M("TP_LOCALLAB_VART"), 50, 500, 1, 200))), dehaz(Gtk::manage(new Adjuster(M("TP_LOCALLAB_DEHAZ"), 0, 100, 1, 0))), sensih(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSIH"), 0, 100, 1, 19))), @@ -217,6 +218,7 @@ Locallab::Locallab(): sensi->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); sensi->setAdjusterListener(this); structcol->setAdjusterListener(this); + blendmaskcol->setAdjusterListener(this); qualitycurveMethod->append(M("TP_LOCALLAB_CURVNONE")); qualitycurveMethod->append(M("TP_LOCALLAB_CURVCURR")); @@ -314,7 +316,7 @@ Locallab::Locallab(): HHmaskshape = static_cast(maskCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true)); HHmaskshape->setIdentityValue(0.); - HHmaskshape->setResetCurve(FlatCurveType(defSpot.LLmaskcurve.at(0)), defSpot.LLmaskcurve); + HHmaskshape->setResetCurve(FlatCurveType(defSpot.HHmaskcurve.at(0)), defSpot.HHmaskcurve); HHmaskshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); HHmaskshape->setCurveColorProvider(this, 6); HHmaskshape->setBottomBarColorProvider(this, 6); @@ -327,7 +329,7 @@ Locallab::Locallab(): superFrame->set_label_widget(*curvactiv); ToolParamBlock* const superBox = Gtk::manage(new ToolParamBlock()); superBox->pack_start(*lightness); - superBox->pack_start(*contrast); +// superBox->pack_start(*contrast); superBox->pack_start(*chroma); superFrame->add(*superBox); colorBox->pack_start(*superFrame); @@ -345,6 +347,7 @@ Locallab::Locallab(): maskcolBox->pack_start(*transLabels, Gtk::PACK_SHRINK, 4); maskcolBox->pack_start(*showmaskcolMethod, Gtk::PACK_SHRINK, 0); maskcolBox->pack_start(*maskCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + maskcolBox->pack_start(*blendmaskcol, Gtk::PACK_SHRINK, 0); maskcolFrame->add(*maskcolBox); colorBox->pack_start(*maskcolFrame); @@ -413,6 +416,14 @@ Locallab::Locallab(): LLmaskexpshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); LLmaskexpshape->setBottomBarBgGradient(mllshape); + HHmaskexpshape = static_cast(maskexpCurveEditorG->addCurve(CT_Flat, "LC(H)", nullptr, false, true)); + HHmaskexpshape->setIdentityValue(0.); + HHmaskexpshape->setResetCurve(FlatCurveType(defSpot.HHmaskexpcurve.at(0)), defSpot.HHmaskexpcurve); + HHmaskexpshape->setTooltip(M("TP_LOCALLAB_CURVEEDITOR_CC_TOOLTIP")); + HHmaskexpshape->setCurveColorProvider(this, 6); + HHmaskexpshape->setBottomBarColorProvider(this, 6); + + maskexpCurveEditorG->curveListComplete(); @@ -1484,6 +1495,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).chroma = chroma->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).sensi = sensi->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).structcol = structcol->getIntValue(); + pp->locallab.spots.at(pp->locallab.selspot).blendmaskcol = blendmaskcol->getIntValue(); if (qualitycurveMethod->get_active_row_number() == 0) { pp->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = "none"; @@ -1541,6 +1553,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) } pp->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = LLmaskexpshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = CCmaskexpshape->getCurve(); + pp->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = HHmaskexpshape->getCurve(); // Vibrance pp->locallab.spots.at(pp->locallab.selspot).expvibrance = expvibrance->getEnabled(); @@ -1673,6 +1686,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).chroma = pe->locallab.spots.at(pp->locallab.selspot).chroma || chroma->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensi = pe->locallab.spots.at(pp->locallab.selspot).sensi || sensi->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).structcol = pe->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).blendmaskcol = pe->locallab.spots.at(pp->locallab.selspot).blendmaskcol || blendmaskcol->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pe->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = pe->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod || showmaskcolMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).llcurve = pe->locallab.spots.at(pp->locallab.selspot).llcurve || !llshape->isUnChanged(); @@ -1697,6 +1711,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = pe->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod || showmaskexpMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve || !LLmaskexpshape->isUnChanged(); + pe->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve || !HHmaskexpshape->isUnChanged(); // Vibrance pe->locallab.spots.at(pp->locallab.selspot).expvibrance = pe->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).saturated = pe->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState(); @@ -1815,6 +1830,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).chroma = pedited->locallab.spots.at(pp->locallab.selspot).chroma || chroma->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensi = pedited->locallab.spots.at(pp->locallab.selspot).sensi || sensi->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).structcol = pedited->locallab.spots.at(pp->locallab.selspot).structcol || structcol->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).blendmaskcol = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskcol || blendmaskcol->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod = pedited->locallab.spots.at(pp->locallab.selspot).qualitycurveMethod || qualitycurveMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod = pedited->locallab.spots.at(pp->locallab.selspot).showmaskcolMethod || showmaskcolMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).llcurve = pedited->locallab.spots.at(pp->locallab.selspot).llcurve || !llshape->isUnChanged(); @@ -1839,6 +1855,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = pedited->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod || showmaskexpMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve || !LLmaskexpshape->isUnChanged(); + pedited->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve || !HHmaskexpshape->isUnChanged(); // Vibrance pedited->locallab.spots.at(pp->locallab.selspot).expvibrance = pedited->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).saturated = pedited->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState(); @@ -2088,7 +2105,12 @@ void Locallab::curveChanged(CurveEditor* ce) listener->panelChanged(EvlocallabLLmaskexpshape, M("HISTORY_CUSTOMCURVE")); } } - + + if (ce == HHmaskexpshape) { + if (listener) { + listener->panelChanged(EvlocallabHHmaskexpshape, M("HISTORY_CUSTOMCURVE")); + } + } } // Vibrance @@ -2431,6 +2453,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe chroma->setDefault((double)defSpot->chroma); sensi->setDefault((double)defSpot->sensi); structcol->setDefault((double)defSpot->structcol); + blendmaskcol->setDefault((double)defSpot->blendmaskcol); // Exposure expcomp->setDefault((double)defSpot->expcomp); hlcompr->setDefault((double)defSpot->hlcompr); @@ -2507,6 +2530,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe chroma->setDefaultEditedState(Irrelevant); sensi->setDefaultEditedState(Irrelevant); structcol->setDefaultEditedState(Irrelevant); + blendmaskcol->setDefaultEditedState(Irrelevant); // Exposure expcomp->setDefaultEditedState(Irrelevant); hlcompr->setDefaultEditedState(Irrelevant); @@ -2587,6 +2611,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe chroma->setDefaultEditedState(defSpotState->chroma ? Edited : UnEdited); sensi->setDefaultEditedState(defSpotState->sensi ? Edited : UnEdited); structcol->setDefaultEditedState(defSpotState->structcol ? Edited : UnEdited); + blendmaskcol->setDefaultEditedState(defSpotState->blendmaskcol ? Edited : UnEdited); // Exposure expcomp->setDefaultEditedState(defSpotState->expcomp ? Edited : UnEdited); hlcompr->setDefaultEditedState(defSpotState->hlcompr ? Edited : UnEdited); @@ -2727,6 +2752,13 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) listener->panelChanged(Evlocallabstructcol, structcol->getTextValue()); } } + + if (a == blendmaskcol) { + if (listener) { + listener->panelChanged(Evlocallabblendmaskcol, blendmaskcol->getTextValue()); + } + } + } // Exposure @@ -3174,6 +3206,7 @@ void Locallab::setBatchMode(bool batchMode) chroma->showEditedCB(); sensi->showEditedCB(); structcol->showEditedCB(); + blendmaskcol->showEditedCB(); // Exposure expcomp->showEditedCB(); hlcompr->showEditedCB(); @@ -3481,6 +3514,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con chroma->setValue(pp->locallab.spots.at(index).chroma); sensi->setValue(pp->locallab.spots.at(index).sensi); structcol->setValue(pp->locallab.spots.at(index).structcol); + blendmaskcol->setValue(pp->locallab.spots.at(index).blendmaskcol); if (pp->locallab.spots.at(index).qualitycurveMethod == "none") { qualitycurveMethod->set_active(0); @@ -3544,6 +3578,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con } CCmaskexpshape->setCurve(pp->locallab.spots.at(index).CCmaskexpcurve); LLmaskexpshape->setCurve(pp->locallab.spots.at(index).LLmaskexpcurve); + HHmaskexpshape->setCurve(pp->locallab.spots.at(index).HHmaskexpcurve); // Vibrance expvibrance->setEnabled(pp->locallab.spots.at(index).expvibrance); @@ -3697,6 +3732,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con chroma->setEditedState(spotState->chroma ? Edited : UnEdited); sensi->setEditedState(spotState->sensi ? Edited : UnEdited); structcol->setEditedState(spotState->structcol ? Edited : UnEdited); + blendmaskcol->setEditedState(spotState->blendmaskcol ? Edited : UnEdited); if (!spotState->qualitycurveMethod) { qualitycurveMethod->set_active_text(M("GENERAL_UNCHANGED")); @@ -3730,6 +3766,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con } CCmaskexpshape->setUnChanged(!spotState->CCmaskexpcurve); LLmaskexpshape->setUnChanged(!spotState->LLmaskexpcurve); + HHmaskexpshape->setUnChanged(!spotState->HHmaskexpcurve); // Vibrance expvibrance->set_inconsistent(!spotState->expvibrance); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 134c55fff..9605464ee 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -79,6 +79,7 @@ private: DiagonalCurveEditor* shapeexpos; FlatCurveEditor* CCmaskexpshape; FlatCurveEditor* LLmaskexpshape; + FlatCurveEditor* HHmaskexpshape; // Vibrance CurveEditorGroup* const curveEditorGG; DiagonalCurveEditor* skinTonesCurve; @@ -93,6 +94,7 @@ private: Adjuster* const chroma; Adjuster* const sensi; Adjuster* const structcol; + Adjuster* const blendmaskcol; // Exposure Adjuster* const expcomp; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index d1c8dc4f5..00b05864f 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -949,6 +949,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).chroma = locallab.spots.at(j).chroma && pSpot.chroma == otherSpot.chroma; locallab.spots.at(j).sensi = locallab.spots.at(j).sensi && pSpot.sensi == otherSpot.sensi; locallab.spots.at(j).structcol = locallab.spots.at(j).structcol && pSpot.structcol == otherSpot.structcol; + locallab.spots.at(j).blendmaskcol = locallab.spots.at(j).blendmaskcol && pSpot.blendmaskcol == otherSpot.blendmaskcol; locallab.spots.at(j).qualitycurveMethod = locallab.spots.at(j).qualitycurveMethod && pSpot.qualitycurveMethod == otherSpot.qualitycurveMethod; locallab.spots.at(j).showmaskcolMethod = locallab.spots.at(j).showmaskcolMethod && pSpot.showmaskcolMethod == otherSpot.showmaskcolMethod; locallab.spots.at(j).llcurve = locallab.spots.at(j).llcurve && pSpot.llcurve == otherSpot.llcurve; @@ -973,6 +974,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).showmaskexpMethod = locallab.spots.at(j).showmaskexpMethod && pSpot.showmaskexpMethod == otherSpot.showmaskexpMethod; locallab.spots.at(j).CCmaskexpcurve = locallab.spots.at(j).CCmaskexpcurve && pSpot.CCmaskexpcurve == otherSpot.CCmaskexpcurve; locallab.spots.at(j).LLmaskexpcurve = locallab.spots.at(j).LLmaskexpcurve && pSpot.LLmaskexpcurve == otherSpot.LLmaskexpcurve; + locallab.spots.at(j).HHmaskexpcurve = locallab.spots.at(j).HHmaskexpcurve && pSpot.HHmaskexpcurve == otherSpot.HHmaskexpcurve; // Vibrance locallab.spots.at(j).expvibrance = locallab.spots.at(j).expvibrance && pSpot.expvibrance == otherSpot.expvibrance; locallab.spots.at(j).saturated = locallab.spots.at(j).saturated && pSpot.saturated == otherSpot.saturated; @@ -2581,6 +2583,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).structcol = mods.locallab.spots.at(i).structcol; } + if (locallab.spots.at(i).blendmaskcol) { + toEdit.locallab.spots.at(i).blendmaskcol = mods.locallab.spots.at(i).blendmaskcol; + } + if (locallab.spots.at(i).qualitycurveMethod) { toEdit.locallab.spots.at(i).qualitycurveMethod = mods.locallab.spots.at(i).qualitycurveMethod; } @@ -2674,6 +2680,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).LLmaskexpcurve = mods.locallab.spots.at(i).LLmaskexpcurve; } + if (locallab.spots.at(i).HHmaskexpcurve) { + toEdit.locallab.spots.at(i).HHmaskexpcurve = mods.locallab.spots.at(i).HHmaskexpcurve; + } + // Vibrance if (locallab.spots.at(i).expvibrance) { toEdit.locallab.spots.at(i).expvibrance = mods.locallab.spots.at(i).expvibrance; @@ -3926,6 +3936,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : chroma(v), sensi(v), structcol(v), + blendmaskcol(v), qualitycurveMethod(v), showmaskcolMethod(v), llcurve(v), @@ -3950,6 +3961,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : showmaskexpMethod(v), CCmaskexpcurve(v), LLmaskexpcurve(v), + HHmaskexpcurve(v), // Vibrance expvibrance(v), saturated(v), @@ -4060,6 +4072,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) chroma = v; sensi = v; structcol = v; + blendmaskcol = v; qualitycurveMethod = v; showmaskcolMethod = v; llcurve = v; @@ -4084,6 +4097,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) showmaskexpMethod = v; CCmaskexpcurve = v; LLmaskexpcurve = v; + HHmaskexpcurve = v; // Vibrance expvibrance = v; saturated = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 02a6302eb..126059cd7 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -488,6 +488,7 @@ public: bool chroma; bool sensi; bool structcol; + bool blendmaskcol; bool qualitycurveMethod; bool showmaskcolMethod; bool llcurve; @@ -512,6 +513,7 @@ public: bool showmaskexpMethod; bool CCmaskexpcurve; bool LLmaskexpcurve; + bool HHmaskexpcurve; // Vibrance bool expvibrance; bool saturated; From 5da3b1b50f97cc256bbfc79428b2eab8dc86312b Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 18 Jan 2019 13:51:09 +0100 Subject: [PATCH 15/23] Fixed some crash - change max expcomp - add blend mask exposure --- rtdata/languages/default | 1 + rtengine/curves.cc | 12 ++-- rtengine/curves.h | 2 +- rtengine/dcrop.cc | 2 +- rtengine/improccoordinator.cc | 6 +- rtengine/iplocallab.cc | 102 ++++++++++++---------------------- rtengine/procevents.h | 1 + rtengine/procparams.cc | 4 ++ rtengine/procparams.h | 1 + rtengine/refreshmap.cc | 3 +- rtengine/simpleprocess.cc | 4 +- rtgui/locallab.cc | 47 +++++++++++++++- rtgui/locallab.h | 1 + rtgui/paramsedited.cc | 7 +++ rtgui/paramsedited.h | 1 + 15 files changed, 111 insertions(+), 83 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index 90cc0ff77..eec87448c 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -868,6 +868,7 @@ HISTORY_MSG_612;Local - Color Structure HISTORY_MSG_613;Local - Exp Structure HISTORY_MSG_614;Local - Exp Mask H HISTORY_MSG_615;Local - Blend color +HISTORY_MSG_616;Local - Blend Exp HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction diff --git a/rtengine/curves.cc b/rtengine/curves.cc index ba6683806..492d36348 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -1054,7 +1054,7 @@ void CurveFactory::complexCurve(double ecomp, double black, double hlcompr, doub //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void CurveFactory::complexCurvelocal(double ecomp, double black, double hlcompr, double hlcomprthresh, - double shcompr, double br, double cont, LUTu & histogram, + double shcompr, double br, double cont, LUTu & histogram, double lumare, LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve, LUTf & lightCurveloc, int skip) { @@ -1131,12 +1131,12 @@ void CurveFactory::complexCurvelocal(double ecomp, double black, double hlcompr, avg += lightCurveloc[i] * histogram[i]; sum += histogram[i]; } - + printf("avg=%f sum=%i lumaref=%f\n", avg/sum, sum, lumare/100.f); std::vector contrastcurvePoints; - - if (sum) { - avg /= sum; - + bool lumm = true; + if (lumm) { + // avg /= sum; + avg = lumare / 100.f; //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% contrastcurvePoints.resize(9); contrastcurvePoints.at(0) = double (DCT_NURBS); diff --git a/rtengine/curves.h b/rtengine/curves.h index 2ff10434d..76439bd49 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -345,7 +345,7 @@ public: int skip = 1); - static void complexCurvelocal(double ecomp, double black, double hlcompr, double hlcomprthresh, double shcompr, double br, double cont, LUTu & histogram, + static void complexCurvelocal(double ecomp, double black, double hlcompr, double hlcomprthresh, double shcompr, double br, double cont, LUTu & histogram, double lumare, LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve, LUTf & lightCurveloc, int skip = 1); diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index 80b0aead8..e428522f2 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -949,7 +949,7 @@ void Crop::update(int todo) chromare = parent->chromarefs[sp]; lumare = parent->lumarefs[sp]; sobelre = parent->sobelrefs[sp]; - CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc2, + CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc2, lumare, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, sca); diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 339bc0cf9..ab47ed9fd 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -813,15 +813,15 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } - CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, - hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, - sca); huerblu = huerefblurs[sp] = huerefblu; huer = huerefs[sp] = huere; chromar = chromarefs[sp] = chromare; lumar = lumarefs[sp] = lumare ; sobeler = sobelrefs[sp] = sobelre; + CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, lumar, + hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, + sca); if (locallListener) { locallListener->refChanged(huer, lumar, chromar); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 1b84b867c..009b25b49 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -159,6 +159,7 @@ struct local_params { int chro, cont, sens, sensh, senscb, sensbn, senstm, sensex, sensexclu, sensden, senslc, senssf; float struco; float blendmacol; + float blendmaexp; float struexp; float ligh; int shamo, shdamp, shiter, senssha, sensv; @@ -475,6 +476,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float local_lightness = (float) locallab.spots.at(sp).lightness; float structcolor = (float) locallab.spots.at(sp).structcol; float blendmaskcolor = ((float) locallab.spots.at(sp).blendmaskcol) / 100.f ; + float blendmaskexpo = ((float) locallab.spots.at(sp).blendmaskexp) / 100.f ; float structexpo = (float) locallab.spots.at(sp).structexp; int local_transit = locallab.spots.at(sp).transit; double radius = (double) locallab.spots.at(sp).radius; @@ -512,6 +514,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.chro = local_chroma; lp.struco = structcolor; lp.blendmacol = blendmaskcolor; + lp.blendmaexp = blendmaskexpo; lp.struexp = structexpo; lp.sens = local_sensi; lp.sensh = local_sensih; @@ -7105,10 +7108,6 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; int xEn = lp.xc + lp.lx; - begx /= sk; - begy /= sk; - yEn /= sk; - xEn /= sk; //claculate histogram for area selected #ifdef _OPENMP const int numThreads = min(max(transformed->W * transformed->H / (int)histogram.getSize(), 1), omp_get_max_threads()); @@ -7125,8 +7124,6 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform for (int x = 0; x < transformed->W; x++) { int lox = cx + x; int loy = cy + y; - lox /= sk; - loy /= sk; if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { int pos = (int)(original->L[y][x]); lhist16thrloc[pos]++; @@ -7304,7 +7301,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform chromaref = aveChro; lumaref = avL; - //printf("Calcref => sp=%i huere=%f chromare=%f lumare=%f \n", sp, hueref, chromaref, lumaref); + printf("Calcref => sp=%i huere=%f chromare=%f lumare=%f \n", sp, hueref, chromaref, lumaref); if (isdenoise) { delete origblur; delete blurorig; @@ -10136,7 +10133,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } //provisory fixe for contrast slider does not work at all - lp.cont = 0; + // lp.cont = 0; LabImage *bufcolorig = nullptr; LabImage *bufmaskorig = nullptr; @@ -10345,7 +10342,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (locccmasCurve) { - float chromask = (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); + float chromask = 0.0001f + (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); float chromaskr = chromask / 45000.f; valCC = float (locccmasCurve[500.f * chromaskr]); valCC = 1.f - valCC; @@ -10362,7 +10359,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (h > 1.f) { h -= 1.f; } - float chromask = (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); + float chromask = 0.0001f + (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); valHH = float (lochhmasCurve[500.f * h]); valHH = 1.f - valHH; sincosval.y = (bufcolorig->a[loy - begy][lox - begx]) / chromask; @@ -10372,9 +10369,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o kmaskHL = 32768.f * valHH; } - bufmaskblur->L[loy - begy][lox - begx] = kmaskL + kmaskHL; - bufmaskblur->a[loy - begy][lox - begx] = kmaskCa + kmaskHa; - bufmaskblur->b[loy - begy][lox - begx] = kmaskCb + kmaskHb; + bufmaskblur->L[loy - begy][lox - begx] = CLIP(kmaskL + kmaskHL); + bufmaskblur->a[loy - begy][lox - begx] = (kmaskCa + kmaskHa); + bufmaskblur->b[loy - begy][lox - begx] = (kmaskCb + kmaskHb); } @@ -10422,22 +10419,13 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if(zone > 0) { - bufcolorig->L[loy - begy][lox - begx] += lp.blendmacol * bufmaskorig->L[loy - begy][lox - begx]; - bufcolorig->a[loy - begy][lox - begx] += lp.blendmacol * bufmaskorig->a[loy - begy][lox - begx]; - bufcolorig->b[loy - begy][lox - begx] += lp.blendmacol * bufmaskorig->b[loy - begy][lox - begx]; + bufcolorig->L[loy - begy][lox - begx] += CLIP(lp.blendmacol * bufmaskorig->L[loy - begy][lox - begx]); + bufcolorig->a[loy - begy][lox - begx] += (lp.blendmacol * bufmaskorig->a[loy - begy][lox - begx]); + bufcolorig->b[loy - begy][lox - begx] += (lp.blendmacol * bufmaskorig->b[loy - begy][lox - begx]); - originalmask->L[y][x] = bufcolorig->L[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->L[loy - begy][lox - begx]; - originalmask->a[y][x] = bufcolorig->a[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->a[loy - begy][lox - begx]; - originalmask->b[y][x] = bufcolorig->L[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->b[loy - begy][lox - begx]; -/* - bufcolorig->L[loy - begy][lox - begx] -= bufmaskorig->L[loy - begy][lox - begx]; - bufcolorig->a[loy - begy][lox - begx] -= bufmaskorig->a[loy - begy][lox - begx]; - bufcolorig->b[loy - begy][lox - begx] -= bufmaskorig->b[loy - begy][lox - begx]; - - originalmask->L[y][x] = bufcolorig->L[loy - begy][lox - begx]; - originalmask->a[y][x] = bufcolorig->a[loy - begy][lox - begx]; - originalmask->b[y][x] = bufcolorig->L[loy - begy][lox - begx]; - */ + originalmask->L[y][x] = CLIP(bufcolorig->L[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); + originalmask->a[y][x] = (bufcolorig->a[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); + originalmask->b[y][x] = (bufcolorig->L[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); } } } @@ -10462,7 +10450,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if(zone > 0) { - transformed->L[y][x] = bufmaskorig->L[loy - begy][lox - begx]; + transformed->L[y][x] = CLIP(bufmaskorig->L[loy - begy][lox - begx]); transformed->a[y][x] = bufmaskorig->a[loy - begy][lox - begx]; transformed->b[y][x] = bufmaskorig->b[loy - begy][lox - begx]; } @@ -10829,7 +10817,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (locccmasexpCurve) { - float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))); + float chromask = 0.0001f + (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))); float chromaskr = chromask / 45000.f; valCC = float (locccmasexpCurve[500.f * chromaskr]); valCC = 1.f - valCC; @@ -10846,7 +10834,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (h > 1.f) { h -= 1.f; } - float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))); + float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))) + 0.0001f; valHH = float (lochhmasexpCurve[500.f * h]); valHH = 1.f - valHH; sincosval.y = (bufexporig->a[loy - begy][lox - begx]) / chromask; @@ -10856,32 +10844,13 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o kmaskHL = 32768.f * valHH; } - bufmaskblur->L[loy - begy][lox - begx] = kmaskL + kmaskHL; - bufmaskblur->a[loy - begy][lox - begx] = kmaskCa + kmaskHa; - bufmaskblur->b[loy - begy][lox - begx] = kmaskCb + kmaskHb; + bufmaskblur->L[loy - begy][lox - begx] = CLIP(kmaskL + kmaskHL); + bufmaskblur->a[loy - begy][lox - begx] = (kmaskCa + kmaskHa); + bufmaskblur->b[loy - begy][lox - begx] = (kmaskCb + kmaskHb); } - /* - if (locllmasexpCurve) { - valLL = (float)(locllmasexpCurve[500.f * (bufexporig->L[loy - begy][lox - begx]) / 32768.f]); - valLL = 1.f - valLL; - bufmaskblur->L[loy - begy][lox - begx] = 32768.f * valLL; - } - - if (locccmasexpCurve) { - float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))); - float chromaskr = chromask / 45000.f; - valCC = float (locccmasexpCurve[500.f * chromaskr]); - valCC = 1.f - valCC; - sincosval.y = (bufexporig->a[loy - begy][lox - begx]) / chromask; - sincosval.x = (bufexporig->b[loy - begy][lox - begx]) / chromask; - bufmaskblur->a[loy - begy][lox - begx] = 45000.f * valCC * sincosval.y; - bufmaskblur->b[loy - begy][lox - begx] = 45000.f * valCC * sincosval.x; - } - } - */ } } @@ -10925,14 +10894,16 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if(zone > 0) { - bufexporig->L[loy - begy][lox - begx] -= bufmaskorig->L[loy - begy][lox - begx]; - bufexporig->a[loy - begy][lox - begx] -= bufmaskorig->a[loy - begy][lox - begx]; - bufexporig->b[loy - begy][lox - begx] -= bufmaskorig->b[loy - begy][lox - begx]; - originalmask->L[y][x] = bufexporig->L[loy - begy][lox - begx]; - originalmask->a[y][x] = bufexporig->a[loy - begy][lox - begx]; - originalmask->b[y][x] = bufexporig->L[loy - begy][lox - begx]; - } + if(zone > 0) { + bufexporig->L[loy - begy][lox - begx] += CLIP(lp.blendmaexp * bufmaskorig->L[loy - begy][lox - begx]); + bufexporig->a[loy - begy][lox - begx] += (lp.blendmaexp * bufmaskorig->a[loy - begy][lox - begx]); + bufexporig->b[loy - begy][lox - begx] += (lp.blendmaexp * bufmaskorig->b[loy - begy][lox - begx]); + bufexporig->L[loy - begy][lox - begx] = CLIP( bufexporig->L[loy - begy][lox - begx]); + originalmask->L[y][x] = CLIP(bufexporig->L[loy - begy][lox - begx]- (lp.blendmaexp + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); + originalmask->a[y][x] =(bufexporig->a[loy - begy][lox - begx]- (lp.blendmaexp + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); + originalmask->b[y][x] =(bufexporig->L[loy - begy][lox - begx]- (lp.blendmaexp + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); + + } } } } else if (lp.showmaskexpmet == 4) { @@ -10956,9 +10927,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if(zone > 0) { - transformed->L[y][x] = bufmaskorig->L[loy - begy][lox - begx]; - transformed->a[y][x] = bufmaskorig->a[loy - begy][lox - begx]; - transformed->b[y][x] = bufmaskorig->b[loy - begy][lox - begx]; + transformed->L[y][x] = CLIP(bufmaskorig->L[loy - begy][lox - begx]); + transformed->a[y][x] = (bufmaskorig->a[loy - begy][lox - begx]); + transformed->b[y][x] = (bufmaskorig->b[loy - begy][lox - begx]); } } } @@ -10980,9 +10951,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - // bufexporig->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas - // bufexporig->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas - // bufexporig->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas bufexptemp->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas bufexptemp->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas bufexptemp->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas diff --git a/rtengine/procevents.h b/rtengine/procevents.h index f92362e97..c13f2745e 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -642,6 +642,7 @@ enum ProcEventCode { Evlocallabstructexp = 612, EvlocallabHHmaskexpshape = 613, Evlocallabblendmaskcol = 614, + Evlocallabblendmaskexp = 615, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index e42e76c95..04f960609 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2389,6 +2389,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : CCmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, LLmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, HHmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, + blendmaskexp(-100), // Vibrance expvibrance(false), @@ -2529,6 +2530,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && CCmaskexpcurve == other.CCmaskexpcurve && LLmaskexpcurve == other.LLmaskexpcurve && HHmaskexpcurve == other.HHmaskexpcurve + && blendmaskexp == other.blendmaskexp // Vibrance && expvibrance == other.expvibrance && saturated == other.saturated @@ -3621,6 +3623,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).CCmaskexpcurve, "Locallab", "CCmaskexpCurve_" + std::to_string(i), spot.CCmaskexpcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).LLmaskexpcurve, "Locallab", "LLmaskexpCurve_" + std::to_string(i), spot.LLmaskexpcurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).HHmaskexpcurve, "Locallab", "HHmaskexpCurve_" + std::to_string(i), spot.HHmaskexpcurve, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blendmaskexp, "Locallab", "Blendmaskexp_" + std::to_string(i), spot.blendmaskexp, keyFile); // Vibrance saveToKeyfile(!pedited || pedited->locallab.spots.at(i).expvibrance, "Locallab", "Expvibrance_" + std::to_string(i), spot.expvibrance, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).saturated, "Locallab", "Saturated_" + std::to_string(i), spot.saturated, keyFile); @@ -4840,6 +4843,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "CCmaskexpCurve_" + std::to_string(i), pedited, spot.CCmaskexpcurve, spotEdited.CCmaskexpcurve); assignFromKeyfile(keyFile, "Locallab", "LLmaskexpCurve_" + std::to_string(i), pedited, spot.LLmaskexpcurve, spotEdited.LLmaskexpcurve); assignFromKeyfile(keyFile, "Locallab", "HHmaskexpCurve_" + std::to_string(i), pedited, spot.HHmaskexpcurve, spotEdited.HHmaskexpcurve); + assignFromKeyfile(keyFile, "Locallab", "Blendmaskexp_" + std::to_string(i), pedited, spot.blendmaskexp, spotEdited.blendmaskexp); // Vibrance assignFromKeyfile(keyFile, "Locallab", "Expvibrance_" + std::to_string(i), pedited, spot.expvibrance, spotEdited.expvibrance); assignFromKeyfile(keyFile, "Locallab", "Saturated_" + std::to_string(i), pedited, spot.saturated, spotEdited.saturated); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index d4e061a76..0da62de5c 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -986,6 +986,7 @@ struct LocallabParams { std::vector CCmaskexpcurve; std::vector LLmaskexpcurve; std::vector HHmaskexpcurve; + int blendmaskexp; // Vibrance bool expvibrance; int saturated; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index a3da742f4..d52933343 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -641,7 +641,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //Evlocallabstructcol LUMINANCECURVE, //Evlocallabstructexp LUMINANCECURVE, //EvlocallabHHmaskexpshape - LUMINANCECURVE //Evlocallabblendmaskcol + LUMINANCECURVE, //Evlocallabblendmaskcol + LUMINANCECURVE //Evlocallabblendmaskexp }; diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index b17536fc2..5b8987bf2 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1088,7 +1088,7 @@ private: LUTf shtonecurveloc(65536, 0); LUTf tonecurveloc(65536, 0); LUTf lightCurveloc(32770, 0); - LUTu lhist16loc(32768, 0); + LUTu lhist16loc(32770, 0); LUTf exlocalcurve(65536, 0); // int maxspot = 1; @@ -1141,7 +1141,7 @@ private: } else { ipf.calc_ref(sp, labView, labView, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); } - CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, + CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, lumare, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, 1); diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 2cb0887f7..c73fd1658 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -79,7 +79,7 @@ Locallab::Locallab(): structcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -150, 100, 1, -100))), // Exposure - expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -200, 200, 5, 0))), + expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -200, 800, 5, 0))), hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 60))), hlcomprthresh(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD"), 0, 100, 1, 33))), black(Gtk::manage(new Adjuster(M("TP_EXPOSURE_BLACKLEVEL"), -16384, 32768, 50, 0))), @@ -87,6 +87,7 @@ Locallab::Locallab(): warm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-orange-small.png"))))), sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), + blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -150, 100, 1, -100))), // Vibrance saturated(Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.))), pastels(Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.))), @@ -329,7 +330,7 @@ Locallab::Locallab(): superFrame->set_label_widget(*curvactiv); ToolParamBlock* const superBox = Gtk::manage(new ToolParamBlock()); superBox->pack_start(*lightness); -// superBox->pack_start(*contrast); + superBox->pack_start(*contrast); superBox->pack_start(*chroma); superFrame->add(*superBox); colorBox->pack_start(*superFrame); @@ -377,6 +378,7 @@ Locallab::Locallab(): sensiex->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); sensiex->setAdjusterListener(this); structexp->setAdjusterListener(this); + blendmaskexp->setAdjusterListener(this); curveEditorG->setCurveListener(this); @@ -433,6 +435,7 @@ Locallab::Locallab(): maskexpBox->pack_start(*transLabels2, Gtk::PACK_SHRINK, 4); maskexpBox->pack_start(*showmaskexpMethod, Gtk::PACK_SHRINK, 0); maskexpBox->pack_start(*maskexpCurveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor + maskexpBox->pack_start(*blendmaskexp, Gtk::PACK_SHRINK, 0); maskexpFrame->add(*maskexpBox); @@ -1528,6 +1531,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).HHmaskcurve = HHmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).invers = invers->get_active(); pp->locallab.spots.at(pp->locallab.selspot).structexp = structexp->getIntValue(); + pp->locallab.spots.at(pp->locallab.selspot).blendmaskexp = blendmaskexp->getIntValue(); // Exposure pp->locallab.spots.at(pp->locallab.selspot).expexpose = expexpose->getEnabled(); pp->locallab.spots.at(pp->locallab.selspot).expcomp = expcomp->getIntValue(); @@ -1712,6 +1716,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve || !LLmaskexpshape->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve || !HHmaskexpshape->isUnChanged(); + pe->locallab.spots.at(pp->locallab.selspot).blendmaskexp = pe->locallab.spots.at(pp->locallab.selspot).blendmaskexp || blendmaskexp->getEditedState(); // Vibrance pe->locallab.spots.at(pp->locallab.selspot).expvibrance = pe->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent(); pe->locallab.spots.at(pp->locallab.selspot).saturated = pe->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState(); @@ -1856,6 +1861,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).LLmaskexpcurve || !LLmaskexpshape->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).HHmaskexpcurve || !HHmaskexpshape->isUnChanged(); + pedited->locallab.spots.at(pp->locallab.selspot).blendmaskexp = pedited->locallab.spots.at(pp->locallab.selspot).blendmaskexp || blendmaskexp->getEditedState(); // Vibrance pedited->locallab.spots.at(pp->locallab.selspot).expvibrance = pedited->locallab.spots.at(pp->locallab.selspot).expvibrance || !expvibrance->get_inconsistent(); pedited->locallab.spots.at(pp->locallab.selspot).saturated = pedited->locallab.spots.at(pp->locallab.selspot).saturated || saturated->getEditedState(); @@ -2189,6 +2195,12 @@ void Locallab::showmaskcolMethodChanged() expexpose->setEnabled(false); } + if((showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 3) && expcolor->getEnabled()) { + blendmaskcol->show(); + } else { + blendmaskcol->hide(); + } + if (getEnabled() && expcolor->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabshowmaskcolMethod , showmaskcolMethod->get_active_text()); @@ -2200,10 +2212,17 @@ void Locallab::showmaskexpMethodChanged() { if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4 || showmaskexpMethod->get_active_row_number() == 5) && expexpose->getEnabled()) { + showmaskcolMethod->set_active(0); expcolor->setEnabled(false); } + if((showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 3) && expexpose->getEnabled()) { + blendmaskexp->show(); + } else { + blendmaskexp->hide(); + } + if (getEnabled() && expexpose->getEnabled()) { if (listener) { listener->panelChanged(EvlocallabshowmaskexpMethod , showmaskexpMethod->get_active_text()); @@ -2463,6 +2482,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe warm->setDefault((double)defSpot->warm); sensiex->setDefault((double)defSpot->sensiex); structexp->setDefault((double)defSpot->structexp); + blendmaskexp->setDefault((double)defSpot->blendmaskexp); // Vibrance saturated->setDefault((double)defSpot->saturated); pastels->setDefault((double)defSpot->pastels); @@ -2540,6 +2560,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe warm->setDefaultEditedState(Irrelevant); sensiex->setDefaultEditedState(Irrelevant); structexp->setDefaultEditedState(Irrelevant); + blendmaskexp->setDefaultEditedState(Irrelevant); // Vibrance saturated->setDefaultEditedState(Irrelevant); pastels->setDefaultEditedState(Irrelevant); @@ -2621,6 +2642,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe warm->setDefaultEditedState(defSpotState->warm ? Edited : UnEdited); sensiex->setDefaultEditedState(defSpotState->sensiex ? Edited : UnEdited); structexp->setDefaultEditedState(defSpotState->structexp ? Edited : UnEdited); + blendmaskexp->setDefaultEditedState(defSpotState->blendmaskexp ? Edited : UnEdited); // Vibrance saturated->setDefaultEditedState(defSpotState->saturated ? Edited : UnEdited); pastels->setDefaultEditedState(defSpotState->pastels ? Edited : UnEdited); @@ -2820,6 +2842,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) } } + if (a == blendmaskexp) { + if (listener) { + listener->panelChanged(Evlocallabblendmaskexp, blendmaskexp->getTextValue()); + } + } + } // Vibrance @@ -3216,6 +3244,7 @@ void Locallab::setBatchMode(bool batchMode) warm->showEditedCB(); sensiex->showEditedCB(); structexp->showEditedCB(); + blendmaskexp->showEditedCB(); // Vibrance saturated->showEditedCB(); pastels->showEditedCB(); @@ -3579,6 +3608,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con CCmaskexpshape->setCurve(pp->locallab.spots.at(index).CCmaskexpcurve); LLmaskexpshape->setCurve(pp->locallab.spots.at(index).LLmaskexpcurve); HHmaskexpshape->setCurve(pp->locallab.spots.at(index).HHmaskexpcurve); + blendmaskexp->setValue(pp->locallab.spots.at(index).blendmaskexp); // Vibrance expvibrance->setEnabled(pp->locallab.spots.at(index).expvibrance); @@ -3767,6 +3797,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con CCmaskexpshape->setUnChanged(!spotState->CCmaskexpcurve); LLmaskexpshape->setUnChanged(!spotState->LLmaskexpcurve); HHmaskexpshape->setUnChanged(!spotState->HHmaskexpcurve); + blendmaskexp->setEditedState(spotState->blendmaskexp ? Edited : UnEdited); // Vibrance expvibrance->set_inconsistent(!spotState->expvibrance); @@ -3941,6 +3972,12 @@ void Locallab::updateSpecificGUIState() if (multiImage && showmaskcolMethod->get_active_text() == M("GENERAL_UNCHANGED")) { showmaskexpMethod->set_active(0); } else if((showmaskcolMethod->get_active_row_number() == 1 || showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 4 || showmaskcolMethod->get_active_row_number() == 5)) { + if((showmaskcolMethod->get_active_row_number() == 2 || showmaskcolMethod->get_active_row_number() == 3)) { + blendmaskcol->show(); + } else { + blendmaskcol->hide(); + } + showmaskexpMethod->set_active(0); expexpose->setEnabled(false); } @@ -3948,6 +3985,12 @@ void Locallab::updateSpecificGUIState() if (multiImage && showmaskexpMethod->get_active_text() == M("GENERAL_UNCHANGED")) { showmaskcolMethod->set_active(0); } else if((showmaskexpMethod->get_active_row_number() == 1 || showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 4 || showmaskexpMethod->get_active_row_number() == 5)) { + if((showmaskexpMethod->get_active_row_number() == 2 || showmaskexpMethod->get_active_row_number() == 3)) { + blendmaskexp->show(); + } else { + blendmaskexp->hide(); + } + showmaskcolMethod->set_active(0); expcolor->setEnabled(false); } diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 9605464ee..185b9544d 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -105,6 +105,7 @@ private: Adjuster* const warm; Adjuster* const sensiex; Adjuster* const structexp; + Adjuster* const blendmaskexp; // Vibrance Adjuster* const saturated; Adjuster* const pastels; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 00b05864f..8c41192c2 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -975,6 +975,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).CCmaskexpcurve = locallab.spots.at(j).CCmaskexpcurve && pSpot.CCmaskexpcurve == otherSpot.CCmaskexpcurve; locallab.spots.at(j).LLmaskexpcurve = locallab.spots.at(j).LLmaskexpcurve && pSpot.LLmaskexpcurve == otherSpot.LLmaskexpcurve; locallab.spots.at(j).HHmaskexpcurve = locallab.spots.at(j).HHmaskexpcurve && pSpot.HHmaskexpcurve == otherSpot.HHmaskexpcurve; + locallab.spots.at(j).blendmaskexp = locallab.spots.at(j).blendmaskexp && pSpot.blendmaskexp == otherSpot.blendmaskexp; // Vibrance locallab.spots.at(j).expvibrance = locallab.spots.at(j).expvibrance && pSpot.expvibrance == otherSpot.expvibrance; locallab.spots.at(j).saturated = locallab.spots.at(j).saturated && pSpot.saturated == otherSpot.saturated; @@ -2684,6 +2685,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).HHmaskexpcurve = mods.locallab.spots.at(i).HHmaskexpcurve; } + if (locallab.spots.at(i).blendmaskexp) { + toEdit.locallab.spots.at(i).blendmaskexp = mods.locallab.spots.at(i).blendmaskexp; + } + // Vibrance if (locallab.spots.at(i).expvibrance) { toEdit.locallab.spots.at(i).expvibrance = mods.locallab.spots.at(i).expvibrance; @@ -3962,6 +3967,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : CCmaskexpcurve(v), LLmaskexpcurve(v), HHmaskexpcurve(v), + blendmaskexp(v), // Vibrance expvibrance(v), saturated(v), @@ -4098,6 +4104,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) CCmaskexpcurve = v; LLmaskexpcurve = v; HHmaskexpcurve = v; + blendmaskexp = v; // Vibrance expvibrance = v; saturated = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index 126059cd7..b3c0ef036 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -514,6 +514,7 @@ public: bool CCmaskexpcurve; bool LLmaskexpcurve; bool HHmaskexpcurve; + bool blendmaskexp; // Vibrance bool expvibrance; bool saturated; From f7578c23fcc1ee3f58b532986ce2f66e9691c827 Mon Sep 17 00:00:00 2001 From: Desmis Date: Fri, 18 Jan 2019 16:08:02 +0100 Subject: [PATCH 16/23] Normalize CLIP - fixe a bug divide by zero - format iplocallab.cc --- rtengine/improccoordinator.cc | 5 +- rtengine/iplocallab.cc | 536 +++++++++++++++++++--------------- 2 files changed, 299 insertions(+), 242 deletions(-) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index ab47ed9fd..63c734f5a 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -852,7 +852,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) exlocalcurve.clear(); */ } - + /* for (int sp = 0; sp < params.locallab.nbspot && sp < (int)params.locallab.spots.size(); sp++) { //update references after threatment if (params.locallab.spots.at(sp).spotMethod == "exc") { @@ -865,8 +865,9 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) chromar = chromarefs[sp] = chromare; lumar = lumarefs[sp] = lumare ; sobeler = sobelrefs[sp] = sobelre; + } - + */ } //************************************************************* diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 009b25b49..b4eff3be4 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -160,7 +160,7 @@ struct local_params { float struco; float blendmacol; float blendmaexp; - float struexp; + float struexp; float ligh; int shamo, shdamp, shiter, senssha, sensv; float neig; @@ -366,7 +366,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall double local_dyy = locallab.spots.at(sp).iter / 8000.0; float iterati = (float) locallab.spots.at(sp).iter; // double local_dyy = locallab.proxi; - float neigh = float (locallab.spots.at(sp).neigh); + float neigh = float (locallab.spots.at(sp).neigh); float chromaPastel = float (locallab.spots.at(sp).pastels) / 100.0f; float chromaSatur = float (locallab.spots.at(sp).saturated) / 100.0f; int local_sensiv = locallab.spots.at(sp).sensiv; @@ -525,6 +525,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.senssf = local_sensisf; lp.strng = strlight; lp.neig = neigh; + if (lp.ligh >= -2.f && lp.ligh <= 2.f) { lp.ligh /= 5.f; } @@ -3932,8 +3933,10 @@ void ImProcFunctions::Reti_Local(float moddE, float powdE, float **buflight, flo transformed->a[y][x] = original->a[y][x] + difa; transformed->b[y][x] = original->b[y][x] + difb; } + break; } + case 2: { // inside selection => full effect, no transition if (chro == 0) { float lightc = tmp1->L[loy - begy][lox - begx]; @@ -4553,7 +4556,7 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, cons } } } - delete origblur; + delete origblur; } @@ -5077,7 +5080,8 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La { varsens = lp.senssf; } - // printf("varsen=%f \n", varsens); + + // printf("varsen=%f \n", varsens); //chroma constexpr float amplchsens = 2.5f; constexpr float achsens = (amplchsens - 1.f) / (100.f - 20.f); //20. default locallab.sensih @@ -5086,7 +5090,12 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La //sobel sobelref /= 100.; - if(sobelref > 60.) sobelref = 60.; + + if (sobelref > 60.) + { + sobelref = 60.; + } + sobelref = log(1.f + sobelref); @@ -5130,18 +5139,21 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float radius = 3.f / sk; bool usemask = (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) && senstype == 1; - if (usemask) { + + if (usemask) + { origblurmask = new LabImage(GW, GH); #ifdef _OPENMP - #pragma omp parallel + #pragma omp parallel #endif { gaussianBlur(originalmask->L, origblurmask->L, GW, GH, radius); gaussianBlur(originalmask->a, origblurmask->a, GW, GH, radius); gaussianBlur(originalmask->b, origblurmask->b, GW, GH, radius); } - } + } + #ifdef _OPENMP #pragma omp parallel #endif @@ -5228,20 +5240,25 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float rL = origblur->L[y][x] / 327.68f; float csob = 0.f; float rs = 0.f; - if (senstype == 1){ - csob = (blend2[loy - begy][lox - begx])/100.f ; - if(csob > 60.f) { + + if (senstype == 1) { + csob = (blend2[loy - begy][lox - begx]) / 100.f ; + + if (csob > 60.f) { csob = 60.f; } - csob = log(1.f + csob); + + csob = log(1.f + csob + 0.001f); rs = sobelref / csob; } + float rhuemask = 0.f; float rchromask = 0.f; float rLmask = 0.f; float dE = 0.f; float rsob = 0.f; - if(lp.struexp > 0.f && rs > 0.f && senstype == 1) { + + if (lp.struexp > 0.f && rs > 0.f && senstype == 1) { rsob = 1.1f * lp.struexp * rs; } @@ -5574,12 +5591,13 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float chra = bufexporig->a[loy - begy][lox - begx]; float chrb = bufexporig->b[loy - begy][lox - begx]; - if (senstype != 1) { + if (senstype != 1) { flia = flib = ((100.f + realstrch * falu * falL) / 100.f); } else { flia = ((100.f + realstra * falu * falL) / 100.f); flib = ((100.f + realstrb * falu * falL) / 100.f); - } + } + float difa = chra * flia - original->a[y][x]; float difb = chrb * flib - original->b[y][x]; difa *= factorx; @@ -5588,6 +5606,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La difb *= kch * fach; transformed->a[y][x] = original->a[y][x] + difa; transformed->b[y][x] = original->b[y][x] + difb; + if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { transformed->L[y][x] = 12000.f + diflc; transformed->a[y][x] = difa; @@ -5611,13 +5630,14 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float flib = 1.f; float chra = bufexporig->a[loy - begy][lox - begx]; float chrb = bufexporig->b[loy - begy][lox - begx]; - - if (senstype != 1) { + + if (senstype != 1) { flia = flib = ((100.f + realstrch * falu * falL) / 100.f); } else { flia = ((100.f + realstra * falu * falL) / 100.f); flib = ((100.f + realstrb * falu * falL) / 100.f); - } + } + float difa = chra * flia - original->a[y][x]; float difb = chrb * flib - original->b[y][x]; difa *= kch * fach; @@ -5673,7 +5693,9 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } delete origblur; - if ((lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4)&& senstype == 1) { + + if ((lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) && senstype == 1) + { delete origblurmask; } @@ -5735,8 +5757,13 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm // const float moddE = 2.f; sobelref /= 100.; - if(sobelref > 60.) sobelref = 60.; + + if (sobelref > 60.) { + sobelref = 60.; + } + sobelref = log(1.f + sobelref); + // constant and variables to prepare shape detection if (lumaref + modlum >= 100.f) { modlum = (100.f - lumaref) / 2.f; @@ -5773,18 +5800,20 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm float radius = 3.f / sk; - if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { + + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { origblurmask = new LabImage(GW, GH); - + #ifdef _OPENMP - #pragma omp parallel + #pragma omp parallel #endif - { - gaussianBlur(originalmask->L, origblurmask->L, GW, GH, radius); - gaussianBlur(originalmask->a, origblurmask->a, GW, GH, radius); - gaussianBlur(originalmask->b, origblurmask->b, GW, GH, radius); + { + gaussianBlur(originalmask->L, origblurmask->L, GW, GH, radius); + gaussianBlur(originalmask->a, origblurmask->a, GW, GH, radius); + gaussianBlur(originalmask->b, origblurmask->b, GW, GH, radius); + } } - } + #ifdef _OPENMP #pragma omp parallel #endif @@ -5876,20 +5905,27 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm if (fabs(origblur->b[y][x]) < 0.01f) { origblur->b[y][x] = 0.01f; } + //Sobel - float csob = (blend2[loy - begy][lox - begx])/100.f ; - if(csob > 60.f) csob = 60.f; - csob = log(1.f + csob); + float csob = (blend2[loy - begy][lox - begx]) / 100.f ; + + if (csob > 60.f) { + csob = 60.f; + } + + csob = log(1.f + csob + 0.001f); float rs = sobelref / csob; - + float dE = 0.f; float rhuemask = 0.f; float rchromask = 0.f; float rLmask = 0.f; float rsob = 0.f; - if(lp.struco > 0.f && rs > 0.f) { + + if (lp.struco > 0.f && rs > 0.f) { rsob = 1.1f * lp.struco * (rs); } + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { rhuemask = xatan2f(origblurmask->b[y][x], origblurmask->a[y][x]); rchromask = sqrt(SQR(origblurmask->b[y][x]) + SQR(origblurmask->a[y][x])) / 327.68f; @@ -5901,7 +5937,8 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm rchromask = rchro; rLmask = rL; } - //retriev data curve lightness + + //retriev data curve lightness float cli = (buflight[loy - begy][lox - begx]); //parameters for linear interpolation in function of real hue float apluscligh = (1.f - cli) / delhu; @@ -6404,7 +6441,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm diflc *= kch ; diflc *= factorx; //transition lightness - transformed->L[y][x] = CLIPL((original->L[y][x] + diflc)); + transformed->L[y][x] = CLIPLOC((original->L[y][x] + diflc)); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { transformed->L[y][x] = 12000.f + diflc; //CLIPL((original->L[y][x] + diflc)); @@ -6534,7 +6571,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm kdiff *= fach * kch; diflc *= kdiff ; diflc *= kch ; - transformed->L[y][x] = CLIPL((original->L[y][x] + diflc)); + transformed->L[y][x] = CLIPLOC((original->L[y][x] + diflc)); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { transformed->L[y][x] = 12000.f + diflc; //CLIPL((original->L[y][x] + diflc)); @@ -6600,6 +6637,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm } delete origblur; + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { delete origblurmask; } @@ -7019,7 +7057,7 @@ void ImProcFunctions::InverseColorLight_Local(const struct local_params & lp, LU diflc *= kdiff ; diflc *= factorx; //transition lightness - transformed->L[y][x] = CLIPL(1.f * (original->L[y][x] + diflc)); + transformed->L[y][x] = CLIPLOC(1.f * (original->L[y][x] + diflc)); transformed->a[y][x] = CLIPC(original->a[y][x] * fac) ; transformed->b[y][x] = CLIPC(original->b[y][x] * fac); @@ -7070,7 +7108,7 @@ void ImProcFunctions::InverseColorLight_Local(const struct local_params & lp, LU kdiff *= fach * kch; diflc *= kdiff ; - transformed->L[y][x] = CLIPL(1.f * (original->L[y][x] + diflc)); + transformed->L[y][x] = CLIPLOC(1.f * (original->L[y][x] + diflc)); transformed->a[y][x] = CLIPC(original->a[y][x] * fac) ; transformed->b[y][x] = CLIPC(original->b[y][x] * fac); @@ -7124,6 +7162,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform for (int x = 0; x < transformed->W; x++) { int lox = cx + x; int loy = cy + y; + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { int pos = (int)(original->L[y][x]); lhist16thrloc[pos]++; @@ -7230,7 +7269,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform aveL += original->L[y - cy][x - cx]; aveA += original->a[y - cy][x - cx]; aveB += original->b[y - cy][x - cx]; - // aveblend += 100.f * blend2[y - cy][x - cx]; + // aveblend += 100.f * blend2[y - cy][x - cx]; aveChro += sqrtf(SQR(original->b[y - cy][x - cx]) + SQR(original->a[y - cy][x - cx])); nab++; } @@ -7260,13 +7299,13 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform for (int y = 0; y < spotSi ; y ++) for (int x = 0; x < spotSi ; x ++) { - avesobel += sobelL->L[y][x]; - // avesobel += blend3[y][x]; + avesobel += sobelL->L[y][x]; + // avesobel += blend3[y][x]; nbs++; } sobelref = avesobel / nbs; - printf ("sobelref=%f \n", sobelref); + printf("sobelref=%f \n", sobelref); } delete sobelL; @@ -7302,6 +7341,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform lumaref = avL; printf("Calcref => sp=%i huere=%f chromare=%f lumare=%f \n", sp, hueref, chromaref, lumaref); + if (isdenoise) { delete origblur; delete blurorig; @@ -10014,7 +10054,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (!lp.invret) { - // Reti_Local(moddE, powdE, buflight, bufchro, hueplus, huemoins, hueref, dhueret, chromaref, lumaref, lp, original, transformed, tmpl, cx, cy, 0, sk); + // Reti_Local(moddE, powdE, buflight, bufchro, hueplus, huemoins, hueref, dhueret, chromaref, lumaref, lp, original, transformed, tmpl, cx, cy, 0, sk); Reti_Local(moddE, powdE, buflight, bufchro, hueplus, huemoins, hueref, dhueret, chromaref, lumaref, lp, original, transformed, bufreti, cx, cy, 0, sk); } else { InverseReti_Local(lp, original, transformed, tmpl, cx, cy, 0); @@ -10133,7 +10173,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } //provisory fixe for contrast slider does not work at all - // lp.cont = 0; + // lp.cont = 0; LabImage *bufcolorig = nullptr; LabImage *bufmaskorig = nullptr; @@ -10202,10 +10242,11 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; int xEn = lp.xc + lp.lx; - + #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif + for (int y = 0; y < transformed->H ; y++) //{ for (int x = 0; x < transformed->W; x++) { int lox = cx + x; @@ -10213,94 +10254,102 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { bufcolorig->L[loy - begy][lox - begx] = original->L[y][x]; - // buforigchro[loy - begy][lox - begx] = sqrt(SQR(original->a[y][x]) + SQR(original->b[y][x])); + // buforigchro[loy - begy][lox - begx] = sqrt(SQR(original->a[y][x]) + SQR(original->b[y][x])); } } const float radius = 3.f / (sk * 1.4f); int spotSi = 1 + 2 * max(1, lp.cir / sk); + if (spotSi < 5) { spotSi = 5; } - if(bfw > 2* spotSi && bfh > 2* spotSi && lp.struco > 0.f) { - SobelCannyLuma(blend2,bufcolorig->L , bfw, bfh, radius); + if (bfw > 2 * spotSi && bfh > 2 * spotSi && lp.struco > 0.f) { + SobelCannyLuma(blend2, bufcolorig->L, bfw, bfh, radius); array2D ble(bfw, bfh); array2D blec(bfw, bfh); array2D guid(bfw, bfh); #ifdef _OPENMP - #pragma omp parallel for + #pragma omp parallel for #endif + for (int ir = 0; ir < bfh; ir++) for (int jr = 0; jr < bfw; jr++) { ble[ir][jr] = blend2[ir][jr] / 32768.f; guid[ir][jr] = bufcolorig->L[ir][jr] / 32768.f; } - float blur = 25 / sk * (10.f + 1.2f * lp.struco); + + float blur = 25 / sk * (10.f + 1.2f * lp.struco); printf("Blur=%f \n", blur); - + rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiThread); - // rtengine::guidedFilter(guid, blec, blec, blur, 0.001, multiThread); - + // rtengine::guidedFilter(guid, blec, blec, blur, 0.001, multiThread); + #ifdef _OPENMP - #pragma omp parallel for + #pragma omp parallel for #endif + for (int ir = 0; ir < bfh; ir++) for (int jr = 0; jr < bfw; jr++) { - blend2[ir][jr] = ble[ir][jr] * 32768.f; + blend2[ir][jr] = ble[ir][jr] * 32768.f; } bool execmedian = true; int passes = 1; - if (execmedian) - { + + if (execmedian) { float** tmL; int wid = bfw; int hei = bfh; tmL = new float*[hei]; + for (int i = 0; i < hei; ++i) { tmL[i] = new float[wid]; } + Median medianTypeL = Median::TYPE_3X3_STRONG; Median_Denoise(blend2, blend2, wid, hei, medianTypeL, passes, multiThread, tmL); for (int i = 0; i < hei; ++i) { delete[] tmL[i]; } + delete[] tmL; - } - if (lp.showmaskcolmet == 5) { + } + + if (lp.showmaskcolmet == 5) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; - int zone = 0; - float localFactor = 1.f; - const float achm = (float)lp.trans / 100.f; + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + int zone = 0; + float localFactor = 1.f; + const float achm = (float)lp.trans / 100.f; - if (lp.shapmet == 0) { - calcTransition(lox, loy, achm, lp, zone, localFactor); - } else if (lp.shapmet == 1) { - calcTransitionrect(lox, loy, achm, lp, zone, localFactor); - } + if (lp.shapmet == 0) { + calcTransition(lox, loy, achm, lp, zone, localFactor); + } else if (lp.shapmet == 1) { + calcTransitionrect(lox, loy, achm, lp, zone, localFactor); + } - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if(zone > 0) { - transformed->L[y][x] = blend2[loy - begy][lox - begx]; - transformed->a[y][x] = 0.f; - transformed->b[y][x] = 0.f; - } + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if (zone > 0) { + transformed->L[y][x] = blend2[loy - begy][lox - begx]; + transformed->a[y][x] = 0.f; + transformed->b[y][x] = 0.f; } } - } + } + } + + + } - - } - #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -10328,13 +10377,13 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float kmaskL = 0; float kmaskCa = 0; float kmaskCb = 0; - + float kmaskHL = 0; float kmaskHa = 0; float kmaskHb = 0; if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { - + if (locllmasCurve) { valLL = (float)(locllmasCurve[500.f * (bufcolorig->L[loy - begy][lox - begx]) / 32768.f]); valLL = 1.f - valLL; @@ -10353,12 +10402,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (lochhmasCurve) { - float huema= xatan2f(bufcolorig->b[loy - begy][lox - begx], bufcolorig->a[loy - begy][lox - begx]); + float huema = xatan2f(bufcolorig->b[loy - begy][lox - begx], bufcolorig->a[loy - begy][lox - begx]); float h = Color::huelab_to_huehsv2(huema); - h += 1.f/6.f; + h += 1.f / 6.f; + if (h > 1.f) { h -= 1.f; } + float chromask = 0.0001f + (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); valHH = float (lochhmasCurve[500.f * h]); valHH = 1.f - valHH; @@ -10369,9 +10420,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o kmaskHL = 32768.f * valHH; } - bufmaskblur->L[loy - begy][lox - begx] = CLIP(kmaskL + kmaskHL); - bufmaskblur->a[loy - begy][lox - begx] = (kmaskCa + kmaskHa); - bufmaskblur->b[loy - begy][lox - begx] = (kmaskCb + kmaskHb); + bufmaskblur->L[loy - begy][lox - begx] = CLIPLOC(kmaskL + kmaskHL); + bufmaskblur->a[loy - begy][lox - begx] = CLIPC(kmaskCa + kmaskHa); + bufmaskblur->b[loy - begy][lox - begx] = CLIPC(kmaskCb + kmaskHb); } @@ -10390,11 +10441,11 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o gaussianBlur(bufmaskblur->a, bufmaskorig->a, bfw, bfh, radiusb); gaussianBlur(bufmaskblur->b, bufmaskorig->b, bfw, bfh, radiusb); } - int GWm = transformed->W; - int GHm = transformed->H; + int GWm = transformed->W; + int GHm = transformed->H; - originalmask = new LabImage(GWm, GHm); + originalmask = new LabImage(GWm, GHm); if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) { @@ -10418,14 +10469,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if(zone > 0) { - bufcolorig->L[loy - begy][lox - begx] += CLIP(lp.blendmacol * bufmaskorig->L[loy - begy][lox - begx]); - bufcolorig->a[loy - begy][lox - begx] += (lp.blendmacol * bufmaskorig->a[loy - begy][lox - begx]); - bufcolorig->b[loy - begy][lox - begx] += (lp.blendmacol * bufmaskorig->b[loy - begy][lox - begx]); - - originalmask->L[y][x] = CLIP(bufcolorig->L[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); - originalmask->a[y][x] = (bufcolorig->a[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); - originalmask->b[y][x] = (bufcolorig->L[loy - begy][lox - begx]- (lp.blendmacol + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); + if (zone > 0) { + bufcolorig->L[loy - begy][lox - begx] += CLIPLOC(lp.blendmacol * bufmaskorig->L[loy - begy][lox - begx]); + bufcolorig->a[loy - begy][lox - begx] += CLIPC(lp.blendmacol * bufmaskorig->a[loy - begy][lox - begx]); + bufcolorig->b[loy - begy][lox - begx] += CLIPC(lp.blendmacol * bufmaskorig->b[loy - begy][lox - begx]); + + originalmask->L[y][x] = CLIPLOC(bufcolorig->L[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); + originalmask->a[y][x] = CLIPC(bufcolorig->a[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); + originalmask->b[y][x] = CLIPC(bufcolorig->L[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); } } } @@ -10449,10 +10500,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if(zone > 0) { - transformed->L[y][x] = CLIP(bufmaskorig->L[loy - begy][lox - begx]); - transformed->a[y][x] = bufmaskorig->a[loy - begy][lox - begx]; - transformed->b[y][x] = bufmaskorig->b[loy - begy][lox - begx]; + if (zone > 0) { + transformed->L[y][x] = CLIPLOC(bufmaskorig->L[loy - begy][lox - begx]); + transformed->a[y][x] = CLIPC(bufmaskorig->a[loy - begy][lox - begx]); + transformed->b[y][x] = CLIPC(bufmaskorig->b[loy - begy][lox - begx]); } } } @@ -10583,9 +10634,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o else if (lp.inv && (lp.chro != 0 || lp.ligh != 0) && lp.colorena) { float hueplus = hueref + dhue; float huemoins = hueref - dhue; - // float ddhue = 0.f; - //printf("hueplus=%f huemoins=%f dhu=%f\n", hueplus, huemoins, dhue); if (hueplus > rtengine::RT_PI) { hueplus = hueref + dhue - 2.f * rtengine::RT_PI; } @@ -10599,7 +10648,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o - if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || lp.showmaskexpmet == 5|| (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili + if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || lp.showmaskexpmet == 5 || (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili float hueplus = hueref + dhueex; float huemoins = hueref - dhueex; @@ -10634,10 +10683,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (call <= 3) { //simpleprocess, dcrop, improccoordinator - bufexporig = new LabImage(bfw, bfh); //buffer for data in zone limit - bufexpfin = new LabImage(bfw, bfh); //buffer for data in zone limit - bufexptemp = new LabImage(bfw, bfh); //buffer for data in zone limit - bufcat02fin = new LabImage(bfw, bfh); //buffer for data in zone limit + bufexporig = new LabImage(bfw, bfh); + bufexpfin = new LabImage(bfw, bfh); + bufexptemp = new LabImage(bfw, bfh); + bufcat02fin = new LabImage(bfw, bfh); bufmaskorig = new LabImage(bfw, bfh); bufmaskblur = new LabImage(bfw, bfh); @@ -10678,6 +10727,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif + for (int y = 0; y < transformed->H ; y++) //{ for (int x = 0; x < transformed->W; x++) { int lox = cx + x; @@ -10690,86 +10740,92 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o const float radius = 3.f / (sk * 1.4f); int spotSi = 1 + 2 * max(1, lp.cir / sk); + if (spotSi < 5) { spotSi = 5; } - if(bfw > 2* spotSi && bfh > 2* spotSi && lp.struexp > 0.f) { - SobelCannyLuma(blend2,bufexporig->L , bfw, bfh, radius); + if (bfw > 2 * spotSi && bfh > 2 * spotSi && lp.struexp > 0.f) { + SobelCannyLuma(blend2, bufexporig->L, bfw, bfh, radius); array2D ble(bfw, bfh); array2D guid(bfw, bfh); #ifdef _OPENMP - #pragma omp parallel for + #pragma omp parallel for #endif + for (int ir = 0; ir < bfh; ir++) for (int jr = 0; jr < bfw; jr++) { ble[ir][jr] = blend2[ir][jr] / 32768.f; guid[ir][jr] = bufexporig->L[ir][jr] / 32768.f; } - float blur = 25 / sk * (10.f + 1.2f * lp.struexp); - // printf("Blur=%f \n", blur); - + + float blur = 25 / sk * (10.f + 1.2f * lp.struexp); + rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiThread); - + #ifdef _OPENMP - #pragma omp parallel for + #pragma omp parallel for #endif + for (int ir = 0; ir < bfh; ir++) for (int jr = 0; jr < bfw; jr++) { - blend2[ir][jr] = ble[ir][jr] * 32768.f; + blend2[ir][jr] = ble[ir][jr] * 32768.f; } bool execmedian = true; int passes = 1; - if (execmedian) - { + + if (execmedian) { float** tmL; int wid = bfw; int hei = bfh; tmL = new float*[hei]; + for (int i = 0; i < hei; ++i) { tmL[i] = new float[wid]; } + Median medianTypeL = Median::TYPE_3X3_STRONG; Median_Denoise(blend2, blend2, wid, hei, medianTypeL, passes, multiThread, tmL); for (int i = 0; i < hei; ++i) { delete[] tmL[i]; } - delete[] tmL; - } - if (lp.showmaskexpmet == 5) { + delete[] tmL; + } + + if (lp.showmaskexpmet == 5) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif - for (int y = 0; y < transformed->H ; y++) - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; - int zone = 0; - float localFactor = 1.f; - const float achm = (float)lp.trans / 100.f; + for (int y = 0; y < transformed->H ; y++) + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + int zone = 0; + float localFactor = 1.f; + const float achm = (float)lp.trans / 100.f; - if (lp.shapmet == 0) { - calcTransition(lox, loy, achm, lp, zone, localFactor); - } else if (lp.shapmet == 1) { - calcTransitionrect(lox, loy, achm, lp, zone, localFactor); - } + if (lp.shapmet == 0) { + calcTransition(lox, loy, achm, lp, zone, localFactor); + } else if (lp.shapmet == 1) { + calcTransitionrect(lox, loy, achm, lp, zone, localFactor); + } - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if(zone > 0) { - transformed->L[y][x] = blend2[loy - begy][lox - begx]; - transformed->a[y][x] = 0.f; - transformed->b[y][x] = 0.f; - } + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if (zone > 0) { + transformed->L[y][x] = blend2[loy - begy][lox - begx]; + transformed->a[y][x] = 0.f; + transformed->b[y][x] = 0.f; } } - } + } + } - - } + + } #ifdef _OPENMP @@ -10792,9 +10848,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufmaskblur->a[loy - begy][lox - begx] = original->a[y][x]; bufmaskblur->b[loy - begy][lox - begx] = original->b[y][x]; - // float valLL = 0.f; - // float valCC = 0.f; - // float2 sincosval; float valLL = 0.f; float valCC = 0.f; float valHH = 0.f; @@ -10802,14 +10855,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float kmaskL = 0; float kmaskCa = 0; float kmaskCb = 0; - + float kmaskHL = 0; float kmaskHa = 0; float kmaskHb = 0; if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { - + if (locllmasexpCurve) { valLL = (float)(locllmasexpCurve[500.f * (bufexporig->L[loy - begy][lox - begx]) / 32768.f]); valLL = 1.f - valLL; @@ -10828,12 +10881,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (lochhmasexpCurve) { - float huema= xatan2f(bufexporig->b[loy - begy][lox - begx], bufexporig->a[loy - begy][lox - begx]); + float huema = xatan2f(bufexporig->b[loy - begy][lox - begx], bufexporig->a[loy - begy][lox - begx]); float h = Color::huelab_to_huehsv2(huema); - h += 1.f/6.f; + h += 1.f / 6.f; + if (h > 1.f) { h -= 1.f; } + float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))) + 0.0001f; valHH = float (lochhmasexpCurve[500.f * h]); valHH = 1.f - valHH; @@ -10844,13 +10899,13 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o kmaskHL = 32768.f * valHH; } - bufmaskblur->L[loy - begy][lox - begx] = CLIP(kmaskL + kmaskHL); - bufmaskblur->a[loy - begy][lox - begx] = (kmaskCa + kmaskHa); - bufmaskblur->b[loy - begy][lox - begx] = (kmaskCb + kmaskHb); + bufmaskblur->L[loy - begy][lox - begx] = CLIPLOC(kmaskL + kmaskHL); + bufmaskblur->a[loy - begy][lox - begx] = CLIPC(kmaskCa + kmaskHa); + bufmaskblur->b[loy - begy][lox - begx] = CLIPC(kmaskCb + kmaskHb); } - + } } @@ -10866,11 +10921,11 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o gaussianBlur(bufmaskblur->a, bufmaskorig->a, bfw, bfh, radiusb); gaussianBlur(bufmaskblur->b, bufmaskorig->b, bfw, bfh, radiusb); } - int GWm = transformed->W; - int GHm = transformed->H; + int GWm = transformed->W; + int GHm = transformed->H; - originalmask = new LabImage(GWm, GHm); + originalmask = new LabImage(GWm, GHm); if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3) { @@ -10894,16 +10949,16 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if(zone > 0) { - bufexporig->L[loy - begy][lox - begx] += CLIP(lp.blendmaexp * bufmaskorig->L[loy - begy][lox - begx]); - bufexporig->a[loy - begy][lox - begx] += (lp.blendmaexp * bufmaskorig->a[loy - begy][lox - begx]); - bufexporig->b[loy - begy][lox - begx] += (lp.blendmaexp * bufmaskorig->b[loy - begy][lox - begx]); - bufexporig->L[loy - begy][lox - begx] = CLIP( bufexporig->L[loy - begy][lox - begx]); - originalmask->L[y][x] = CLIP(bufexporig->L[loy - begy][lox - begx]- (lp.blendmaexp + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); - originalmask->a[y][x] =(bufexporig->a[loy - begy][lox - begx]- (lp.blendmaexp + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); - originalmask->b[y][x] =(bufexporig->L[loy - begy][lox - begx]- (lp.blendmaexp + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); + if (zone > 0) { + bufexporig->L[loy - begy][lox - begx] += CLIPLOC(lp.blendmaexp * bufmaskorig->L[loy - begy][lox - begx]); + bufexporig->a[loy - begy][lox - begx] += CLIPC(lp.blendmaexp * bufmaskorig->a[loy - begy][lox - begx]); + bufexporig->b[loy - begy][lox - begx] += CLIPC(lp.blendmaexp * bufmaskorig->b[loy - begy][lox - begx]); + bufexporig->L[loy - begy][lox - begx] = CLIPLOC(bufexporig->L[loy - begy][lox - begx]); + originalmask->L[y][x] = CLIPLOC(bufexporig->L[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); + originalmask->a[y][x] = CLIPC(bufexporig->a[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); + originalmask->b[y][x] = CLIPC(bufexporig->L[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); - } + } } } } else if (lp.showmaskexpmet == 4) { @@ -10926,10 +10981,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if(zone > 0) { - transformed->L[y][x] = CLIP(bufmaskorig->L[loy - begy][lox - begx]); - transformed->a[y][x] = (bufmaskorig->a[loy - begy][lox - begx]); - transformed->b[y][x] = (bufmaskorig->b[loy - begy][lox - begx]); + if (zone > 0) { + transformed->L[y][x] = CLIPLOC(bufmaskorig->L[loy - begy][lox - begx]); + transformed->a[y][x] = CLIPC(bufmaskorig->a[loy - begy][lox - begx]); + transformed->b[y][x] = CLIPC(bufmaskorig->b[loy - begy][lox - begx]); } } } @@ -10938,32 +10993,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } - if (lp.showmaskexpmet == 0 || lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3) { + if (lp.showmaskexpmet == 0 || lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3) { -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; - - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - - bufexptemp->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas - bufexptemp->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas - bufexptemp->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas - bufexpfin->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas - bufexpfin->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas - bufexpfin->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas - } - } - -//to do Modulate bufexporig and bufexptemp with blend L, H, C and masks - - - if (exlocalcurve && localexutili) {// L=f(L) curve enhanced #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -10975,72 +11006,97 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - float lighn = bufexporig->L[loy - begy][lox - begx]; - - float lh; - lh = 0.5f * exlocalcurve[2.f * lighn]; // / ((lighn) / 1.9f) / 3.61f; //lh between 0 and 0 50 or more - bufexptemp->L[loy - begy][lox - begx] = lh; + bufexptemp->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas + bufexptemp->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas + bufexptemp->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas + bufexpfin->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas + bufexpfin->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas + bufexpfin->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas } } - if (lp.expcomp == 0.f) { - lp.expcomp = 0.1f; // to enabled - } - - ImProcFunctions::exlabLocal(lp, bfh, bfw, bufexptemp, bufexpfin, hltonecurveloc, shtonecurveloc, tonecurveloc); +//to do Modulate bufexporig and bufexptemp with blend L, H, C and masks - } else { - - ImProcFunctions::exlabLocal(lp, bfh, bfw, bufexporig, bufexpfin, hltonecurveloc, shtonecurveloc, tonecurveloc); - } - - //cat02 - if (params->locallab.spots.at(sp).warm != 0) { - ImProcFunctions::ciecamloc_02float(sp, bufexpfin, bufcat02fin); - } else { + if (exlocalcurve && localexutili) {// L=f(L) curve enhanced #ifdef _OPENMP - #pragma omp parallel for + #pragma omp parallel for schedule(dynamic,16) #endif - for (int ir = 0; ir < bfh; ir++) - for (int jr = 0; jr < bfw; jr++) { - bufcat02fin->L[ir][jr] = bufexpfin->L[ir][jr]; - bufcat02fin->a[ir][jr] = bufexpfin->a[ir][jr]; - bufcat02fin->b[ir][jr] = bufexpfin->b[ir][jr]; + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + + float lighn = bufexporig->L[loy - begy][lox - begx]; + + float lh; + lh = 0.5f * exlocalcurve[2.f * lighn]; // / ((lighn) / 1.9f) / 3.61f; //lh between 0 and 0 50 or more + bufexptemp->L[loy - begy][lox - begx] = lh; + } + } + + if (lp.expcomp == 0.f) { + lp.expcomp = 0.1f; // to enabled } - } + + ImProcFunctions::exlabLocal(lp, bfh, bfw, bufexptemp, bufexpfin, hltonecurveloc, shtonecurveloc, tonecurveloc); + + + } else { + + ImProcFunctions::exlabLocal(lp, bfh, bfw, bufexporig, bufexpfin, hltonecurveloc, shtonecurveloc, tonecurveloc); + } + + //cat02 + if (params->locallab.spots.at(sp).warm != 0) { + ImProcFunctions::ciecamloc_02float(sp, bufexpfin, bufcat02fin); + } else { +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + bufcat02fin->L[ir][jr] = bufexpfin->L[ir][jr]; + bufcat02fin->a[ir][jr] = bufexpfin->a[ir][jr]; + bufcat02fin->b[ir][jr] = bufexpfin->b[ir][jr]; + } + } #ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) + #pragma omp parallel for schedule(dynamic,16) #endif - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - float rL; - rL = CLIPRET((bufcat02fin->L[loy - begy][lox - begx] - bufexporig->L[loy - begy][lox - begx]) / 328.f); + float rL; + rL = CLIPRET((bufcat02fin->L[loy - begy][lox - begx] - bufexporig->L[loy - begy][lox - begx]) / 328.f); - buflight[loy - begy][lox - begx] = rL; - float rA; - rA = CLIPRET((bufcat02fin->a[loy - begy][lox - begx] - bufexporig->a[loy - begy][lox - begx]) / 328.f); - buf_a_cat[loy - begy][lox - begx] = rA; + buflight[loy - begy][lox - begx] = rL; + float rA; + rA = CLIPRET((bufcat02fin->a[loy - begy][lox - begx] - bufexporig->a[loy - begy][lox - begx]) / 328.f); + buf_a_cat[loy - begy][lox - begx] = rA; - float rB; - rB = CLIPRET((bufcat02fin->b[loy - begy][lox - begx] - bufexporig->b[loy - begy][lox - begx]) / 328.f); - buf_b_cat[loy - begy][lox - begx] = rB; + float rB; + rB = CLIPRET((bufcat02fin->b[loy - begy][lox - begx] - bufexporig->b[loy - begy][lox - begx]) / 328.f); + buf_b_cat[loy - begy][lox - begx] = rB; + } } - } - } + } + Expo_vibr_Local(moddE, powdE, 1, bufexporig, originalmask, buflight, bufl_ab, buf_a_cat, buf_b_cat, hueplus, huemoins, hueref, dhueex, chromaref, lumaref, sobelref, blend2, lp, original, transformed, cx, cy, sk); //view mask } From a9be068b1c680550deb8ed20d5f21037714e5ac0 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 19 Jan 2019 09:11:43 +0100 Subject: [PATCH 17/23] Improvment to Color and Light contrast --- rtengine/curves.cc | 23 +++++++++++++---------- rtengine/curves.h | 2 +- rtengine/dcrop.cc | 3 ++- rtengine/improccoordinator.cc | 12 ++++++------ rtengine/improccoordinator.h | 1 + rtengine/improcfun.h | 2 +- rtengine/iplocallab.cc | 21 ++++++++++++++++++--- rtengine/simpleprocess.cc | 8 ++++---- 8 files changed, 46 insertions(+), 26 deletions(-) diff --git a/rtengine/curves.cc b/rtengine/curves.cc index 492d36348..722b98ccd 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -1055,7 +1055,7 @@ void CurveFactory::complexCurve(double ecomp, double black, double hlcompr, doub //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void CurveFactory::complexCurvelocal(double ecomp, double black, double hlcompr, double hlcomprthresh, double shcompr, double br, double cont, LUTu & histogram, double lumare, - LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve, LUTf & lightCurveloc, + LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve, LUTf & lightCurveloc, float avg, int skip) { @@ -1124,19 +1124,22 @@ void CurveFactory::complexCurvelocal(double ecomp, double black, double hlcompr, if (cont > 0.00001 || cont < -0.00001) { // compute mean luminance of the image with the curve applied - int sum = 0; - float avg = 0; +// int sum = 0; +// float avg = 0; - for (int i = 0; i < 32768; i++) { - avg += lightCurveloc[i] * histogram[i]; - sum += histogram[i]; - } - printf("avg=%f sum=%i lumaref=%f\n", avg/sum, sum, lumare/100.f); +// for (int i = 0; i < 32768; i++) { +// avg += lightCurveloc[i] * histogram[i]; +// sum += histogram[i]; +// } + + int k = avg * 32768; + avg = lightCurveloc[k]; +// printf("avg=%f lumaref=%f\n", avg, lumare/100.f); std::vector contrastcurvePoints; bool lumm = true; if (lumm) { - // avg /= sum; - avg = lumare / 100.f; +// avg /= sum; +// avg = lumare / 100.f; //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% contrastcurvePoints.resize(9); contrastcurvePoints.at(0) = double (DCT_NURBS); diff --git a/rtengine/curves.h b/rtengine/curves.h index 76439bd49..0d5270fec 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -346,7 +346,7 @@ public: int skip = 1); static void complexCurvelocal(double ecomp, double black, double hlcompr, double hlcomprthresh, double shcompr, double br, double cont, LUTu & histogram, double lumare, - LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve, LUTf & lightCurveloc, + LUTf & hlCurve, LUTf & shCurve, LUTf & outCurve, LUTf & lightCurveloc, float avg, int skip = 1); static void curveBW(const std::vector& curvePointsbw, const std::vector& curvePointsbw2, const LUTu & histogrambw, LUTu & outBeforeCCurveHistogrambw, diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index e428522f2..ac2e2fe44 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -895,6 +895,7 @@ void Crop::update(int todo) LUTu lhist16loc2(32770, 0); bool LHutili = parent->LHutili; bool HHutili = parent->HHutili; + float avg = parent->avg; LUTu dummy; bool needslocal = params.locallab.enabled; LocretigainCurve locRETgainCurve; @@ -950,7 +951,7 @@ void Crop::update(int todo) lumare = parent->lumarefs[sp]; sobelre = parent->sobelrefs[sp]; CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc2, lumare, - hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, + hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, avg, sca); parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, lllocalcurve2, diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 63c734f5a..be1896b0a 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -120,7 +120,8 @@ ImProcCoordinator::ImProcCoordinator() chromar(0), lumar(0), sobeler(0), - lastspotdup(false), + lastspotdup(false), + avg(0), retistrsav(nullptr) {} @@ -805,22 +806,21 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) double cont = params.locallab.spots.at(sp).contrast; lhist16loc.clear(); - // Reference parameters computation if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reserv, reserv, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc, avg); } else { - ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc, avg); } - + printf("improc avg=%f\n", avg); huerblu = huerefblurs[sp] = huerefblu; huer = huerefs[sp] = huere; chromar = chromarefs[sp] = chromare; lumar = lumarefs[sp] = lumare ; sobeler = sobelrefs[sp] = sobelre; CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, lumar, - hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, + hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avg, sca); if (locallListener) { diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index 9eafc28f1..f703ce3f0 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -255,6 +255,7 @@ protected: LUTf sobelrefs; double huer, huerblu, chromar, lumar, sobeler; bool lastspotdup; + float avg; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 263576fab..73ed17e2e 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -286,7 +286,7 @@ public: //locallab void MSRLocal(int sp, float** luminance, float** templ, const float* const *originalLuminance, const int width, const int height, const LocallabParams &loc, const int skip, const LocretigainCurve &locRETgainCcurve, const int chrome, const int scall, const float krad, float &minCD, float &maxCD, float &mini, float &maxi, float &Tmean, float &Tsigma, float &Tmin, float &Tmax); // void calc_ref (LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huere, double &chromare, double &lumare, double &sobelref); - void calc_ref(int sp, LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &huere, double &chromare, double &lumare, double &sobelref, LUTu & histogram); + void calc_ref(int sp, LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &huere, double &chromare, double &lumare, double &sobelref, LUTu & histogram, float &avg); void copy_ref(LabImage* spotbuffer, LabImage* original, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp, double &huerefspot, double &chromarefspot, double &lumarefspot); void paste_ref(LabImage* spotbuffer, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp); void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, const LocHHmaskexpCurve & lochhmasexpCurve, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, LUTf & lightCurveloc, double & huerefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index b4eff3be4..ee001967a 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -7136,7 +7136,7 @@ void ImProcFunctions::InverseColorLight_Local(const struct local_params & lp, LU } -void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transformed, int cx, int cy, int oW, int oH, int sk, double & huerefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, LUTu & histogram) +void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transformed, int cx, int cy, int oW, int oH, int sk, double & huerefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref, LUTu & histogram, float &avg) { if (params->locallab.enabled) { //always calculate hueref, chromaref, lumaref before others operations use in normal mode for all modules exceprt denoise @@ -7146,6 +7146,22 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; int xEn = lp.xc + lp.lx; + float avg2 = 0.f; + int nc2 = 0; + + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + avg2 += original->L[y][x]; + nc2++; + } + } + avg2 /= 32768.f; + avg = avg2/nc2; +// printf("calc avg=%f \n", avg); //claculate histogram for area selected #ifdef _OPENMP const int numThreads = min(max(transformed->W * transformed->H / (int)histogram.getSize(), 1), omp_get_max_threads()); @@ -7154,6 +7170,7 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform { LUTu lhist16thrloc(histogram.getSize()); lhist16thrloc.clear(); + histogram.clear(); #ifdef _OPENMP #pragma omp for nowait #endif @@ -10242,7 +10259,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o int begx = lp.xc - lp.lxL; int yEn = lp.yc + lp.ly; int xEn = lp.xc + lp.lx; - #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) #endif @@ -10257,7 +10273,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o // buforigchro[loy - begy][lox - begx] = sqrt(SQR(original->a[y][x]) + SQR(original->b[y][x])); } } - const float radius = 3.f / (sk * 1.4f); int spotSi = 1 + 2 * max(1, lp.cir / sk); diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 5b8987bf2..53abafeb2 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1135,14 +1135,14 @@ private: // Reference parameters computation double huere, chromare, lumare, huerefblu, sobelre; - + float avg = 0.f; if (params.locallab.spots.at(sp).spotMethod == "exc") { - ipf.calc_ref(sp, reservView, reservView, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, reservView, reservView, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc, avg); } else { - ipf.calc_ref(sp, labView, labView, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc); + ipf.calc_ref(sp, labView, labView, 0, 0, fw, fh, 1, huerefblu, huere, chromare, lumare, sobelre, lhist16loc, avg); } CurveFactory::complexCurvelocal(ecomp, black / 65535., hlcompr, hlcomprthresh, shcompr, br, cont, lhist16loc, lumare, - hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, + hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avg, 1); ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, lochhmasexpCurve, From 2b19e47ec05072d3a802a9ee8ef1784795d9c6f9 Mon Sep 17 00:00:00 2001 From: Desmis Date: Sat, 19 Jan 2019 17:28:12 +0100 Subject: [PATCH 18/23] Clip all output --- rtengine/iplocallab.cc | 148 ++++++++++++++++++++--------------------- 1 file changed, 74 insertions(+), 74 deletions(-) diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index ee001967a..f6a28b871 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -2123,9 +2123,9 @@ void ImProcFunctions::DeNoise_Local(int call, const struct local_params& lp, in difL *= factorx * khu; difa *= factorx * khu; difb *= factorx * khu; - transformed->L[y][x] = original->L[y][x] + difL; - transformed->a[y][x] = (original->a[y][x] + difa) * factnoise1 * factnoise2; - transformed->b[y][x] = (original->b[y][x] + difb) * factnoise1 * factnoise2 ; + transformed->L[y][x] = CLIP(original->L[y][x] + difL); + transformed->a[y][x] = CLIPC((original->a[y][x] + difa) * factnoise1 * factnoise2); + transformed->b[y][x] = CLIPC((original->b[y][x] + difb) * factnoise1 * factnoise2) ; break; } @@ -2147,9 +2147,9 @@ void ImProcFunctions::DeNoise_Local(int call, const struct local_params& lp, in difa *= khu; difb *= khu; - transformed->L[y][x] = original->L[y][x] + difL; - transformed->a[y][x] = (original->a[y][x] + difa) * factnoise1 * factnoise2; - transformed->b[y][x] = (original->b[y][x] + difb) * factnoise1 * factnoise2; + transformed->L[y][x] = CLIP(original->L[y][x] + difL); + transformed->a[y][x] = CLIPC((original->a[y][x] + difa) * factnoise1 * factnoise2); + transformed->b[y][x] = CLIPC((original->b[y][x] + difb) * factnoise1 * factnoise2); } } @@ -2537,7 +2537,7 @@ void ImProcFunctions::cbdl_Local(float moddE, float powdE, float ** buflight, fl difL = loctemp[loy - begy][lox - begx] * fli * falL - original->L[y][x]; difL *= factorx; - transformed->L[y][x] = original->L[y][x] + difL * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + difL * kch * fach); } if (chro == 1) { @@ -2564,7 +2564,7 @@ void ImProcFunctions::cbdl_Local(float moddE, float powdE, float ** buflight, fl if (chro == 0) { difL = loctemp[loy - begy][lox - begx] * fli * falL - original->L[y][x]; - transformed->L[y][x] = original->L[y][x] + difL * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + difL * kch * fach); } if (chro == 1) { @@ -2934,11 +2934,11 @@ void ImProcFunctions::TM_Local(float moddE, float powdE, LabImage * tmp1, float difa *= factorx; difb *= factorx; - transformed->L[y][x] = original->L[y][x] + difL * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + difL * kch * fach); - transformed->a[y][x] = original->a[y][x] + difa * kch * fach * falu;//same as Luma - transformed->b[y][x] = original->b[y][x] + difb * kch * fach * falu;//same as Luma + transformed->a[y][x] = CLIPC(original->a[y][x] + difa * kch * fach * falu);//same as Luma + transformed->b[y][x] = CLIPC(original->b[y][x] + difb * kch * fach * falu);//same as Luma break; } @@ -2950,11 +2950,11 @@ void ImProcFunctions::TM_Local(float moddE, float powdE, LabImage * tmp1, float difa = tmp1->a[loy - begy][lox - begx] - original->a[y][x]; difb = tmp1->b[loy - begy][lox - begx] - original->b[y][x]; - transformed->L[y][x] = original->L[y][x] + difL * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + difL * kch * fach); - transformed->a[y][x] = original->a[y][x] + difa * kch * fach * falu;//same as Luma - transformed->b[y][x] = original->b[y][x] + difb * kch * fach * falu;//same as Luma + transformed->a[y][x] = CLIPC(original->a[y][x] + difa * kch * fach * falu);//same as Luma + transformed->b[y][x] = CLIPC(original->b[y][x] + difb * kch * fach * falu);//same as Luma } } @@ -3345,11 +3345,11 @@ void ImProcFunctions::BlurNoise_Local(float moddE, float powdE, int call, LabIma difL *= kch * fach; if (lp.blurmet == 0) { - transformed->L[y][x] = original->L[y][x] + difL; + transformed->L[y][x] = CLIP(original->L[y][x] + difL); } if (lp.blurmet == 2) { - transformed->L[y][x] = tmp2->L[y][x] - difL; + transformed->L[y][x] = CLIP(tmp2->L[y][x] - difL); } if (!lp.actsp) { @@ -3390,11 +3390,11 @@ void ImProcFunctions::BlurNoise_Local(float moddE, float powdE, int call, LabIma difL *= kch * fach; if (lp.blurmet == 0) { - transformed->L[y][x] = original->L[y][x] + difL; + transformed->L[y][x] = CLIP(original->L[y][x] + difL); } if (lp.blurmet == 2) { - transformed->L[y][x] = tmp2->L[y][x] - difL; + transformed->L[y][x] = CLIP(tmp2->L[y][x] - difL); } if (!lp.actsp) { @@ -3449,13 +3449,13 @@ void ImProcFunctions::InverseReti_Local(const struct local_params & lp, LabImage switch (zone) { case 0: { // outside selection and outside transition zone => full effect, no transition if (chro == 0) { - transformed->L[y][x] = tmp1->L[y][x]; + transformed->L[y][x] = CLIP(tmp1->L[y][x]); } if (chro == 1) { - transformed->a[y][x] = tmp1->a[y][x]; - transformed->b[y][x] = tmp1->b[y][x]; + transformed->a[y][x] = CLIPC(tmp1->a[y][x]); + transformed->b[y][x] = CLIPC(tmp1->b[y][x]); } break; @@ -3467,7 +3467,7 @@ void ImProcFunctions::InverseReti_Local(const struct local_params & lp, LabImage if (chro == 0) { float difL = tmp1->L[y][x] - original->L[y][x]; difL *= factorx; - transformed->L[y][x] = original->L[y][x] + difL; + transformed->L[y][x] = CLIP(original->L[y][x] + difL); } if (chro == 1) { @@ -3477,8 +3477,8 @@ void ImProcFunctions::InverseReti_Local(const struct local_params & lp, LabImage difa *= factorx; difb *= factorx; - transformed->a[y][x] = original->a[y][x] + difa; - transformed->b[y][x] = original->b[y][x] + difb; + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); } break; @@ -3913,7 +3913,7 @@ void ImProcFunctions::Reti_Local(float moddE, float powdE, float **buflight, flo float diflc = lightc * fli - original->L[y][x]; diflc *= kch * fach; diflc *= factorx; - transformed->L[y][x] = original->L[y][x] + diflc; + transformed->L[y][x] = CLIP(original->L[y][x] + diflc); } if (chro == 1) { @@ -3930,8 +3930,8 @@ void ImProcFunctions::Reti_Local(float moddE, float powdE, float **buflight, flo difb *= factorx; difa *= kch * fach; difb *= kch * fach; - transformed->a[y][x] = original->a[y][x] + difa; - transformed->b[y][x] = original->b[y][x] + difb; + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); } break; @@ -3944,7 +3944,7 @@ void ImProcFunctions::Reti_Local(float moddE, float powdE, float **buflight, flo fli = ((100.f + realstr * falL) / 100.f); float diflc = lightc * fli - original->L[y][x]; diflc *= kch * fach; - transformed->L[y][x] = original->L[y][x] + diflc; + transformed->L[y][x] = CLIP(original->L[y][x] + diflc); } if (chro == 1) { @@ -3959,8 +3959,8 @@ void ImProcFunctions::Reti_Local(float moddE, float powdE, float **buflight, flo float difb = chrb * flib - original->b[y][x]; difa *= kch * fach; difb *= kch * fach; - transformed->a[y][x] = original->a[y][x] + difa; - transformed->b[y][x] = original->b[y][x] + difb; + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); } } } @@ -3998,11 +3998,11 @@ void ImProcFunctions::InverseBlurNoise_Local(const struct local_params & lp, Lab switch (zone) { case 0: { // outside selection and outside transition zone => full effect, no transition - transformed->L[y][x] = tmp1->L[y][x]; + transformed->L[y][x] = CLIP(tmp1->L[y][x]); if (!lp.actsp) { - transformed->a[y][x] = tmp1->a[y][x]; - transformed->b[y][x] = tmp1->b[y][x]; + transformed->a[y][x] = CLIPC(tmp1->a[y][x]); + transformed->b[y][x] = CLIPC(tmp1->b[y][x]); } break; @@ -4018,12 +4018,12 @@ void ImProcFunctions::InverseBlurNoise_Local(const struct local_params & lp, Lab difa *= factorx; difb *= factorx; - transformed->L[y][x] = original->L[y][x] + difL; + transformed->L[y][x] = CLIP(original->L[y][x] + difL); if (!lp.actsp) { - transformed->a[y][x] = original->a[y][x] + difa; - transformed->b[y][x] = original->b[y][x] + difb; + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); } break; @@ -4275,7 +4275,7 @@ void ImProcFunctions::InverseSharp_Local(float **loctemp, const float hueplus, c switch (zone) { case 0: { // outside selection and outside transition zone => full effect, no transition float difL = loctemp[y][x] - original->L[y][x]; - transformed->L[y][x] = original->L[y][x] + difL * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + difL * kch * fach); break; } @@ -4286,7 +4286,7 @@ void ImProcFunctions::InverseSharp_Local(float **loctemp, const float hueplus, c float factorx = 1.f - localFactor; difL *= factorx; - transformed->L[y][x] = original->L[y][x] + difL * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + difL * kch * fach); break; } @@ -4536,7 +4536,7 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, cons } difL *= factorx; - transformed->L[y][x] = original->L[y][x] + difL * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + difL * kch * fach); break; } @@ -4550,7 +4550,7 @@ void ImProcFunctions::Sharp_Local(int call, float **loctemp, int senstype, cons difL = loctemp[y][x] - original->L[y][x]; } - transformed->L[y][x] = original->L[y][x] + difL * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + difL * kch * fach); } } } @@ -4986,7 +4986,7 @@ void ImProcFunctions::Exclude_Local(float moddE, float powdE, int sen, float **d if (deltaso[loy - begy][lox - begx] == 0.f) { transformed->L[y][x] = original->L[y][x]; //orsv->L[loy - begy][lox - begx]; } else { - transformed->L[y][x] = original->L[y][x] + difL; + transformed->L[y][x] = CLIP(original->L[y][x] + difL); } float difa, difb; @@ -5021,7 +5021,7 @@ void ImProcFunctions::Exclude_Local(float moddE, float powdE, int sen, float **d // printf ("0"); transformed->L[y][x] = original->L[y][x]; //rsv->L[loy - begy][lox - begx]; } else { - transformed->L[y][x] = original->L[y][x] + difL; + transformed->L[y][x] = CLIP(original->L[y][x] + difL); } // transformed->L[y][x] = original->L[y][x] + difL; @@ -5584,7 +5584,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float diflc = lightc * fli - original->L[y][x]; diflc *= kch; diflc *= factorx; - transformed->L[y][x] = original->L[y][x] + diflc; + transformed->L[y][x] = CLIP(original->L[y][x] + diflc); float flia = 1.f; float flib = 1.f; @@ -5604,13 +5604,13 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La difb *= factorx; difa *= kch * fach; difb *= kch * fach; - transformed->a[y][x] = original->a[y][x] + difa; - transformed->b[y][x] = original->b[y][x] + difb; + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { - transformed->L[y][x] = 12000.f + diflc; - transformed->a[y][x] = difa; - transformed->b[y][x] = difb; + transformed->L[y][x] = CLIP(12000.f + diflc); + transformed->a[y][x] = CLIPC(difa); + transformed->b[y][x] = CLIPC(difb); } break; @@ -5623,7 +5623,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La fli = ((100.f + realstr * falL) / 100.f); //luma transition float diflc = lightc * fli - original->L[y][x]; diflc *= kch; - transformed->L[y][x] = original->L[y][x] + diflc; + transformed->L[y][x] = CLIP(original->L[y][x] + diflc); float flia = 1.f; @@ -5642,13 +5642,13 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float difb = chrb * flib - original->b[y][x]; difa *= kch * fach; difb *= kch * fach; - transformed->a[y][x] = original->a[y][x] + difa; - transformed->b[y][x] = original->b[y][x] + difb; + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { - transformed->L[y][x] = 12000.f + diflc; - transformed->a[y][x] = difa; - transformed->b[y][x] = difb; + transformed->L[y][x] = CLIP(12000.f + diflc); + transformed->a[y][x] = CLIPC(difa); + transformed->b[y][x] = CLIPC(difb); } } } @@ -6441,10 +6441,10 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm diflc *= kch ; diflc *= factorx; //transition lightness - transformed->L[y][x] = CLIPLOC((original->L[y][x] + diflc)); + transformed->L[y][x] = CLIP((original->L[y][x] + diflc)); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { - transformed->L[y][x] = 12000.f + diflc; //CLIPL((original->L[y][x] + diflc)); + transformed->L[y][x] = CLIP(12000.f + diflc); //CLIPL((original->L[y][x] + diflc)); } if (lochhCurve && lp.qualcurvemet >= 1 && HHutili) { @@ -6478,8 +6478,8 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm transformed->b[y][x] = CLIPC(chromhr * sincosval.x * fac); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { - transformed->a[y][x] = chromhr * sincosval.y * (fac - 1.f) ; - transformed->b[y][x] = chromhr * sincosval.x * (fac - 1.f); + transformed->a[y][x] = CLIPC(chromhr * sincosval.y * (fac - 1.f)) ; + transformed->b[y][x] = CLIPC(chromhr * sincosval.x * (fac - 1.f)); } } else { @@ -6487,8 +6487,8 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm transformed->b[y][x] = CLIPC(original->b[y][x] * fac); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { - transformed->a[y][x] = original->a[y][x] * (fac - 1.f) ; - transformed->b[y][x] = original->b[y][x] * (fac - 1.f); + transformed->a[y][x] = CLIPC(original->a[y][x] * (fac - 1.f)) ; + transformed->b[y][x] = CLIPC(original->b[y][x] * (fac - 1.f)); } } @@ -6571,10 +6571,10 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm kdiff *= fach * kch; diflc *= kdiff ; diflc *= kch ; - transformed->L[y][x] = CLIPLOC((original->L[y][x] + diflc)); + transformed->L[y][x] = CLIP((original->L[y][x] + diflc)); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { - transformed->L[y][x] = 12000.f + diflc; //CLIPL((original->L[y][x] + diflc)); + transformed->L[y][x] = CLIP(12000.f + diflc); //CLIPL((original->L[y][x] + diflc)); } @@ -6608,8 +6608,8 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm transformed->b[y][x] = CLIPC(chromhr * sincosval.x * fac); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { - transformed->a[y][x] = chromhr * sincosval.y * (fac - 1.f) ; - transformed->b[y][x] = chromhr * sincosval.x * (fac - 1.f); + transformed->a[y][x] = CLIPC(chromhr * sincosval.y * (fac - 1.f)) ; + transformed->b[y][x] = CLIPC(chromhr * sincosval.x * (fac - 1.f)); } } else { @@ -6617,8 +6617,8 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm transformed->b[y][x] = CLIPC(original->b[y][x] * fac); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { - transformed->a[y][x] = original->a[y][x] * (fac - 1.f) ; - transformed->b[y][x] = original->b[y][x] * (fac - 1.f); + transformed->a[y][x] = CLIPC(original->a[y][x] * (fac - 1.f)) ; + transformed->b[y][x] = CLIPC(original->b[y][x] * (fac - 1.f)); } } @@ -7057,7 +7057,7 @@ void ImProcFunctions::InverseColorLight_Local(const struct local_params & lp, LU diflc *= kdiff ; diflc *= factorx; //transition lightness - transformed->L[y][x] = CLIPLOC(1.f * (original->L[y][x] + diflc)); + transformed->L[y][x] = CLIP(1.f * (original->L[y][x] + diflc)); transformed->a[y][x] = CLIPC(original->a[y][x] * fac) ; transformed->b[y][x] = CLIPC(original->b[y][x] * fac); @@ -7074,9 +7074,9 @@ void ImProcFunctions::InverseColorLight_Local(const struct local_params & lp, LU float diflc = lightcont - original->L[y][x]; diflc *= factorx; - transformed->L[y][x] = original->L[y][x] + diflc; - transformed->a[y][x] = original->a[y][x] * fac; - transformed->b[y][x] = original->b[y][x] * fac; + transformed->L[y][x] = CLIP(original->L[y][x] + diflc); + transformed->a[y][x] = CLIPC(original->a[y][x] * fac); + transformed->b[y][x] = CLIPC(original->b[y][x] * fac); } @@ -7108,7 +7108,7 @@ void ImProcFunctions::InverseColorLight_Local(const struct local_params & lp, LU kdiff *= fach * kch; diflc *= kdiff ; - transformed->L[y][x] = CLIPLOC(1.f * (original->L[y][x] + diflc)); + transformed->L[y][x] = CLIP(1.f * (original->L[y][x] + diflc)); transformed->a[y][x] = CLIPC(original->a[y][x] * fac) ; transformed->b[y][x] = CLIPC(original->b[y][x] * fac); @@ -7120,9 +7120,9 @@ void ImProcFunctions::InverseColorLight_Local(const struct local_params & lp, LU } float lightcont = lumnew ; - transformed->L[y][x] = lightcont; - transformed->a[y][x] = original->a[y][x] * facc; - transformed->b[y][x] = original->b[y][x] * facc; + transformed->L[y][x] = CLIP(lightcont); + transformed->a[y][x] = CLIPC(original->a[y][x] * facc); + transformed->b[y][x] = CLIPC(original->b[y][x] * facc); } } From 0bbac490ca56082b1a0cb478c2071e81970c4cd7 Mon Sep 17 00:00:00 2001 From: Desmis Date: Mon, 21 Jan 2019 17:45:55 +0100 Subject: [PATCH 19/23] Provisory work with new lago for exposure --- rtdata/languages/default | 2 + rtengine/curves.cc | 2 - rtengine/improccoordinator.cc | 2 +- rtengine/iplocallab.cc | 189 ++++++++++++++++++++++++---------- rtengine/procevents.h | 1 + rtengine/procparams.cc | 6 +- rtengine/procparams.h | 1 + rtengine/refreshmap.cc | 3 +- rtgui/locallab.cc | 26 ++++- rtgui/locallab.h | 1 + rtgui/paramsedited.cc | 7 ++ rtgui/paramsedited.h | 1 + 12 files changed, 178 insertions(+), 63 deletions(-) diff --git a/rtdata/languages/default b/rtdata/languages/default index eec87448c..09f69f1b1 100644 --- a/rtdata/languages/default +++ b/rtdata/languages/default @@ -869,6 +869,7 @@ HISTORY_MSG_613;Local - Exp Structure HISTORY_MSG_614;Local - Exp Mask H HISTORY_MSG_615;Local - Blend color HISTORY_MSG_616;Local - Blend Exp +HISTORY_MSG_617;Local - Blur Exp HISTORY_MSG_CLAMPOOG;Clip out-of-gamut colors HISTORY_MSG_COLORTONING_LABGRID_VALUE;CT - Color correction HISTORY_MSG_COLORTONING_LABREGION_AB;CT - Color correction @@ -1940,6 +1941,7 @@ TP_LOCALLAB_BILATERAL;Bilateral filter TP_LOCALLAB_BLENDMASKCOL;Blend TP_LOCALLAB_BLMETHOD_TOOLTIP;Normal - direct blur and noise with all settings.\nInverse - Inverse blur and noise without scope and whithout enhanced algorithm.\nSymmetric - inverse blur and noise with all settings. Be careful some results may be curious TP_LOCALLAB_BLUFR;Blur & Noise +TP_LOCALLAB_BLURDE;Blur Shape detection TP_LOCALLAB_BLNORM;Normal TP_LOCALLAB_BLINV;Inverse TP_LOCALLAB_BLSYM;Symmetric diff --git a/rtengine/curves.cc b/rtengine/curves.cc index 722b98ccd..7d6f95bdb 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -1621,8 +1621,6 @@ void LocHHmaskexpCurve::Set(const std::vector &curvePoints) - - LocLLmaskexpCurve::LocLLmaskexpCurve() : sum(0.f) {}; void LocLLmaskexpCurve::Reset() diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index be1896b0a..3beb789e7 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -813,7 +813,7 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) ipf.calc_ref(sp, nprevl, nprevl, 0, 0, pW, pH, scale, huerefblu, huere, chromare, lumare, sobelre, lhist16loc, avg); } - printf("improc avg=%f\n", avg); +// printf("improc avg=%f\n", avg); huerblu = huerefblurs[sp] = huerefblu; huer = huerefs[sp] = huere; chromar = chromarefs[sp] = chromare; diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index f6a28b871..872f23e64 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -161,6 +161,7 @@ struct local_params { float blendmacol; float blendmaexp; float struexp; + float blurexp; float ligh; int shamo, shdamp, shiter, senssha, sensv; float neig; @@ -478,6 +479,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall float blendmaskcolor = ((float) locallab.spots.at(sp).blendmaskcol) / 100.f ; float blendmaskexpo = ((float) locallab.spots.at(sp).blendmaskexp) / 100.f ; float structexpo = (float) locallab.spots.at(sp).structexp; + float blurexpo = (float) locallab.spots.at(sp).blurexpde; int local_transit = locallab.spots.at(sp).transit; double radius = (double) locallab.spots.at(sp).radius; double sharradius = ((double) locallab.spots.at(sp).sharradius) / 100. ; @@ -516,6 +518,7 @@ static void calcLocalParams(int sp, int oW, int oH, const LocallabParams& locall lp.blendmacol = blendmaskcolor; lp.blendmaexp = blendmaskexpo; lp.struexp = structexpo; + lp.blurexp = blurexpo; lp.sens = local_sensi; lp.sensh = local_sensih; lp.dehaze = local_dehaze; @@ -5137,7 +5140,8 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La origblur = new LabImage(GW, GH); LabImage *origblurmask = nullptr; - float radius = 3.f / sk; + float radius = (2.f + 0.2f * lp.blurexp) / sk; + bool usemask = (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) && senstype == 1; if (usemask) @@ -5525,33 +5529,35 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La if (hueref < -1.1f && hueref > -2.8f) { // detect blue sky if (chromaref > 0.f && chromaref < 35.f * multchro) { // detect blue sky if ((rhue > -2.79f && rhue < -1.11f) && (rchro < 35.f * multchro)) { - realstr *= 0.9f; + cli *= 0.9f; } else { - realstr = 1.f; + // cli = 1.f; } } } else { - realstr = cli; + //realstr = cli; } if (varsens < 50.f) { //&& lp.chro > 0.f if (hueref > -0.1f && hueref < 1.6f) { // detect skin if (chromaref > 0.f && chromaref < 55.f * multchroskin) { // detect skin if ((rhue > -0.09f && rhue < 1.59f) && (rchro < 55.f * multchroskin)) { - realstr *= 0.7f; + cli *= 0.7f; } else { - realstr = 1.f; + // realstr = 1.f; } } } else { - realstr = cli; + // realstr = cli; } } } } + float kcr = 100.f * lp.thr; + float falL = 1.f; if (rchro < kcr && chromaref > kcr) { // reduce artifacts in grey tones near hue spot and improve algorithm @@ -5564,6 +5570,32 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La fach = 1.f; } + + float reducdE = 0.f; + float mindE = 2.f + 0.05f * varsens;//between 2 and 7 + float maxdE = 5.f + 1.5f * varsens; // between 5 and 150, we can chnage this values + + float ar = 1.f / (mindE - maxdE); + + float br = - ar * maxdE; + + if (dE > maxdE) { + reducdE = 0.f; + } + + if (dE > mindE && dE <= maxdE) { + reducdE = ar * dE + br; + } + + if (dE <= mindE) { + reducdE = 1.f; + } + + float realstrdE = reducdE * cli; + float realstradE = reducdE * cla; + float realstrbdE = reducdE * clb; + float realstrchdE = reducdE * clc; + if (rL > 0.1f) { //to avoid crash with very low gamut in rare cases ex : L=0.01 a=0.5 b=-0.9 @@ -5582,9 +5614,19 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float fli = 1.f; fli = ((100.f + realstr * falL) / 100.f); float diflc = lightc * fli - original->L[y][x]; - diflc *= kch; + diflc *= (kch * fach); diflc *= factorx; - transformed->L[y][x] = CLIP(original->L[y][x] + diflc); + + if (varsens < 0.f) { + transformed->L[y][x] = CLIP(original->L[y][x] + diflc); + } else { + transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * factorx * realstrdE * kch * fach); + diflc = 328.f * factorx * realstrdE * kch * fach; + } + + if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { + transformed->L[y][x] = CLIP(12000.f + diflc); + } float flia = 1.f; float flib = 1.f; @@ -5600,15 +5642,25 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float difa = chra * flia - original->a[y][x]; float difb = chrb * flib - original->b[y][x]; - difa *= factorx; - difb *= factorx; - difa *= kch * fach; - difb *= kch * fach; - transformed->a[y][x] = CLIPC(original->a[y][x] + difa); - transformed->b[y][x] = CLIPC(original->b[y][x] + difb); + difa *= (kch * factorx * fach); + difb *= (kch * factorx * fach); + + if (varsens < 0.f) { + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); + } else { + if (senstype != 1) { + // transformed->a[y][x] = CLIPC(original->a[y][x] + 328.f * factorx * realstrchdE * kch * fach); + // transformed->b[y][x] = CLIPC(original->b[y][x] + 328.f * factorx * realstrchdE * kch * fach); + } else { + transformed->a[y][x] = CLIPC(original->a[y][x] + 328.f * factorx * realstradE * kch * fach); + transformed->b[y][x] = CLIPC(original->b[y][x] + 328.f * factorx * realstrbdE * kch * fach); + difa = 328.f * factorx * realstradE * kch * fach; + difb = 328.f * factorx * realstrbdE * kch * fach; + } + } if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { - transformed->L[y][x] = CLIP(12000.f + diflc); transformed->a[y][x] = CLIPC(difa); transformed->b[y][x] = CLIPC(difb); } @@ -5622,10 +5674,20 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float fli = 1.f; fli = ((100.f + realstr * falL) / 100.f); //luma transition float diflc = lightc * fli - original->L[y][x]; - diflc *= kch; - transformed->L[y][x] = CLIP(original->L[y][x] + diflc); + diflc *= (kch * fach); + if (varsens < 0.f) { + transformed->L[y][x] = CLIP(original->L[y][x] + diflc); + } else { + transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * realstrdE * kch * fach); + diflc = 328.f * realstrdE * kch * fach; + } + + if (lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) { + transformed->L[y][x] = CLIP(12000.f + diflc); + } + float flia = 1.f; float flib = 1.f; float chra = bufexporig->a[loy - begy][lox - begx]; @@ -5636,27 +5698,39 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } else { flia = ((100.f + realstra * falu * falL) / 100.f); flib = ((100.f + realstrb * falu * falL) / 100.f); - } - float difa = chra * flia - original->a[y][x]; - float difb = chrb * flib - original->b[y][x]; - difa *= kch * fach; - difb *= kch * fach; - transformed->a[y][x] = CLIPC(original->a[y][x] + difa); - transformed->b[y][x] = CLIPC(original->b[y][x] + difb); + float difa = chra * flia - original->a[y][x]; + float difb = chrb * flib - original->b[y][x]; + difa *= kch * fach; + difb *= kch * fach; - if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { - transformed->L[y][x] = CLIP(12000.f + diflc); - transformed->a[y][x] = CLIPC(difa); - transformed->b[y][x] = CLIPC(difb); + + if (varsens < 0.f) { + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); + } else { + if (senstype != 1) { + transformed->a[y][x] = CLIPC(original->a[y][x] + 328.f * realstrchdE * kch * fach); + transformed->b[y][x] = CLIPC(original->b[y][x] + 328.f * realstrchdE * kch * fach); + } else { + transformed->a[y][x] = CLIPC(original->a[y][x] + 328.f * realstradE * kch * fach); + transformed->b[y][x] = CLIPC(original->b[y][x] + 328.f * realstrbdE * kch * fach); + difa = 328.f * realstradE * kch * fach; + difb = 328.f * realstrbdE * kch * fach; + } + } + + if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { + transformed->a[y][x] = CLIPC(difa); + transformed->b[y][x] = CLIPC(difb); + } } } + + } - - } - } } @@ -5706,7 +5780,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabImage * bufcolorig, LabImage * originalmask, float ** buflight, float ** bufchro, float ** bufchroslid, float ** bufhh, float ** buflightslid, bool &LHutili, bool &HHutili, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, LUTf & lightCurveloc, const local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) { BENCHFUN -// chroma and lightness +// chroma and lightnesse const float ach = (float)lp.trans / 100.f; //chroma @@ -6353,6 +6427,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm sincosval.y = 1.f; sincosval.x = 0.0f; float ddhue = 0.f; +// printf("kch=%f ", kch); if (rL > th_r) { //to avoid crash with very low gamut in rare cases ex : L=0.01 a=0.5 b=-0.9 switch (zone) { @@ -7159,8 +7234,9 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform nc2++; } } + avg2 /= 32768.f; - avg = avg2/nc2; + avg = avg2 / nc2; // printf("calc avg=%f \n", avg); //claculate histogram for area selected #ifdef _OPENMP @@ -10273,6 +10349,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o // buforigchro[loy - begy][lox - begx] = sqrt(SQR(original->a[y][x]) + SQR(original->b[y][x])); } } + const float radius = 3.f / (sk * 1.4f); int spotSi = 1 + 2 * max(1, lp.cir / sk); @@ -10485,13 +10562,15 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if (zone > 0) { - bufcolorig->L[loy - begy][lox - begx] += CLIPLOC(lp.blendmacol * bufmaskorig->L[loy - begy][lox - begx]); + + bufcolorig->L[loy - begy][lox - begx] += CLIP(lp.blendmacol * bufmaskorig->L[loy - begy][lox - begx]); bufcolorig->a[loy - begy][lox - begx] += CLIPC(lp.blendmacol * bufmaskorig->a[loy - begy][lox - begx]); bufcolorig->b[loy - begy][lox - begx] += CLIPC(lp.blendmacol * bufmaskorig->b[loy - begy][lox - begx]); - originalmask->L[y][x] = CLIPLOC(bufcolorig->L[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); + originalmask->L[y][x] = CLIP(bufcolorig->L[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); originalmask->a[y][x] = CLIPC(bufcolorig->a[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); - originalmask->b[y][x] = CLIPC(bufcolorig->L[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); + originalmask->b[y][x] = CLIPC(bufcolorig->b[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); + } } } @@ -10863,11 +10942,11 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufmaskblur->a[loy - begy][lox - begx] = original->a[y][x]; bufmaskblur->b[loy - begy][lox - begx] = original->b[y][x]; - float valLL = 0.f; + float valLLexp = 0.f; float valCC = 0.f; float valHH = 0.f; float2 sincosval; - float kmaskL = 0; + float kmaskLexp = 0; float kmaskCa = 0; float kmaskCb = 0; @@ -10879,9 +10958,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { if (locllmasexpCurve) { - valLL = (float)(locllmasexpCurve[500.f * (bufexporig->L[loy - begy][lox - begx]) / 32768.f]); - valLL = 1.f - valLL; - kmaskL = 32768.f * valLL; + valLLexp = (float)(locllmasexpCurve[500.f * (bufexporig->L[loy - begy][lox - begx]) / 32768.f]); + valLLexp = 1.f - valLLexp; + kmaskLexp = 32768.f * valLLexp; } if (locccmasexpCurve) { @@ -10895,6 +10974,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o kmaskCb = 45000.f * valCC * sincosval.x; } + if (lochhmasexpCurve) { float huema = xatan2f(bufexporig->b[loy - begy][lox - begx], bufexporig->a[loy - begy][lox - begx]); float h = Color::huelab_to_huehsv2(huema); @@ -10914,7 +10994,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o kmaskHL = 32768.f * valHH; } - bufmaskblur->L[loy - begy][lox - begx] = CLIPLOC(kmaskL + kmaskHL); + bufmaskblur->L[loy - begy][lox - begx] = CLIP(kmaskLexp + kmaskHL); bufmaskblur->a[loy - begy][lox - begx] = CLIPC(kmaskCa + kmaskHa); bufmaskblur->b[loy - begy][lox - begx] = CLIPC(kmaskCb + kmaskHb); @@ -10945,7 +11025,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3) { #ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) +// #pragma omp parallel for schedule(dynamic,16) #endif for (int y = 0; y < transformed->H ; y++) //{ @@ -10965,13 +11045,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if (zone > 0) { - bufexporig->L[loy - begy][lox - begx] += CLIPLOC(lp.blendmaexp * bufmaskorig->L[loy - begy][lox - begx]); + + bufexporig->L[loy - begy][lox - begx] += CLIP(lp.blendmaexp * bufmaskorig->L[loy - begy][lox - begx]); bufexporig->a[loy - begy][lox - begx] += CLIPC(lp.blendmaexp * bufmaskorig->a[loy - begy][lox - begx]); bufexporig->b[loy - begy][lox - begx] += CLIPC(lp.blendmaexp * bufmaskorig->b[loy - begy][lox - begx]); - bufexporig->L[loy - begy][lox - begx] = CLIPLOC(bufexporig->L[loy - begy][lox - begx]); - originalmask->L[y][x] = CLIPLOC(bufexporig->L[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); + + originalmask->L[y][x] = CLIP(bufexporig->L[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); originalmask->a[y][x] = CLIPC(bufexporig->a[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); - originalmask->b[y][x] = CLIPC(bufexporig->L[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); + originalmask->b[y][x] = CLIPC(bufexporig->b[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); } } @@ -11021,12 +11102,12 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - bufexptemp->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas - bufexptemp->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas - bufexptemp->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas - bufexpfin->L[loy - begy][lox - begx] = original->L[y][x];//fill square buffer with datas - bufexpfin->a[loy - begy][lox - begx] = original->a[y][x];//fill square buffer with datas - bufexpfin->b[loy - begy][lox - begx] = original->b[y][x];//fill square buffer with datas + bufexptemp->L[loy - begy][lox - begx] = original->L[y][x]; + bufexptemp->a[loy - begy][lox - begx] = original->a[y][x]; + bufexptemp->b[loy - begy][lox - begx] = original->b[y][x]; + bufexpfin->L[loy - begy][lox - begx] = original->L[y][x]; + bufexpfin->a[loy - begy][lox - begx] = original->a[y][x]; + bufexpfin->b[loy - begy][lox - begx] = original->b[y][x]; } } diff --git a/rtengine/procevents.h b/rtengine/procevents.h index c13f2745e..f863fef9a 100644 --- a/rtengine/procevents.h +++ b/rtengine/procevents.h @@ -643,6 +643,7 @@ enum ProcEventCode { EvlocallabHHmaskexpshape = 613, Evlocallabblendmaskcol = 614, Evlocallabblendmaskexp = 615, + Evlocallabblurexpde = 616, NUMOFEVENTS }; diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 04f960609..961d70487 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2382,8 +2382,9 @@ LocallabParams::LocallabSpot::LocallabSpot() : black(0), shcompr(50), warm(0), - sensiex(19), + sensiex(15), structexp(0), + blurexpde(5), excurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, showmaskexpMethod("none"), CCmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, @@ -2525,6 +2526,7 @@ bool LocallabParams::LocallabSpot::operator ==(const LocallabSpot& other) const && warm == other.warm && sensiex == other.sensiex && structexp == other.structexp + && blurexpde == other.blurexpde && excurve == other.excurve && showmaskexpMethod == other.showmaskexpMethod && CCmaskexpcurve == other.CCmaskexpcurve @@ -3618,6 +3620,7 @@ int ProcParams::save(const Glib::ustring& fname, const Glib::ustring& fname2, bo saveToKeyfile(!pedited || pedited->locallab.spots.at(i).warm, "Locallab", "Warm_" + std::to_string(i), spot.warm, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).sensiex, "Locallab", "Sensiex_" + std::to_string(i), spot.sensiex, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).structexp, "Locallab", "Structexp_" + std::to_string(i), spot.structexp, keyFile); + saveToKeyfile(!pedited || pedited->locallab.spots.at(i).blurexpde, "Locallab", "Blurexpde_" + std::to_string(i), spot.blurexpde, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).excurve, "Locallab", "ExCurve_" + std::to_string(i), spot.excurve, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).showmaskexpMethod, "Locallab", "ShowmaskexpMethod_" + std::to_string(i), spot.showmaskexpMethod, keyFile); saveToKeyfile(!pedited || pedited->locallab.spots.at(i).CCmaskexpcurve, "Locallab", "CCmaskexpCurve_" + std::to_string(i), spot.CCmaskexpcurve, keyFile); @@ -4838,6 +4841,7 @@ int ProcParams::load(const Glib::ustring& fname, ParamsEdited* pedited) assignFromKeyfile(keyFile, "Locallab", "Warm_" + std::to_string(i), pedited, spot.warm, spotEdited.warm); assignFromKeyfile(keyFile, "Locallab", "Sensiex_" + std::to_string(i), pedited, spot.sensiex, spotEdited.sensiex); assignFromKeyfile(keyFile, "Locallab", "Structexp_" + std::to_string(i), pedited, spot.structexp, spotEdited.structexp); + assignFromKeyfile(keyFile, "Locallab", "Blurexpde_" + std::to_string(i), pedited, spot.blurexpde, spotEdited.blurexpde); assignFromKeyfile(keyFile, "Locallab", "ExCurve_" + std::to_string(i), pedited, spot.excurve, spotEdited.excurve); assignFromKeyfile(keyFile, "Locallab", "ShowmaskexpMethod_" + std::to_string(i), pedited, spot.showmaskexpMethod, spotEdited.showmaskexpMethod); assignFromKeyfile(keyFile, "Locallab", "CCmaskexpCurve_" + std::to_string(i), pedited, spot.CCmaskexpcurve, spotEdited.CCmaskexpcurve); diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 0da62de5c..0941d2549 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -981,6 +981,7 @@ struct LocallabParams { int warm; int sensiex; int structexp; + int blurexpde; std::vector excurve; Glib::ustring showmaskexpMethod; std::vector CCmaskexpcurve; diff --git a/rtengine/refreshmap.cc b/rtengine/refreshmap.cc index d52933343..354900818 100644 --- a/rtengine/refreshmap.cc +++ b/rtengine/refreshmap.cc @@ -642,7 +642,8 @@ int refreshmap[rtengine::NUMOFEVENTS] = { LUMINANCECURVE, //Evlocallabstructexp LUMINANCECURVE, //EvlocallabHHmaskexpshape LUMINANCECURVE, //Evlocallabblendmaskcol - LUMINANCECURVE //Evlocallabblendmaskexp + LUMINANCECURVE, //Evlocallabblendmaskexp + LUMINANCECURVE //Evlocallabblurexpde }; diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index c73fd1658..728973a39 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -77,17 +77,18 @@ Locallab::Locallab(): chroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMA"), -100, 150, 1, 0))), sensi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), structcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), - blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -150, 100, 1, -100))), + blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -200, 100, 1, -100))), // Exposure - expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -200, 800, 5, 0))), + expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -200, 400, 5, 0))), hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 60))), hlcomprthresh(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTSTHRESHOLD"), 0, 100, 1, 33))), black(Gtk::manage(new Adjuster(M("TP_EXPOSURE_BLACKLEVEL"), -16384, 32768, 50, 0))), shcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRSHADOWS"), 0, 100, 1, 50))), warm(Gtk::manage(new Adjuster(M("TP_LOCALLAB_WARM"), -100., 100., 1., 0., Gtk::manage(new RTImage("circle-blue-small.png")), Gtk::manage(new RTImage("circle-orange-small.png"))))), - sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), + sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), - blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -150, 100, 1, -100))), + blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), + blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -200, 100, 1, -100))), // Vibrance saturated(Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.))), pastels(Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.))), @@ -378,6 +379,7 @@ Locallab::Locallab(): sensiex->set_tooltip_text(M("TP_LOCALLAB_SENSI_TOOLTIP")); sensiex->setAdjusterListener(this); structexp->setAdjusterListener(this); + blurexpde->setAdjusterListener(this); blendmaskexp->setAdjusterListener(this); curveEditorG->setCurveListener(this); @@ -448,6 +450,7 @@ Locallab::Locallab(): exposeBox->pack_start(*warm); exposeBox->pack_start(*sensiex); exposeBox->pack_start(*structexp); + exposeBox->pack_start(*blurexpde); exposeBox->pack_start(*curveEditorG, Gtk::PACK_SHRINK, 4); // Padding is mandatory to correct behavior of curve editor exposeBox->pack_start(*maskexpFrame); @@ -1531,6 +1534,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pp->locallab.spots.at(pp->locallab.selspot).HHmaskcurve = HHmaskshape->getCurve(); pp->locallab.spots.at(pp->locallab.selspot).invers = invers->get_active(); pp->locallab.spots.at(pp->locallab.selspot).structexp = structexp->getIntValue(); + pp->locallab.spots.at(pp->locallab.selspot).blurexpde = blurexpde->getIntValue(); pp->locallab.spots.at(pp->locallab.selspot).blendmaskexp = blendmaskexp->getIntValue(); // Exposure pp->locallab.spots.at(pp->locallab.selspot).expexpose = expexpose->getEnabled(); @@ -1711,6 +1715,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pe->locallab.spots.at(pp->locallab.selspot).warm = pe->locallab.spots.at(pp->locallab.selspot).warm || warm->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).sensiex = pe->locallab.spots.at(pp->locallab.selspot).sensiex || sensiex->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).structexp = pe->locallab.spots.at(pp->locallab.selspot).structexp || structexp->getEditedState(); + pe->locallab.spots.at(pp->locallab.selspot).blurexpde = pe->locallab.spots.at(pp->locallab.selspot).blurexpde || blurexpde->getEditedState(); pe->locallab.spots.at(pp->locallab.selspot).excurve = pe->locallab.spots.at(pp->locallab.selspot).excurve || !shapeexpos->isUnChanged(); pe->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = pe->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod || showmaskexpMethod->get_active_text() != M("GENERAL_UNCHANGED"); pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pe->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); @@ -1856,6 +1861,7 @@ void Locallab::write(ProcParams* pp, ParamsEdited* pedited) pedited->locallab.spots.at(pp->locallab.selspot).warm = pedited->locallab.spots.at(pp->locallab.selspot).warm || warm->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).sensiex = pedited->locallab.spots.at(pp->locallab.selspot).sensiex || sensiex->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).structexp = pedited->locallab.spots.at(pp->locallab.selspot).structexp || structexp->getEditedState(); + pedited->locallab.spots.at(pp->locallab.selspot).blurexpde = pedited->locallab.spots.at(pp->locallab.selspot).blurexpde || blurexpde->getEditedState(); pedited->locallab.spots.at(pp->locallab.selspot).excurve = pedited->locallab.spots.at(pp->locallab.selspot).excurve || !shapeexpos->isUnChanged(); pedited->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod = pedited->locallab.spots.at(pp->locallab.selspot).showmaskexpMethod || showmaskexpMethod->get_active_text() != M("GENERAL_UNCHANGED"); pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve = pedited->locallab.spots.at(pp->locallab.selspot).CCmaskexpcurve || !CCmaskexpshape->isUnChanged(); @@ -2482,6 +2488,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe warm->setDefault((double)defSpot->warm); sensiex->setDefault((double)defSpot->sensiex); structexp->setDefault((double)defSpot->structexp); + blurexpde->setDefault((double)defSpot->blurexpde); blendmaskexp->setDefault((double)defSpot->blendmaskexp); // Vibrance saturated->setDefault((double)defSpot->saturated); @@ -2560,6 +2567,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe warm->setDefaultEditedState(Irrelevant); sensiex->setDefaultEditedState(Irrelevant); structexp->setDefaultEditedState(Irrelevant); + blurexpde->setDefaultEditedState(Irrelevant); blendmaskexp->setDefaultEditedState(Irrelevant); // Vibrance saturated->setDefaultEditedState(Irrelevant); @@ -2642,6 +2650,7 @@ void Locallab::setDefaults(const ProcParams * defParams, const ParamsEdited * pe warm->setDefaultEditedState(defSpotState->warm ? Edited : UnEdited); sensiex->setDefaultEditedState(defSpotState->sensiex ? Edited : UnEdited); structexp->setDefaultEditedState(defSpotState->structexp ? Edited : UnEdited); + blurexpde->setDefaultEditedState(defSpotState->blurexpde ? Edited : UnEdited); blendmaskexp->setDefaultEditedState(defSpotState->blendmaskexp ? Edited : UnEdited); // Vibrance saturated->setDefaultEditedState(defSpotState->saturated ? Edited : UnEdited); @@ -2842,6 +2851,12 @@ void Locallab::adjusterChanged(Adjuster * a, double newval) } } + if (a == blurexpde) { + if (listener) { + listener->panelChanged(Evlocallabblurexpde, blurexpde->getTextValue()); + } + } + if (a == blendmaskexp) { if (listener) { listener->panelChanged(Evlocallabblendmaskexp, blendmaskexp->getTextValue()); @@ -3244,6 +3259,7 @@ void Locallab::setBatchMode(bool batchMode) warm->showEditedCB(); sensiex->showEditedCB(); structexp->showEditedCB(); + blurexpde->showEditedCB(); blendmaskexp->showEditedCB(); // Vibrance saturated->showEditedCB(); @@ -3591,6 +3607,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con warm->setValue(pp->locallab.spots.at(index).warm); sensiex->setValue(pp->locallab.spots.at(index).sensiex); structexp->setValue(pp->locallab.spots.at(index).structexp); + blurexpde->setValue(pp->locallab.spots.at(index).blurexpde); shapeexpos->setCurve(pp->locallab.spots.at(index).excurve); if (pp->locallab.spots.at(index).showmaskexpMethod == "none") { showmaskexpMethod->set_active(0); @@ -3790,6 +3807,7 @@ void Locallab::updateLocallabGUI(const rtengine::procparams::ProcParams* pp, con shcompr->setEditedState(spotState->shcompr ? Edited : UnEdited); sensiex->setEditedState(spotState->sensiex ? Edited : UnEdited); structexp->setEditedState(spotState->structexp ? Edited : UnEdited); + blurexpde->setEditedState(spotState->blurexpde ? Edited : UnEdited); shapeexpos->setUnChanged(!spotState->excurve); if (!spotState->showmaskexpMethod) { showmaskexpMethod->set_active_text(M("GENERAL_UNCHANGED")); diff --git a/rtgui/locallab.h b/rtgui/locallab.h index 185b9544d..10afb24c1 100644 --- a/rtgui/locallab.h +++ b/rtgui/locallab.h @@ -105,6 +105,7 @@ private: Adjuster* const warm; Adjuster* const sensiex; Adjuster* const structexp; + Adjuster* const blurexpde; Adjuster* const blendmaskexp; // Vibrance Adjuster* const saturated; diff --git a/rtgui/paramsedited.cc b/rtgui/paramsedited.cc index 8c41192c2..b8dc98da3 100644 --- a/rtgui/paramsedited.cc +++ b/rtgui/paramsedited.cc @@ -970,6 +970,7 @@ void ParamsEdited::initFrom(const std::vector& locallab.spots.at(j).warm = locallab.spots.at(j).warm && pSpot.warm == otherSpot.warm; locallab.spots.at(j).sensiex = locallab.spots.at(j).sensiex && pSpot.sensiex == otherSpot.sensiex; locallab.spots.at(j).structexp = locallab.spots.at(j).structexp && pSpot.structexp == otherSpot.structexp; + locallab.spots.at(j).blurexpde = locallab.spots.at(j).blurexpde && pSpot.blurexpde == otherSpot.blurexpde; locallab.spots.at(j).excurve = locallab.spots.at(j).excurve && pSpot.excurve == otherSpot.excurve; locallab.spots.at(j).showmaskexpMethod = locallab.spots.at(j).showmaskexpMethod && pSpot.showmaskexpMethod == otherSpot.showmaskexpMethod; locallab.spots.at(j).CCmaskexpcurve = locallab.spots.at(j).CCmaskexpcurve && pSpot.CCmaskexpcurve == otherSpot.CCmaskexpcurve; @@ -2665,6 +2666,10 @@ void ParamsEdited::combine(rtengine::procparams::ProcParams& toEdit, const rteng toEdit.locallab.spots.at(i).structexp = mods.locallab.spots.at(i).structexp; } + if (locallab.spots.at(i).blurexpde) { + toEdit.locallab.spots.at(i).blurexpde = mods.locallab.spots.at(i).blurexpde; + } + if (locallab.spots.at(i).excurve) { toEdit.locallab.spots.at(i).excurve = mods.locallab.spots.at(i).excurve; } @@ -3962,6 +3967,7 @@ LocallabParamsEdited::LocallabSpotEdited::LocallabSpotEdited(bool v) : warm(v), sensiex(v), structexp(v), + blurexpde(v), excurve(v), showmaskexpMethod(v), CCmaskexpcurve(v), @@ -4099,6 +4105,7 @@ void LocallabParamsEdited::LocallabSpotEdited::set(bool v) warm = v; sensiex = v; structexp = v; + blurexpde = v; excurve = v; showmaskexpMethod = v; CCmaskexpcurve = v; diff --git a/rtgui/paramsedited.h b/rtgui/paramsedited.h index b3c0ef036..091083ea5 100644 --- a/rtgui/paramsedited.h +++ b/rtgui/paramsedited.h @@ -509,6 +509,7 @@ public: bool warm; bool sensiex; bool structexp; + bool blurexpde; bool excurve; bool showmaskexpMethod; bool CCmaskexpcurve; From 0702777046829d39b5acc13b644029e9d1f9f688 Mon Sep 17 00:00:00 2001 From: Desmis Date: Tue, 22 Jan 2019 08:47:33 +0100 Subject: [PATCH 20/23] First usable new algorithm for exposure --- rtengine/iplocallab.cc | 77 ++++++++++++++---------------------------- 1 file changed, 25 insertions(+), 52 deletions(-) diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 872f23e64..7bc477646 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -5620,8 +5620,8 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La if (varsens < 0.f) { transformed->L[y][x] = CLIP(original->L[y][x] + diflc); } else { - transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * factorx * realstrdE * kch * fach); - diflc = 328.f * factorx * realstrdE * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * factorx * realstrdE);//kch fach + diflc = 328.f * factorx * realstrdE; } if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { @@ -5634,31 +5634,19 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float chrb = bufexporig->b[loy - begy][lox - begx]; if (senstype != 1) { - flia = flib = ((100.f + realstrch * falu * falL) / 100.f); + flia = flib = ((100.f + realstrchdE) / 100.f); } else { - flia = ((100.f + realstra * falu * falL) / 100.f); - flib = ((100.f + realstrb * falu * falL) / 100.f); + flia = (100.f + realstradE) / 100.f; + flib = (100.f + realstrbdE) / 100.f; } float difa = chra * flia - original->a[y][x]; float difb = chrb * flib - original->b[y][x]; - difa *= (kch * factorx * fach); - difb *= (kch * factorx * fach); + difa *= factorx; + difb *= factorx; - if (varsens < 0.f) { - transformed->a[y][x] = CLIPC(original->a[y][x] + difa); - transformed->b[y][x] = CLIPC(original->b[y][x] + difb); - } else { - if (senstype != 1) { - // transformed->a[y][x] = CLIPC(original->a[y][x] + 328.f * factorx * realstrchdE * kch * fach); - // transformed->b[y][x] = CLIPC(original->b[y][x] + 328.f * factorx * realstrchdE * kch * fach); - } else { - transformed->a[y][x] = CLIPC(original->a[y][x] + 328.f * factorx * realstradE * kch * fach); - transformed->b[y][x] = CLIPC(original->b[y][x] + 328.f * factorx * realstrbdE * kch * fach); - difa = 328.f * factorx * realstradE * kch * fach; - difb = 328.f * factorx * realstrbdE * kch * fach; - } - } + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { transformed->a[y][x] = CLIPC(difa); @@ -5680,8 +5668,8 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La if (varsens < 0.f) { transformed->L[y][x] = CLIP(original->L[y][x] + diflc); } else { - transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * realstrdE * kch * fach); - diflc = 328.f * realstrdE * kch * fach; + transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * realstrdE);//kch fach + diflc = 328.f * realstrdE; } if (lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) { @@ -5694,44 +5682,29 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float chrb = bufexporig->b[loy - begy][lox - begx]; if (senstype != 1) { - flia = flib = ((100.f + realstrch * falu * falL) / 100.f); + flia = flib = (100.f + realstrchdE) / 100.f; } else { - flia = ((100.f + realstra * falu * falL) / 100.f); - flib = ((100.f + realstrb * falu * falL) / 100.f); + flia = (100.f + realstradE) / 100.f; + flib = (100.f + realstrbdE) / 100.f; + } - float difa = chra * flia - original->a[y][x]; - float difb = chrb * flib - original->b[y][x]; - difa *= kch * fach; - difb *= kch * fach; + float difa = chra * flia - original->a[y][x]; + float difb = chrb * flib - original->b[y][x]; + transformed->a[y][x] = CLIPC(original->a[y][x] + difa); + transformed->b[y][x] = CLIPC(original->b[y][x] + difb); - if (varsens < 0.f) { - transformed->a[y][x] = CLIPC(original->a[y][x] + difa); - transformed->b[y][x] = CLIPC(original->b[y][x] + difb); - } else { - if (senstype != 1) { - transformed->a[y][x] = CLIPC(original->a[y][x] + 328.f * realstrchdE * kch * fach); - transformed->b[y][x] = CLIPC(original->b[y][x] + 328.f * realstrchdE * kch * fach); - } else { - transformed->a[y][x] = CLIPC(original->a[y][x] + 328.f * realstradE * kch * fach); - transformed->b[y][x] = CLIPC(original->b[y][x] + 328.f * realstrbdE * kch * fach); - difa = 328.f * realstradE * kch * fach; - difb = 328.f * realstrbdE * kch * fach; - } - } - - if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { - transformed->a[y][x] = CLIPC(difa); - transformed->b[y][x] = CLIPC(difb); - } + if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { + transformed->a[y][x] = CLIPC(difa); + transformed->b[y][x] = CLIPC(difb); } } - - } - } + + } } + } bool execmedian99 = false; From 62402fb037006c44577defece5bd53f59e8df8a6 Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 23 Jan 2019 17:27:03 +0100 Subject: [PATCH 21/23] clean exposure code - fixed partially huge bug in mask --- rtengine/improcfun.h | 2 +- rtengine/iplocallab.cc | 1494 ++++++++++++++++------------------------ rtengine/procparams.cc | 4 +- rtengine/procparams.h | 3 + rtgui/locallab.cc | 4 +- 5 files changed, 584 insertions(+), 923 deletions(-) diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 73ed17e2e..39e51ceb0 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -302,7 +302,7 @@ public: void vibrancelocal(int sp, int bfw, int bfh, LabImage* lab, LabImage* dest, bool & localskutili, LUTf & sklocalcurve); // void Expo_vibr_Local(float moddE, float powdE, int senstype, float **buflight, float **bufchro, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, const LabImage * const tmp1, int cx, int cy, int sk); - void Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); + void Expo_vibr_Local(int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueref, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk); void exlabLocal(const local_params& lp, int bfh, int bfw, LabImage* bufexporig, LabImage* lab, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve); void Exclude_Local(float moddE, float powdE, int sen, float **deltaso, float **buflight, float **bufchro, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, const struct local_params & lp, LabImage * original, LabImage * transformed, LabImage * rsv, LabImage * reserv, int cx, int cy, int sk); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index 7bc477646..a7c5911a0 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -5061,7 +5061,7 @@ void ImProcFunctions::Exclude_Local(float moddE, float powdE, int sen, float **d } -void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueplus, const float huemoins, const float hueref, const float dhue, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) +void ImProcFunctions::Expo_vibr_Local(int senstype, LabImage * bufexporig, LabImage * originalmask, float **buflight, float **bufchro, float **buf_a_cat, float ** buf_b_cat, const float hueref, const float chromaref, const float lumaref, float sobelref, float ** blend2, const struct local_params & lp, LabImage * original, LabImage * transformed, int cx, int cy, int sk) { //local exposure and vibrance @@ -5085,12 +5085,6 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } // printf("varsen=%f \n", varsens); - //chroma - constexpr float amplchsens = 2.5f; - constexpr float achsens = (amplchsens - 1.f) / (100.f - 20.f); //20. default locallab.sensih - constexpr float bchsens = 1.f - 20.f * achsens; - const float multchro = varsens * achsens + bchsens; - //sobel sobelref /= 100.; @@ -5101,38 +5095,11 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La sobelref = log(1.f + sobelref); - - //skin - constexpr float amplchsensskin = 1.6f; - constexpr float achsensskin = (amplchsensskin - 1.f) / (100.f - 20.f); //20. default locallab.sensih - constexpr float bchsensskin = 1.f - 20.f * achsensskin; - const float multchroskin = varsens * achsensskin + bchsensskin; - - - constexpr float delhu = 0.05f; //between 0.05 and 0.2 - - const float apl = (-1.f) / delhu; - const float bpl = - apl * hueplus; - const float amo = 1.f / delhu; - const float bmo = - amo * huemoins; - - - const float pb = 4.f; - const float pa = (1.f - pb) / 40.f; - float refa = chromaref * cos(hueref); - float refb = chromaref * sin(hueref); - -// const float moddE = 2.f; - - const float ahu = 1.f / (2.8f * varsens - 280.f); - const float bhu = 1.f - ahu * 2.8f * varsens; - - const float alum = 1.f / (varsens - 100.f); - const float blum = 1.f - alum * varsens; - int GW = transformed->W; int GH = transformed->H; + float refa = chromaref * cos(hueref); + float refb = chromaref * sin(hueref); LabImage *origblur = nullptr; @@ -5142,7 +5109,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float radius = (2.f + 0.2f * lp.blurexp) / sk; - bool usemask = (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) && senstype == 1; + bool usemask = (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3) && senstype == 1; if (usemask) { @@ -5190,9 +5157,6 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La const bool isZone0 = loy > lp.yc + lp.ly || loy < lp.yc - lp.lyT; // whole line is zone 0 => we can skip a lot of processing if (isZone0) { // outside selection and outside transition zone => no effect, keep original values - for (int x = 0; x < transformed->W; x++) { - transformed->L[y][x] = original->L[y][x]; - } continue; } @@ -5230,17 +5194,10 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La if (zone == 0) { // outside selection and outside transition zone => no effect, keep original values - transformed->L[y][x] = original->L[y][x]; + // transformed->L[y][x] = original->L[y][x]; continue; } -#ifdef __SSE2__ - float rhue = atan2Buffer[x]; - float rchro = sqrtBuffer[x]; -#else - float rhue = xatan2f(origblur->b[y][x], origblur->a[y][x]); - float rchro = sqrt(SQR(origblur->b[y][x]) + SQR(origblur->a[y][x])) / 327.68f; -#endif float rL = origblur->L[y][x] / 327.68f; float csob = 0.f; float rs = 0.f; @@ -5256,9 +5213,6 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La rs = sobelref / csob; } - float rhuemask = 0.f; - float rchromask = 0.f; - float rLmask = 0.f; float dE = 0.f; float rsob = 0.f; @@ -5267,15 +5221,9 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } if (usemask) { - rhuemask = xatan2f(origblurmask->b[y][x], origblurmask->a[y][x]); - rchromask = sqrt(SQR(origblurmask->b[y][x]) + SQR(origblurmask->a[y][x])) / 327.68f; - rLmask = origblurmask->L[y][x] / 327.68f; dE = rsob + sqrt(SQR(refa - origblurmask->a[y][x] / 327.68f) + SQR(refb - origblurmask->b[y][x] / 327.68f) + SQR(lumaref - origblurmask->L[y][x] / 327.68f)); } else { dE = rsob + sqrt(SQR(refa - origblur->a[y][x] / 327.68f) + SQR(refb - origblur->b[y][x] / 327.68f) + SQR(lumaref - rL)); - rhuemask = rhue; - rchromask = rchro; - rLmask = rL; } float cli = 1.f; @@ -5283,7 +5231,6 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La float cla = 1.f; float clb = 1.f; - // if (lp.curvact == true) { cli = (buflight[loy - begy][lox - begx]); clc = (bufchro[loy - begy][lox - begx]); @@ -5292,285 +5239,6 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La clb = buf_b_cat[loy - begy][lox - begx]; } - float aplus = (1.f - cli) / delhu; - float bplus = 1.f - aplus * hueplus; - float amoins = (cli - 1.f) / delhu; - float bmoins = 1.f - amoins * huemoins; - - float aplusch = (1.f - clc) / delhu; - float bplusch = 1.f - aplusch * hueplus; - float amoinsch = (clc - 1.f) / delhu; - float bmoinsch = 1.f - amoinsch * huemoins; - - float aplusa = (1.f - cla) / delhu; - float bplusa = 1.f - aplusa * hueplus; - float amoinsa = (cla - 1.f) / delhu; - float bmoinsa = 1.f - amoinsa * huemoins; - - float aplusb = (1.f - clb) / delhu; - float bplusb = 1.f - aplusb * hueplus; - float amoinsb = (clb - 1.f) / delhu; - float bmoinsb = 1.f - amoinsb * huemoins; - - float realstr = 1.f; - float realstrch = 1.f; - float realstra = 1.f; - float realstrb = 1.f; - - //prepare shape detection - float deltachro = fabs(rchromask - chromaref); - float deltahue = fabs(rhuemask - hueref); - - if (deltahue > rtengine::RT_PI) { - deltahue = - (deltahue - 2.f * rtengine::RT_PI); - } - - float deltaE = 20.f * deltahue + deltachro; //between 0 and 280 - float deltaL = fabs(lumaref - rLmask); //between 0 and 100 - - float kch = 1.f; - float kchchro = 1.f; - float khu = 0.f; - float fach = 1.f; - float falu = 1.f; - - if (deltachro < 160.f * SQR(varsens / 100.f)) { - kch = kchchro = 1.f; - } else { - float ck = 160.f * SQR(varsens / 100.f); - float ak = 1.f / (ck - 160.f); - float bk = -160.f * ak; - // kch = ak * deltachro + bk; - kch = kchchro = ak * deltachro + bk; - - } - - float kkch = 1.f; - kkch = pa * varsens + pb; - float kch0 = kch; - - if (varsens < 40.f) { - kch = kchchro = pow(kch0, kkch); //increase under 40 - float dEsens = moddE * varsens; - float kdE = 1.f; - - if (dE > dEsens) { - kdE = 1.f; - } else { - kdE = SQR(SQR(dE / dEsens)); - } - - if (deltahue < 0.3f && settings->detectshape == true) { - kchchro = kch = pow(kch0, (1.f + kdE * moddE * (3.f - 10.f * deltahue)) * kkch); - } - } - - float dEsensall = varsens; - float kD = 1.f; - - if (settings->detectshape == true) { - if (dE < dEsensall) { - kD = 1.f; - } else { - kD = pow(dEsensall / dE, powdE); - } - } - - /* - if (varsens < 40.f) { - kch = pow(kch, pa * varsens + pb); //increase under 40 - } - */ - bool kzon = false; - - //transition = difficult to avoid artifact with scope on flat area (sky...) - //hue detection - if ((hueref + dhue) < rtengine::RT_PI && rhue < hueplus && rhue > huemoins) { //transition are good - if (rhue >= hueplus - delhu) { - realstr = aplus * rhue + bplus; - realstrch = aplusch * rhue + bplusch; - realstra = aplusa * rhue + bplusa; - realstrb = aplusb * rhue + bplusb; - khu = apl * rhue + bpl; - - } else if (rhue < huemoins + delhu) { - realstr = amoins * rhue + bmoins; - realstrch = amoinsch * rhue + bmoinsch; - realstra = amoinsa * rhue + bmoinsa; - realstrb = amoinsb * rhue + bmoinsb; - khu = amo * rhue + bmo; - - } else { - realstr = cli; - khu = 1.f; - realstrch = clc; - realstra = cla; - realstrb = clb; - - } - - kzon = true; - } else if ((hueref + dhue) >= rtengine::RT_PI && (rhue > huemoins || rhue < hueplus)) { - if (rhue >= hueplus - delhu && rhue < hueplus) { - realstr = aplus * rhue + bplus; - realstrch = aplusch * rhue + bplusch; - realstra = aplusa * rhue + bplusa; - realstrb = aplusb * rhue + bplusb; - khu = apl * rhue + bpl; - - } else if (rhue >= huemoins && rhue < huemoins + delhu) { - realstr = amoins * rhue + bmoins; - realstrch = amoinsch * rhue + bmoinsch; - realstra = amoinsa * rhue + bmoinsa; - realstrb = amoinsb * rhue + bmoinsb; - khu = amo * rhue + bmo; - - } else { - realstr = cli; - khu = 1.f; - realstrch = clc; - realstra = cla; - realstrb = clb; - - } - - kzon = true; - } - - if ((hueref - dhue) > -rtengine::RT_PI && rhue < hueplus && rhue > huemoins) { - if (rhue >= hueplus - delhu && rhue < hueplus) { - realstr = aplus * rhue + bplus; - realstrch = aplusch * rhue + bplusch; - realstra = aplusa * rhue + bplusa; - realstrb = aplusb * rhue + bplusb; - khu = apl * rhue + bpl; - - } else if (rhue >= huemoins && rhue < huemoins + delhu) { - realstr = amoins * rhue + bmoins; - realstrch = amoinsch * rhue + bmoinsch; - realstra = amoinsa * rhue + bmoinsa; - realstrb = amoinsb * rhue + bmoinsb; - khu = amo * rhue + bmo; - - } else { - realstr = cli; - khu = 1.f; - realstrch = clc; - realstra = cla; - realstrb = clb; - - } - - kzon = true; - } else if ((hueref - dhue) <= -rtengine::RT_PI && (rhue > huemoins || rhue < hueplus)) { - if (rhue >= hueplus - delhu && rhue < hueplus) { - realstr = aplus * rhue + bplus; - realstrch = aplusch * rhue + bplusch; - realstra = aplusa * rhue + bplusa; - realstrb = aplusb * rhue + bplusb; - khu = apl * rhue + bpl; - - } else if (rhue >= huemoins && rhue < huemoins + delhu) { - realstr = amoins * rhue + bmoins; - realstrch = amoinsch * rhue + bmoinsch; - realstra = amoinsa * rhue + bmoinsa; - realstrb = amoinsb * rhue + bmoinsb; - khu = amo * rhue + bmo; - - } else { - realstr = cli; - khu = 1.f; - realstrch = clc; - realstra = cla; - realstrb = clb; - - } - - kzon = true; - } - - realstr *= kD; - realstrch *= kD; - - if (settings->detectshape == false) { - - //shape detection for hue chroma and luma - if (varsens <= 20.f) { //to try... - - if (deltaE < 2.8f * varsens) { - fach = khu; - } else { - fach = khu * (ahu * deltaE + bhu); - } - - float kcr = 10.f; - - if (rchro < kcr) { - fach *= (1.f / (kcr * kcr)) * rchro * rchro; - } - - if (lp.qualmet >= 1) { - } else { - fach = 1.f; - } - - if (deltaL < varsens) { - falu = 1.f; - } else { - falu = alum * deltaL + blum; - } - - } - } - - // I add these functions...perhaps not good - if (kzon) { - if (varsens < 60.f) { //arbitrary value - if (hueref < -1.1f && hueref > -2.8f) { // detect blue sky - if (chromaref > 0.f && chromaref < 35.f * multchro) { // detect blue sky - if ((rhue > -2.79f && rhue < -1.11f) && (rchro < 35.f * multchro)) { - cli *= 0.9f; - } else { - // cli = 1.f; - } - } - } else { - //realstr = cli; - } - - if (varsens < 50.f) { //&& lp.chro > 0.f - if (hueref > -0.1f && hueref < 1.6f) { // detect skin - if (chromaref > 0.f && chromaref < 55.f * multchroskin) { // detect skin - if ((rhue > -0.09f && rhue < 1.59f) && (rchro < 55.f * multchroskin)) { - cli *= 0.7f; - } else { - // realstr = 1.f; - } - } - } else { - // realstr = cli; - } - } - } - - } - - - float kcr = 100.f * lp.thr; - - float falL = 1.f; - - if (rchro < kcr && chromaref > kcr) { // reduce artifacts in grey tones near hue spot and improve algorithm - falL *= pow(rchro / kcr, lp.iterat / 10.f); - } - - if (varsens > 99.f) { - falu = 1.f; - kch = 1.f; - fach = 1.f; - } - - float reducdE = 0.f; float mindE = 2.f + 0.05f * varsens;//between 2 and 7 float maxdE = 5.f + 1.5f * varsens; // between 5 and 150, we can chnage this values @@ -5591,6 +5259,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La reducdE = 1.f; } + float realstrdE = reducdE * cli; float realstradE = reducdE * cla; float realstrbdE = reducdE * clb; @@ -5610,23 +5279,10 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La case 1: { // inside transition zone float factorx = localFactor; - float lightc = bufexporig->L[loy - begy][lox - begx]; - float fli = 1.f; - fli = ((100.f + realstr * falL) / 100.f); - float diflc = lightc * fli - original->L[y][x]; - diflc *= (kch * fach); - diflc *= factorx; + float diflc = 0.f; - if (varsens < 0.f) { - transformed->L[y][x] = CLIP(original->L[y][x] + diflc); - } else { - transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * factorx * realstrdE);//kch fach - diflc = 328.f * factorx * realstrdE; - } - - if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { - transformed->L[y][x] = CLIP(12000.f + diflc); - } + transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * factorx * realstrdE);//kch fach + diflc = 328.f * factorx * realstrdE; float flia = 1.f; float flib = 1.f; @@ -5649,6 +5305,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La transformed->b[y][x] = CLIPC(original->b[y][x] + difb); if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { + transformed->L[y][x] = CLIP(12000.f + diflc); transformed->a[y][x] = CLIPC(difa); transformed->b[y][x] = CLIPC(difb); } @@ -5658,23 +5315,10 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } case 2: { // inside selection => full effect, no transition - float lightc = bufexporig->L[loy - begy][lox - begx]; - float fli = 1.f; - fli = ((100.f + realstr * falL) / 100.f); //luma transition - float diflc = lightc * fli - original->L[y][x]; - diflc *= (kch * fach); - - if (varsens < 0.f) { - transformed->L[y][x] = CLIP(original->L[y][x] + diflc); - } else { - transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * realstrdE);//kch fach - diflc = 328.f * realstrdE; - } - - if (lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) { - transformed->L[y][x] = CLIP(12000.f + diflc); - } + float diflc = 0.f; + transformed->L[y][x] = CLIP(original->L[y][x] + 328.f * realstrdE);//kch fach + diflc = 328.f * realstrdE; float flia = 1.f; float flib = 1.f; @@ -5695,6 +5339,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La transformed->b[y][x] = CLIPC(original->b[y][x] + difb); if ((lp.showmaskexpmet == 1 || lp.showmaskexpmet == 2) && senstype == 1) { + transformed->L[y][x] = CLIP(12000.f + diflc); transformed->a[y][x] = CLIPC(difa); transformed->b[y][x] = CLIPC(difb); } @@ -5741,7 +5386,7 @@ void ImProcFunctions::Expo_vibr_Local(float moddE, float powdE, int senstype, La } delete origblur; - if ((lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) && senstype == 1) + if ((lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) && senstype == 1) { delete origblurmask; } @@ -5848,7 +5493,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm float radius = 3.f / sk; - if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) { origblurmask = new LabImage(GW, GH); #ifdef _OPENMP @@ -5973,7 +5618,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm rsob = 1.1f * lp.struco * (rs); } - if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) { rhuemask = xatan2f(origblurmask->b[y][x], origblurmask->a[y][x]); rchromask = sqrt(SQR(origblurmask->b[y][x]) + SQR(origblurmask->a[y][x])) / 327.68f; rLmask = origblurmask->L[y][x] / 327.68f; @@ -6491,9 +6136,9 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm diflc *= factorx; //transition lightness transformed->L[y][x] = CLIP((original->L[y][x] + diflc)); - if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { - transformed->L[y][x] = CLIP(12000.f + diflc); //CLIPL((original->L[y][x] + diflc)); - } + // if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { + // transformed->L[y][x] = CLIP(12000.f + diflc); //CLIPL((original->L[y][x] + diflc)); + // } if (lochhCurve && lp.qualcurvemet >= 1 && HHutili) { float addh = 0.f; @@ -6535,6 +6180,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm transformed->b[y][x] = CLIPC(original->b[y][x] * fac); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { + transformed->L[y][x] = CLIP(12000.f + diflc); transformed->a[y][x] = CLIPC(original->a[y][x] * (fac - 1.f)) ; transformed->b[y][x] = CLIPC(original->b[y][x] * (fac - 1.f)); } @@ -6621,9 +6267,9 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm diflc *= kch ; transformed->L[y][x] = CLIP((original->L[y][x] + diflc)); - if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { - transformed->L[y][x] = CLIP(12000.f + diflc); //CLIPL((original->L[y][x] + diflc)); - } +// if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { +// transformed->L[y][x] = CLIP(12000.f + diflc); //CLIPL((original->L[y][x] + diflc)); +// } if (lochhCurve && lp.qualcurvemet >= 1 && HHutili) { @@ -6665,6 +6311,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm transformed->b[y][x] = CLIPC(original->b[y][x] * fac); if (lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2) { + transformed->L[y][x] = CLIP(12000.f + diflc); transformed->a[y][x] = CLIPC(original->a[y][x] * (fac - 1.f)) ; transformed->b[y][x] = CLIPC(original->b[y][x] * (fac - 1.f)); } @@ -6686,7 +6333,7 @@ void ImProcFunctions::ColorLight_Local(float moddE, float powdE, int call, LabIm delete origblur; - if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) { delete origblurmask; } } @@ -9446,7 +9093,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } - Expo_vibr_Local(moddE, powdE, 2, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuev, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, cx, cy, sk); + Expo_vibr_Local(2, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueref, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, cx, cy, sk); //call Expo_vibr_Local with first parameter = 2 for vibrance } @@ -9816,7 +9463,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } - Expo_vibr_Local(moddE, powdE, 3, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueplus, huemoins, hueref, dhuesf, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, cx, cy, sk); + Expo_vibr_Local(3, bufexporig, nullptr, buflight, bufl_ab, nullptr, nullptr, hueref, chromaref, lumaref, sobelref, nullptr, lp, original, transformed, cx, cy, sk); } @@ -10224,497 +9871,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } -//local color and light - - if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || lp.qualcurvemet != 0 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4 || lp.showmaskcolmet == 5) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili - float hueplus = hueref + dhue; - float huemoins = hueref - dhue; - - if (hueplus > rtengine::RT_PI) { - hueplus = hueref + dhue - 2.f * rtengine::RT_PI; - } - - if (huemoins < -rtengine::RT_PI) { - huemoins = hueref - dhue + 2.f * rtengine::RT_PI; - } - -//provisory fixe for contrast slider does not work at all - // lp.cont = 0; - - LabImage *bufcolorig = nullptr; - LabImage *bufmaskorig = nullptr; - LabImage *bufmaskblur = nullptr; - LabImage *originalmask = nullptr; - - float chpro = 1.f; - float cligh = 1.f; - float clighL = 1.f; - - int bfh = 0.f, bfw = 0.f; - bfh = int (lp.ly + lp.lyT) + del; //bfw bfh real size of square zone - bfw = int (lp.lx + lp.lxL) + del; - JaggedArray buflight(bfw, bfh); - JaggedArray bufchro(bfw, bfh); - JaggedArray buflightslid(bfw, bfh); - JaggedArray bufchroslid(bfw, bfh); - JaggedArray bufhh(bfw, bfh); - JaggedArray blend2(bfw, bfh); - JaggedArray buforigchro(bfw, bfh); - - float adjustr = 1.0f; - -//adapt chroma to working profile - if (params->icm.workingProfile == "ProPhoto") { - adjustr = 1.2f; // 1.2 instead 1.0 because it's very rare to have C>170.. - } else if (params->icm.workingProfile == "Adobe RGB") { - adjustr = 1.8f; - } else if (params->icm.workingProfile == "sRGB") { - adjustr = 2.0f; - } else if (params->icm.workingProfile == "WideGamut") { - adjustr = 1.2f; - } else if (params->icm.workingProfile == "Beta RGB") { - adjustr = 1.4f; - } else if (params->icm.workingProfile == "BestRGB") { - adjustr = 1.4f; - } else if (params->icm.workingProfile == "BruceRGB") { - adjustr = 1.8f; - } - - if (call <= 3) { //simpleprocess, dcrop, improccoordinator - bufcolorig = new LabImage(bfw, bfh); - bufmaskorig = new LabImage(bfw, bfh); - bufmaskblur = new LabImage(bfw, bfh); - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ir = 0; ir < bfh; ir++) //fill with 0 - for (int jr = 0; jr < bfw; jr++) { - bufcolorig->L[ir][jr] = 0.f; - bufcolorig->a[ir][jr] = 0.f; - bufcolorig->b[ir][jr] = 0.f; - bufmaskorig->L[ir][jr] = 0.f; - bufmaskorig->a[ir][jr] = 0.f; - bufmaskorig->b[ir][jr] = 0.f; - bufchro[ir][jr] = 0.f; - bufchroslid[ir][jr] = 0.f; - buflightslid[ir][jr] = 0.f; - buflight[ir][jr] = 0.f; - bufhh[ir][jr] = 0.f; - } - - int begy = lp.yc - lp.lyT; - int begx = lp.xc - lp.lxL; - int yEn = lp.yc + lp.ly; - int xEn = lp.xc + lp.lx; -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; - - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - bufcolorig->L[loy - begy][lox - begx] = original->L[y][x]; - // buforigchro[loy - begy][lox - begx] = sqrt(SQR(original->a[y][x]) + SQR(original->b[y][x])); - } - } - - const float radius = 3.f / (sk * 1.4f); - int spotSi = 1 + 2 * max(1, lp.cir / sk); - - if (spotSi < 5) { - spotSi = 5; - } - - if (bfw > 2 * spotSi && bfh > 2 * spotSi && lp.struco > 0.f) { - SobelCannyLuma(blend2, bufcolorig->L, bfw, bfh, radius); - array2D ble(bfw, bfh); - array2D blec(bfw, bfh); - array2D guid(bfw, bfh); -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ir = 0; ir < bfh; ir++) - for (int jr = 0; jr < bfw; jr++) { - ble[ir][jr] = blend2[ir][jr] / 32768.f; - guid[ir][jr] = bufcolorig->L[ir][jr] / 32768.f; - } - - float blur = 25 / sk * (10.f + 1.2f * lp.struco); - printf("Blur=%f \n", blur); - - rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiThread); - // rtengine::guidedFilter(guid, blec, blec, blur, 0.001, multiThread); - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int ir = 0; ir < bfh; ir++) - for (int jr = 0; jr < bfw; jr++) { - blend2[ir][jr] = ble[ir][jr] * 32768.f; - } - - bool execmedian = true; - int passes = 1; - - if (execmedian) { - float** tmL; - int wid = bfw; - int hei = bfh; - tmL = new float*[hei]; - - for (int i = 0; i < hei; ++i) { - tmL[i] = new float[wid]; - } - - Median medianTypeL = Median::TYPE_3X3_STRONG; - Median_Denoise(blend2, blend2, wid, hei, medianTypeL, passes, multiThread, tmL); - - for (int i = 0; i < hei; ++i) { - delete[] tmL[i]; - } - - delete[] tmL; - } - - if (lp.showmaskcolmet == 5) { -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; - int zone = 0; - float localFactor = 1.f; - const float achm = (float)lp.trans / 100.f; - - if (lp.shapmet == 0) { - calcTransition(lox, loy, achm, lp, zone, localFactor); - } else if (lp.shapmet == 1) { - calcTransitionrect(lox, loy, achm, lp, zone, localFactor); - } - - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if (zone > 0) { - transformed->L[y][x] = blend2[loy - begy][lox - begx]; - transformed->a[y][x] = 0.f; - transformed->b[y][x] = 0.f; - } - } - } - } - - - } - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; - - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - bufmaskorig->L[loy - begy][lox - begx] = original->L[y][x]; - bufmaskorig->a[loy - begy][lox - begx] = original->a[y][x]; - bufmaskorig->b[loy - begy][lox - begx] = original->b[y][x]; - bufcolorig->L[loy - begy][lox - begx] = original->L[y][x]; - bufcolorig->a[loy - begy][lox - begx] = original->a[y][x]; - bufcolorig->b[loy - begy][lox - begx] = original->b[y][x]; - bufmaskblur->L[loy - begy][lox - begx] = original->L[y][x]; - bufmaskblur->a[loy - begy][lox - begx] = original->a[y][x]; - bufmaskblur->b[loy - begy][lox - begx] = original->b[y][x]; - - float valLL = 0.f; - float valCC = 0.f; - float valHH = 0.f; - float2 sincosval; - float kmaskL = 0; - float kmaskCa = 0; - float kmaskCb = 0; - - float kmaskHL = 0; - float kmaskHa = 0; - float kmaskHb = 0; - - if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { - - if (locllmasCurve) { - valLL = (float)(locllmasCurve[500.f * (bufcolorig->L[loy - begy][lox - begx]) / 32768.f]); - valLL = 1.f - valLL; - kmaskL = 32768.f * valLL; - } - - if (locccmasCurve) { - float chromask = 0.0001f + (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); - float chromaskr = chromask / 45000.f; - valCC = float (locccmasCurve[500.f * chromaskr]); - valCC = 1.f - valCC; - sincosval.y = (bufcolorig->a[loy - begy][lox - begx]) / chromask; - sincosval.x = (bufcolorig->b[loy - begy][lox - begx]) / chromask; - kmaskCa = 45000.f * valCC * sincosval.y; - kmaskCb = 45000.f * valCC * sincosval.x; - } - - if (lochhmasCurve) { - float huema = xatan2f(bufcolorig->b[loy - begy][lox - begx], bufcolorig->a[loy - begy][lox - begx]); - float h = Color::huelab_to_huehsv2(huema); - h += 1.f / 6.f; - - if (h > 1.f) { - h -= 1.f; - } - - float chromask = 0.0001f + (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); - valHH = float (lochhmasCurve[500.f * h]); - valHH = 1.f - valHH; - sincosval.y = (bufcolorig->a[loy - begy][lox - begx]) / chromask; - sincosval.x = (bufcolorig->b[loy - begy][lox - begx]) / chromask; - kmaskHa = 45000.f * valHH * sincosval.y; - kmaskHb = 45000.f * valHH * sincosval.x; - kmaskHL = 32768.f * valHH; - } - - bufmaskblur->L[loy - begy][lox - begx] = CLIPLOC(kmaskL + kmaskHL); - bufmaskblur->a[loy - begy][lox - begx] = CLIPC(kmaskCa + kmaskHa); - bufmaskblur->b[loy - begy][lox - begx] = CLIPC(kmaskCb + kmaskHb); - - - } - } - } - - float radiusb = 3.f / sk; - - if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { - -#ifdef _OPENMP - #pragma omp parallel -#endif - { - gaussianBlur(bufmaskblur->L, bufmaskorig->L, bfw, bfh, radiusb); - gaussianBlur(bufmaskblur->a, bufmaskorig->a, bfw, bfh, radiusb); - gaussianBlur(bufmaskblur->b, bufmaskorig->b, bfw, bfh, radiusb); - } - int GWm = transformed->W; - int GHm = transformed->H; - - - originalmask = new LabImage(GWm, GHm); - - if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) { - -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; - int zone = 0; - - float localFactor = 1.f; - const float achm = (float)lp.trans / 100.f; - - if (lp.shapmet == 0) { - calcTransition(lox, loy, achm, lp, zone, localFactor); - } else if (lp.shapmet == 1) { - calcTransitionrect(lox, loy, achm, lp, zone, localFactor); - } - - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if (zone > 0) { - - bufcolorig->L[loy - begy][lox - begx] += CLIP(lp.blendmacol * bufmaskorig->L[loy - begy][lox - begx]); - bufcolorig->a[loy - begy][lox - begx] += CLIPC(lp.blendmacol * bufmaskorig->a[loy - begy][lox - begx]); - bufcolorig->b[loy - begy][lox - begx] += CLIPC(lp.blendmacol * bufmaskorig->b[loy - begy][lox - begx]); - - originalmask->L[y][x] = CLIP(bufcolorig->L[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); - originalmask->a[y][x] = CLIPC(bufcolorig->a[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); - originalmask->b[y][x] = CLIPC(bufcolorig->b[loy - begy][lox - begx] - (lp.blendmacol + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); - - } - } - } - } else if (lp.showmaskcolmet == 4) { -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; - int zone = 0; - float localFactor = 1.f; - const float achm = (float)lp.trans / 100.f; - - if (lp.shapmet == 0) { - calcTransition(lox, loy, achm, lp, zone, localFactor); - } else if (lp.shapmet == 1) { - calcTransitionrect(lox, loy, achm, lp, zone, localFactor); - } - - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - if (zone > 0) { - transformed->L[y][x] = CLIPLOC(bufmaskorig->L[loy - begy][lox - begx]); - transformed->a[y][x] = CLIPC(bufmaskorig->a[loy - begy][lox - begx]); - transformed->b[y][x] = CLIPC(bufmaskorig->b[loy - begy][lox - begx]); - } - } - } - - } - } - - - - if (lp.showmaskcolmet == 0 || lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) { -#ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) -#endif - - for (int y = 0; y < transformed->H ; y++) //{ - for (int x = 0; x < transformed->W; x++) { - int lox = cx + x; - int loy = cy + y; - - if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - chpro = 0.f; - - //Chroma curve - if (cclocalcurve && lp.qualcurvemet != 0) { // C=f(C) curve - float chromat = sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx])); - float ch; - float ampli = 25.f; - ch = (cclocalcurve[chromat * adjustr ]) / ((chromat + 0.00001f) * adjustr); //ch between 0 and 0 50 or more - chpro = CLIPCHRO(ampli * ch - ampli); //ampli = 25.f arbitrary empirical coefficient between 5 and 50 - bufchro[loy - begy][lox - begx] = chpro; - } - - chpro = 0.f; - - if (lp.chro != 0.f && lp.curvact) { - // process to improve eg same as in Lab adjustements - float ch; - float ampli = 70.f; - ch = (1.f + 0.01f * lp.chro) ; //* (chromat * adjustr) / ((chromat + 0.00001f) * adjustr); //ch between 0 and 0 50 or more - - if (ch <= 1.f) {//convert data curve near values of slider -100 + 100, to be used after to detection shape - chpro = 99.f * ch - 99.f; - } else { - chpro = CLIPCHRO(ampli * ch - ampli); //ampli = 25.f arbitrary empirical coefficient between 5 and 50 - } - - bufchroslid[loy - begy][lox - begx] = chpro; - } - - if (lochhCurve && lp.qualcurvemet >= 2 && HHutili) { - float hhforcurv = xatan2f(bufcolorig->b[loy - begy][lox - begx], bufcolorig->a[loy - begy][lox - begx]); - - float valparam = float ((lochhCurve[500.f * Color::huelab_to_huehsv2(hhforcurv)] - 0.5f)); //get H=f(H) 1.7 optimisation ! - float ddhue = CLIPRET(200.f * valparam); - bufhh[loy - begy][lox - begx] = ddhue;//valparamdh; // - } - - //slider lightness - clighL = 0.f; - - if ((lp.ligh != 0.f || lp.cont != 0) && lp.curvact) { - float lL; - float lighLnew; - float amplil = 140.f; - float lighL = bufcolorig->L[loy - begy][lox - begx]; - calclight(lighL, lp.ligh, lighLnew, lightCurveloc); //replace L-curve - lL = lighLnew / lighL; - - if (lL <= 1.f) {//convert data curve near values of slider -100 + 100, to be used after to detection shape - clighL = 99.f * lL - 99.f; - } else { - clighL = CLIPLIG(amplil * lL - amplil); //ampli = 25.f arbitrary empirical coefficient between 5 and 150 - } - - buflightslid[loy - begy][lox - begx] = clighL; - // printf("cl=%f ", clighL); - } - - cligh = 0.f; - - //luma curve - if (lllocalcurve && lp.qualcurvemet >= 2) {// L=f(L) curve enhanced - float lh; - float amplil = 25.f; - float lighn = bufcolorig->L[loy - begy][lox - begx]; - lh = (lllocalcurve[lighn * 1.9f]) / ((lighn + 0.00001f) * 1.9f) ; // / ((lighn) / 1.9f) / 3.61f; //lh between 0 and 0 50 or more - cligh = CLIPLIG(amplil * lh - amplil); - buflight[loy - begy][lox - begx] = cligh; - } - } - } - - if (lp.qualcurvemet >= 4) { - JaggedArray blend(bfw, bfh); - float contrastf = lp.sensexclu / 100.f; - buildBlendMask(bufcolorig->L, blend, bfw, bfh, contrastf, 1.f, true); - -#ifdef _OPENMP - #pragma omp parallel for -#endif - - for (int i = 0; i < bfh; ++i) { - for (int j = 0; j < bfw; ++j) { - if (blend[i][j] > 0.05f) { - blend[i][j] = 1.22361f * sqrt(blend[i][j]) - 0.22361f; - } - - buflight[i][j] = intp(blend[i][j], buflight[i][j], 0.f);// tmpsob->L[i][j]); - bufchro[i][j] = intp(blend[i][j], bufchro[i][j], 0.f); //tmpsob->L[i][j] ); - } - } - } - } - - ColorLight_Local(moddE, powdE, call, bufcolorig, originalmask, buflight, bufchro, bufchroslid, bufhh, buflightslid, LHutili, HHutili, hueplus, huemoins, hueref, dhue, chromaref, lumaref, sobelref, blend2, lllocalcurve, loclhCurve, lochhCurve, lightCurveloc, lp, original, transformed, cx, cy, sk); - - if (call <= 3) { - - delete bufcolorig; - delete bufmaskorig; - delete bufmaskblur; - delete originalmask; - - } - } - } -//inverse - else if (lp.inv && (lp.chro != 0 || lp.ligh != 0) && lp.colorena) { - float hueplus = hueref + dhue; - float huemoins = hueref - dhue; - - if (hueplus > rtengine::RT_PI) { - hueplus = hueref + dhue - 2.f * rtengine::RT_PI; - } - - if (huemoins < -rtengine::RT_PI) { - huemoins = hueref - dhue + 2.f * rtengine::RT_PI; - } - - InverseColorLight_Local(lp, lightCurveloc, original, transformed, cx, cy, hueplus, huemoins, hueref, dhue, chromaref, lumaref, sk); - } - - - if (lp.exposena && (lp.expcomp != 0.f || lp.war != 0 || lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4 || lp.showmaskexpmet == 5 || (exlocalcurve && localexutili))) { //interior ellipse renforced lightness and chroma //locallutili float hueplus = hueref + dhueex; float huemoins = hueref - dhueex; @@ -10732,9 +9888,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o LabImage *bufexpfin = nullptr; LabImage *bufexptemp = nullptr; LabImage *bufcat02fin = nullptr; - LabImage *bufmaskorig = nullptr; - LabImage *bufmaskblur = nullptr; - LabImage *originalmask = nullptr; + LabImage *bufmaskorigexp = nullptr; + LabImage *bufmaskblurexp = nullptr; + LabImage *originalmaskexp = nullptr; int bfh = 0.f, bfw = 0.f; bfh = int (lp.ly + lp.lyT) + del; //bfw bfh real size of square zone @@ -10754,8 +9910,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufexpfin = new LabImage(bfw, bfh); bufexptemp = new LabImage(bfw, bfh); bufcat02fin = new LabImage(bfw, bfh); - bufmaskorig = new LabImage(bfw, bfh); - bufmaskblur = new LabImage(bfw, bfh); + bufmaskorigexp = new LabImage(bfw, bfh); + bufmaskblurexp = new LabImage(bfw, bfh); #ifdef _OPENMP @@ -10767,9 +9923,12 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufexporig->L[ir][jr] = 0.f; bufexporig->a[ir][jr] = 0.f; bufexporig->b[ir][jr] = 0.f; - bufmaskorig->L[ir][jr] = 0.f; - bufmaskorig->a[ir][jr] = 0.f; - bufmaskorig->b[ir][jr] = 0.f; + bufmaskorigexp->L[ir][jr] = 0.f; + bufmaskorigexp->a[ir][jr] = 0.f; + bufmaskorigexp->b[ir][jr] = 0.f; + bufmaskblurexp->L[ir][jr] = 0.f; + bufmaskblurexp->a[ir][jr] = 0.f; + bufmaskblurexp->b[ir][jr] = 0.f; bufexptemp->L[ir][jr] = 0.f; bufexptemp->a[ir][jr] = 0.f; bufexptemp->b[ir][jr] = 0.f; @@ -10889,6 +10048,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } } + + return; } @@ -10905,20 +10066,19 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o int loy = cy + y; if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - bufmaskorig->L[loy - begy][lox - begx] = original->L[y][x]; - bufmaskorig->a[loy - begy][lox - begx] = original->a[y][x]; - bufmaskorig->b[loy - begy][lox - begx] = original->b[y][x]; + bufmaskorigexp->L[loy - begy][lox - begx] = original->L[y][x]; + bufmaskorigexp->a[loy - begy][lox - begx] = original->a[y][x]; + bufmaskorigexp->b[loy - begy][lox - begx] = original->b[y][x]; bufexporig->L[loy - begy][lox - begx] = original->L[y][x]; bufexporig->a[loy - begy][lox - begx] = original->a[y][x]; bufexporig->b[loy - begy][lox - begx] = original->b[y][x]; - bufmaskblur->L[loy - begy][lox - begx] = original->L[y][x]; - bufmaskblur->a[loy - begy][lox - begx] = original->a[y][x]; - bufmaskblur->b[loy - begy][lox - begx] = original->b[y][x]; + bufmaskblurexp->L[loy - begy][lox - begx] = original->L[y][x]; + bufmaskblurexp->a[loy - begy][lox - begx] = original->a[y][x]; + bufmaskblurexp->b[loy - begy][lox - begx] = original->b[y][x]; float valLLexp = 0.f; float valCC = 0.f; float valHH = 0.f; - float2 sincosval; float kmaskLexp = 0; float kmaskCa = 0; float kmaskCb = 0; @@ -10941,10 +10101,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o float chromaskr = chromask / 45000.f; valCC = float (locccmasexpCurve[500.f * chromaskr]); valCC = 1.f - valCC; - sincosval.y = (bufexporig->a[loy - begy][lox - begx]) / chromask; - sincosval.x = (bufexporig->b[loy - begy][lox - begx]) / chromask; - kmaskCa = 45000.f * valCC * sincosval.y; - kmaskCb = 45000.f * valCC * sincosval.x; + kmaskCa = valCC; + kmaskCb = valCC; } @@ -10957,19 +10115,17 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o h -= 1.f; } - float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))) + 0.0001f; + // float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))) + 0.0001f; valHH = float (lochhmasexpCurve[500.f * h]); valHH = 1.f - valHH; - sincosval.y = (bufexporig->a[loy - begy][lox - begx]) / chromask; - sincosval.x = (bufexporig->b[loy - begy][lox - begx]) / chromask; - kmaskHa = 45000.f * valHH * sincosval.y; - kmaskHb = 45000.f * valHH * sincosval.x; + kmaskHa = valHH; + kmaskHb = valHH; kmaskHL = 32768.f * valHH; } - bufmaskblur->L[loy - begy][lox - begx] = CLIP(kmaskLexp + kmaskHL); - bufmaskblur->a[loy - begy][lox - begx] = CLIPC(kmaskCa + kmaskHa); - bufmaskblur->b[loy - begy][lox - begx] = CLIPC(kmaskCb + kmaskHb); + bufmaskblurexp->L[loy - begy][lox - begx] = CLIP(kmaskLexp + kmaskHL); + bufmaskblurexp->a[loy - begy][lox - begx] = CLIPC(kmaskCa + kmaskHa); + bufmaskblurexp->b[loy - begy][lox - begx] = CLIPC(kmaskCb + kmaskHb); } @@ -10985,17 +10141,17 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o #pragma omp parallel #endif { - gaussianBlur(bufmaskblur->L, bufmaskorig->L, bfw, bfh, radiusb); - gaussianBlur(bufmaskblur->a, bufmaskorig->a, bfw, bfh, radiusb); - gaussianBlur(bufmaskblur->b, bufmaskorig->b, bfw, bfh, radiusb); + gaussianBlur(bufmaskblurexp->L, bufmaskorigexp->L, bfw, bfh, radiusb); + gaussianBlur(bufmaskblurexp->a, bufmaskorigexp->a, bfw, bfh, radiusb); + gaussianBlur(bufmaskblurexp->b, bufmaskorigexp->b, bfw, bfh, radiusb); } int GWm = transformed->W; int GHm = transformed->H; - originalmask = new LabImage(GWm, GHm); + originalmaskexp = new LabImage(GWm, GHm); - if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3) { + if (lp.showmaskexpmet != 4) { #ifdef _OPENMP // #pragma omp parallel for schedule(dynamic,16) @@ -11018,15 +10174,17 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if (zone > 0) { + bufexporig->L[loy - begy][lox - begx] += (lp.blendmaexp * bufmaskorigexp->L[loy - begy][lox - begx]); + bufexporig->a[loy - begy][lox - begx] *= (1.f + lp.blendmaexp * bufmaskorigexp->a[loy - begy][lox - begx]); + bufexporig->b[loy - begy][lox - begx] *= (1.f + lp.blendmaexp * bufmaskorigexp->b[loy - begy][lox - begx]); - bufexporig->L[loy - begy][lox - begx] += CLIP(lp.blendmaexp * bufmaskorig->L[loy - begy][lox - begx]); - bufexporig->a[loy - begy][lox - begx] += CLIPC(lp.blendmaexp * bufmaskorig->a[loy - begy][lox - begx]); - bufexporig->b[loy - begy][lox - begx] += CLIPC(lp.blendmaexp * bufmaskorig->b[loy - begy][lox - begx]); - - originalmask->L[y][x] = CLIP(bufexporig->L[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->L[loy - begy][lox - begx]); - originalmask->a[y][x] = CLIPC(bufexporig->a[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->a[loy - begy][lox - begx]); - originalmask->b[y][x] = CLIPC(bufexporig->b[loy - begy][lox - begx] - (lp.blendmaexp + 1.f) * bufmaskorig->b[loy - begy][lox - begx]); + bufexporig->L[loy - begy][lox - begx] = CLIP(bufexporig->L[loy - begy][lox - begx]); + bufexporig->a[loy - begy][lox - begx] = CLIPC(bufexporig->a[loy - begy][lox - begx]); + bufexporig->b[loy - begy][lox - begx] = CLIPC(bufexporig->b[loy - begy][lox - begx]); + originalmaskexp->L[y][x] = CLIP(bufexporig->L[loy - begy][lox - begx] - bufmaskorigexp->L[loy - begy][lox - begx]); + originalmaskexp->a[y][x] = CLIPC(bufexporig->a[loy - begy][lox - begx] * (1.f - bufmaskorigexp->a[loy - begy][lox - begx])); + originalmaskexp->b[y][x] = CLIPC(bufexporig->b[loy - begy][lox - begx] * (1.f - bufmaskorigexp->b[loy - begy][lox - begx])); } } } @@ -11051,13 +10209,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if (zone > 0) { - transformed->L[y][x] = CLIPLOC(bufmaskorig->L[loy - begy][lox - begx]); - transformed->a[y][x] = CLIPC(bufmaskorig->a[loy - begy][lox - begx]); - transformed->b[y][x] = CLIPC(bufmaskorig->b[loy - begy][lox - begx]); + transformed->L[y][x] = CLIPLOC(bufmaskorigexp->L[loy - begy][lox - begx]); + transformed->a[y][x] = bufexporig->a[loy - begy][lox - begx] * (bufmaskorigexp->a[loy - begy][lox - begx]); + transformed->b[y][x] = bufexporig->b[loy - begy][lox - begx] * (bufmaskorigexp->b[loy - begy][lox - begx]); } } } + return; } } @@ -11166,7 +10325,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } - Expo_vibr_Local(moddE, powdE, 1, bufexporig, originalmask, buflight, bufl_ab, buf_a_cat, buf_b_cat, hueplus, huemoins, hueref, dhueex, chromaref, lumaref, sobelref, blend2, lp, original, transformed, cx, cy, sk); + Expo_vibr_Local(1, bufexporig, originalmaskexp, buflight, bufl_ab, buf_a_cat, buf_b_cat, hueref, chromaref, lumaref, sobelref, blend2, lp, original, transformed, cx, cy, sk); //view mask } @@ -11176,14 +10335,513 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o delete bufexpfin; delete bufexptemp; delete bufcat02fin; - delete bufmaskorig; - delete bufmaskblur; - delete originalmask; + delete bufmaskorigexp; + delete bufmaskblurexp; + delete originalmaskexp; } } +//local color and light + + if (!lp.inv && (lp.chro != 0 || lp.ligh != 0.f || lp.cont != 0 || lp.qualcurvemet != 0 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4 || lp.showmaskcolmet == 5) && lp.colorena) { // || lllocalcurve)) { //interior ellipse renforced lightness and chroma //locallutili + float hueplus = hueref + dhue; + float huemoins = hueref - dhue; + + if (hueplus > rtengine::RT_PI) { + hueplus = hueref + dhue - 2.f * rtengine::RT_PI; + } + + if (huemoins < -rtengine::RT_PI) { + huemoins = hueref - dhue + 2.f * rtengine::RT_PI; + } + +//provisory fixe for contrast slider does not work at all + // lp.cont = 0; + + LabImage *bufcolorig = nullptr; + LabImage *bufmaskorigcol = nullptr; + LabImage *bufmaskblurcol = nullptr; + LabImage *originalmaskcol = nullptr; + + float chpro = 1.f; + float cligh = 1.f; + float clighL = 1.f; + + int bfh = 0.f, bfw = 0.f; + bfh = int (lp.ly + lp.lyT) + del; //bfw bfh real size of square zone + bfw = int (lp.lx + lp.lxL) + del; + JaggedArray buflight(bfw, bfh); + JaggedArray bufchro(bfw, bfh); + JaggedArray buflightslid(bfw, bfh); + JaggedArray bufchroslid(bfw, bfh); + JaggedArray bufhh(bfw, bfh); + JaggedArray blend2(bfw, bfh); + JaggedArray buforigchro(bfw, bfh); + + float adjustr = 1.0f; + +//adapt chroma to working profile + if (params->icm.workingProfile == "ProPhoto") { + adjustr = 1.2f; // 1.2 instead 1.0 because it's very rare to have C>170.. + } else if (params->icm.workingProfile == "Adobe RGB") { + adjustr = 1.8f; + } else if (params->icm.workingProfile == "sRGB") { + adjustr = 2.0f; + } else if (params->icm.workingProfile == "WideGamut") { + adjustr = 1.2f; + } else if (params->icm.workingProfile == "Beta RGB") { + adjustr = 1.4f; + } else if (params->icm.workingProfile == "BestRGB") { + adjustr = 1.4f; + } else if (params->icm.workingProfile == "BruceRGB") { + adjustr = 1.8f; + } + + if (call <= 3) { //simpleprocess, dcrop, improccoordinator + bufcolorig = new LabImage(bfw, bfh); + bufmaskorigcol = new LabImage(bfw, bfh); + bufmaskblurcol = new LabImage(bfw, bfh); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < bfh; ir++) //fill with 0 + for (int jr = 0; jr < bfw; jr++) { + bufcolorig->L[ir][jr] = 0.f; + bufcolorig->a[ir][jr] = 0.f; + bufcolorig->b[ir][jr] = 0.f; + bufmaskorigcol->L[ir][jr] = 0.f; + bufmaskorigcol->a[ir][jr] = 0.f; + bufmaskorigcol->b[ir][jr] = 0.f; + bufmaskblurcol->L[ir][jr] = 0.f; + bufmaskblurcol->a[ir][jr] = 0.f; + bufmaskblurcol->b[ir][jr] = 0.f; + bufchro[ir][jr] = 0.f; + bufchroslid[ir][jr] = 0.f; + buflightslid[ir][jr] = 0.f; + buflight[ir][jr] = 0.f; + bufhh[ir][jr] = 0.f; + } + + int begy = lp.yc - lp.lyT; + int begx = lp.xc - lp.lxL; + int yEn = lp.yc + lp.ly; + int xEn = lp.xc + lp.lx; +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + bufcolorig->L[loy - begy][lox - begx] = original->L[y][x]; + // buforigchro[loy - begy][lox - begx] = sqrt(SQR(original->a[y][x]) + SQR(original->b[y][x])); + } + } + + const float radius = 3.f / (sk * 1.4f); + int spotSi = 1 + 2 * max(1, lp.cir / sk); + + if (spotSi < 5) { + spotSi = 5; + } + + if (bfw > 2 * spotSi && bfh > 2 * spotSi && lp.struco > 0.f) { + SobelCannyLuma(blend2, bufcolorig->L, bfw, bfh, radius); + array2D ble(bfw, bfh); + array2D blec(bfw, bfh); + array2D guid(bfw, bfh); +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + ble[ir][jr] = blend2[ir][jr] / 32768.f; + guid[ir][jr] = bufcolorig->L[ir][jr] / 32768.f; + } + + float blur = 25 / sk * (10.f + 1.2f * lp.struco); + printf("Blur=%f \n", blur); + + rtengine::guidedFilter(guid, ble, ble, blur, 0.001, multiThread); + // rtengine::guidedFilter(guid, blec, blec, blur, 0.001, multiThread); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int ir = 0; ir < bfh; ir++) + for (int jr = 0; jr < bfw; jr++) { + blend2[ir][jr] = ble[ir][jr] * 32768.f; + } + + bool execmedian = true; + int passes = 1; + + if (execmedian) { + float** tmL; + int wid = bfw; + int hei = bfh; + tmL = new float*[hei]; + + for (int i = 0; i < hei; ++i) { + tmL[i] = new float[wid]; + } + + Median medianTypeL = Median::TYPE_3X3_STRONG; + Median_Denoise(blend2, blend2, wid, hei, medianTypeL, passes, multiThread, tmL); + + for (int i = 0; i < hei; ++i) { + delete[] tmL[i]; + } + + delete[] tmL; + } + + if (lp.showmaskcolmet == 5) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + int zone = 0; + float localFactor = 1.f; + const float achm = (float)lp.trans / 100.f; + + if (lp.shapmet == 0) { + calcTransition(lox, loy, achm, lp, zone, localFactor); + } else if (lp.shapmet == 1) { + calcTransitionrect(lox, loy, achm, lp, zone, localFactor); + } + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if (zone > 0) { + transformed->L[y][x] = blend2[loy - begy][lox - begx]; + transformed->a[y][x] = 0.f; + transformed->b[y][x] = 0.f; + } + } + } + + return; + } + + + } + +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + bufmaskorigcol->L[loy - begy][lox - begx] = original->L[y][x]; + bufmaskorigcol->a[loy - begy][lox - begx] = original->a[y][x]; + bufmaskorigcol->b[loy - begy][lox - begx] = original->b[y][x]; + bufcolorig->L[loy - begy][lox - begx] = original->L[y][x]; + bufcolorig->a[loy - begy][lox - begx] = original->a[y][x]; + bufcolorig->b[loy - begy][lox - begx] = original->b[y][x]; + bufmaskblurcol->L[loy - begy][lox - begx] = original->L[y][x]; + bufmaskblurcol->a[loy - begy][lox - begx] = original->a[y][x]; + bufmaskblurcol->b[loy - begy][lox - begx] = original->b[y][x]; + + float valLL = 0.f; + float valCC = 0.f; + float valHH = 0.f; + float kmaskL = 0; + float kmaskCa = 0; + float kmaskCb = 0; + + float kmaskHL = 0; + float kmaskHa = 0; + float kmaskHb = 0; + + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { + + if (locllmasCurve) { + valLL = (float)(locllmasCurve[500.f * (bufcolorig->L[loy - begy][lox - begx]) / 32768.f]); + valLL = 1.f - valLL; + kmaskL = 32768.f * valLL; + } + + if (locccmasCurve) { + float chromask = 0.0001f + (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); + float chromaskr = chromask / 45000.f; + valCC = float (locccmasCurve[500.f * chromaskr]); + valCC = 1.f - valCC; + kmaskCa = valCC; + kmaskCb = valCC; + } + + if (lochhmasCurve) { + float huema = xatan2f(bufcolorig->b[loy - begy][lox - begx], bufcolorig->a[loy - begy][lox - begx]); + float h = Color::huelab_to_huehsv2(huema); + h += 1.f / 6.f; + + if (h > 1.f) { + h -= 1.f; + } + + // float chromask = 0.0001f + (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); + valHH = float (lochhmasCurve[500.f * h]); + valHH = 1.f - valHH; + kmaskHa = valHH; + kmaskHb = valHH; + kmaskHL = 32768.f * valHH; + } + + bufmaskblurcol->L[loy - begy][lox - begx] = CLIPLOC(kmaskL + kmaskHL); + bufmaskblurcol->a[loy - begy][lox - begx] = CLIPC(kmaskCa + kmaskHa); + bufmaskblurcol->b[loy - begy][lox - begx] = CLIPC(kmaskCb + kmaskHb); + + + } + } + } + + float radiusb = 3.f / sk; + + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { +#ifdef _OPENMP + #pragma omp parallel +#endif + { + gaussianBlur(bufmaskblurcol->L, bufmaskorigcol->L, bfw, bfh, radiusb); + gaussianBlur(bufmaskblurcol->a, bufmaskorigcol->a, bfw, bfh, radiusb); + gaussianBlur(bufmaskblurcol->b, bufmaskorigcol->b, bfw, bfh, radiusb); + } + int GWm = transformed->W; + int GHm = transformed->H; + + + originalmaskcol = new LabImage(GWm, GHm); + + if (lp.showmaskcolmet != 4) { + +#ifdef _OPENMP +// #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + int zone = 0; + + float localFactor = 1.f; + const float achm = (float)lp.trans / 100.f; + + if (lp.shapmet == 0) { + calcTransition(lox, loy, achm, lp, zone, localFactor); + } else if (lp.shapmet == 1) { + calcTransitionrect(lox, loy, achm, lp, zone, localFactor); + } + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if (zone > 0) { + + bufcolorig->L[loy - begy][lox - begx] += (lp.blendmacol * bufmaskorigcol->L[loy - begy][lox - begx]); + bufcolorig->a[loy - begy][lox - begx] *= (1.f + lp.blendmacol * bufmaskorigcol->a[loy - begy][lox - begx]); + bufcolorig->b[loy - begy][lox - begx] *= (1.f + lp.blendmacol * bufmaskorigcol->b[loy - begy][lox - begx]); + + bufcolorig->L[loy - begy][lox - begx] = CLIP(bufcolorig->L[loy - begy][lox - begx]); + bufcolorig->a[loy - begy][lox - begx] = CLIPC(bufcolorig->a[loy - begy][lox - begx]); + bufcolorig->b[loy - begy][lox - begx] = CLIPC(bufcolorig->b[loy - begy][lox - begx]); + + originalmaskcol->L[y][x] = CLIP(bufcolorig->L[loy - begy][lox - begx] - bufmaskorigcol->L[loy - begy][lox - begx]); + originalmaskcol->a[y][x] = CLIPC(bufcolorig->a[loy - begy][lox - begx] * (1.f - bufmaskorigcol->a[loy - begy][lox - begx])); + originalmaskcol->b[y][x] = CLIPC(bufcolorig->b[loy - begy][lox - begx] * (1.f - bufmaskorigcol->b[loy - begy][lox - begx])); + + } + + } + } + } else if (lp.showmaskcolmet == 4) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + int zone = 0; + float localFactor = 1.f; + const float achm = (float)lp.trans / 100.f; + + if (lp.shapmet == 0) { + calcTransition(lox, loy, achm, lp, zone, localFactor); + } else if (lp.shapmet == 1) { + calcTransitionrect(lox, loy, achm, lp, zone, localFactor); + } + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + if (zone > 0) { + transformed->L[y][x] = CLIPLOC(bufmaskorigcol->L[loy - begy][lox - begx]); + transformed->a[y][x] = bufcolorig->a[loy - begy][lox - begx] * (bufmaskorigcol->a[loy - begy][lox - begx]); + transformed->b[y][x] = bufcolorig->b[loy - begy][lox - begx] * (bufmaskorigcol->b[loy - begy][lox - begx]); + } + } + } + + return; + + } + } + + + + if (lp.showmaskcolmet == 0 || lp.showmaskcolmet == 1 || lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3) { +#ifdef _OPENMP + #pragma omp parallel for schedule(dynamic,16) +#endif + + for (int y = 0; y < transformed->H ; y++) //{ + for (int x = 0; x < transformed->W; x++) { + int lox = cx + x; + int loy = cy + y; + + if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { + chpro = 0.f; + + //Chroma curve + if (cclocalcurve && lp.qualcurvemet != 0) { // C=f(C) curve + float chromat = sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx])); + float ch; + float ampli = 25.f; + ch = (cclocalcurve[chromat * adjustr ]) / ((chromat + 0.00001f) * adjustr); //ch between 0 and 0 50 or more + chpro = CLIPCHRO(ampli * ch - ampli); //ampli = 25.f arbitrary empirical coefficient between 5 and 50 + bufchro[loy - begy][lox - begx] = chpro; + } + + chpro = 0.f; + + if (lp.chro != 0.f && lp.curvact) { + // process to improve eg same as in Lab adjustements + float ch; + float ampli = 70.f; + ch = (1.f + 0.01f * lp.chro) ; //* (chromat * adjustr) / ((chromat + 0.00001f) * adjustr); //ch between 0 and 0 50 or more + + if (ch <= 1.f) {//convert data curve near values of slider -100 + 100, to be used after to detection shape + chpro = 99.f * ch - 99.f; + } else { + chpro = CLIPCHRO(ampli * ch - ampli); //ampli = 25.f arbitrary empirical coefficient between 5 and 50 + } + + bufchroslid[loy - begy][lox - begx] = chpro; + } + + if (lochhCurve && lp.qualcurvemet >= 2 && HHutili) { + float hhforcurv = xatan2f(bufcolorig->b[loy - begy][lox - begx], bufcolorig->a[loy - begy][lox - begx]); + + float valparam = float ((lochhCurve[500.f * Color::huelab_to_huehsv2(hhforcurv)] - 0.5f)); //get H=f(H) 1.7 optimisation ! + float ddhue = CLIPRET(200.f * valparam); + bufhh[loy - begy][lox - begx] = ddhue;//valparamdh; // + } + + //slider lightness + clighL = 0.f; + + if ((lp.ligh != 0.f || lp.cont != 0) && lp.curvact) { + float lL; + float lighLnew; + float amplil = 140.f; + float lighL = bufcolorig->L[loy - begy][lox - begx]; + calclight(lighL, lp.ligh, lighLnew, lightCurveloc); //replace L-curve + lL = lighLnew / lighL; + + if (lL <= 1.f) {//convert data curve near values of slider -100 + 100, to be used after to detection shape + clighL = 99.f * lL - 99.f; + } else { + clighL = CLIPLIG(amplil * lL - amplil); //ampli = 25.f arbitrary empirical coefficient between 5 and 150 + } + + buflightslid[loy - begy][lox - begx] = clighL; + // printf("cl=%f ", clighL); + } + + cligh = 0.f; + + //luma curve + if (lllocalcurve && lp.qualcurvemet >= 2) {// L=f(L) curve enhanced + float lh; + float amplil = 25.f; + float lighn = bufcolorig->L[loy - begy][lox - begx]; + lh = (lllocalcurve[lighn * 1.9f]) / ((lighn + 0.00001f) * 1.9f) ; // / ((lighn) / 1.9f) / 3.61f; //lh between 0 and 0 50 or more + cligh = CLIPLIG(amplil * lh - amplil); + buflight[loy - begy][lox - begx] = cligh; + } + } + } + + if (lp.qualcurvemet >= 4) { + JaggedArray blend(bfw, bfh); + float contrastf = lp.sensexclu / 100.f; + buildBlendMask(bufcolorig->L, blend, bfw, bfh, contrastf, 1.f, true); + +#ifdef _OPENMP + #pragma omp parallel for +#endif + + for (int i = 0; i < bfh; ++i) { + for (int j = 0; j < bfw; ++j) { + if (blend[i][j] > 0.05f) { + blend[i][j] = 1.22361f * sqrt(blend[i][j]) - 0.22361f; + } + + buflight[i][j] = intp(blend[i][j], buflight[i][j], 0.f);// tmpsob->L[i][j]); + bufchro[i][j] = intp(blend[i][j], bufchro[i][j], 0.f); //tmpsob->L[i][j] ); + } + } + } + } + + ColorLight_Local(moddE, powdE, call, bufcolorig, originalmaskcol, buflight, bufchro, bufchroslid, bufhh, buflightslid, LHutili, HHutili, hueplus, huemoins, hueref, dhue, chromaref, lumaref, sobelref, blend2, lllocalcurve, loclhCurve, lochhCurve, lightCurveloc, lp, original, transformed, cx, cy, sk); + + if (call <= 3) { + + delete bufcolorig; + delete bufmaskorigcol; + delete bufmaskblurcol; + delete originalmaskcol; + + } + } + } +//inverse + else if (lp.inv && (lp.chro != 0 || lp.ligh != 0) && lp.colorena) { + float hueplus = hueref + dhue; + float huemoins = hueref - dhue; + + if (hueplus > rtengine::RT_PI) { + hueplus = hueref + dhue - 2.f * rtengine::RT_PI; + } + + if (huemoins < -rtengine::RT_PI) { + huemoins = hueref - dhue + 2.f * rtengine::RT_PI; + } + + InverseColorLight_Local(lp, lightCurveloc, original, transformed, cx, cy, hueplus, huemoins, hueref, dhue, chromaref, lumaref, sk); + } + + + + + // Gamut and Munsell control - very important do not desactivated to avoid crash if (params->locallab.spots.at(sp).avoid) { diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index 961d70487..b27455bd7 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2363,7 +2363,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : chroma(0), sensi(19), structcol(0), - blendmaskcol(-100), + blendmaskcol(0), qualitycurveMethod("none"), showmaskcolMethod("none"), llcurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, @@ -2390,7 +2390,7 @@ LocallabParams::LocallabSpot::LocallabSpot() : CCmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, LLmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, HHmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, - blendmaskexp(-100), + blendmaskexp(0), // Vibrance expvibrance(false), diff --git a/rtengine/procparams.h b/rtengine/procparams.h index 0941d2549..d0efada46 100644 --- a/rtengine/procparams.h +++ b/rtengine/procparams.h @@ -50,6 +50,9 @@ class LocHHCurve; class LocLLmaskCurve; class LocCCmaskCurve; class LocHHmaskCurve; +class LocLLmaskexpCurve; +class LocCCmaskexpCurve; +class LocHHmaskexpCurve; enum RenderingIntent { RI_PERCEPTUAL = INTENT_PERCEPTUAL, diff --git a/rtgui/locallab.cc b/rtgui/locallab.cc index 728973a39..c68929dac 100644 --- a/rtgui/locallab.cc +++ b/rtgui/locallab.cc @@ -77,7 +77,7 @@ Locallab::Locallab(): chroma(Gtk::manage(new Adjuster(M("TP_LOCALLAB_CHROMA"), -100, 150, 1, 0))), sensi(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 19))), structcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), - blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -200, 100, 1, -100))), + blendmaskcol(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 150, 1, 0))), // Exposure expcomp(Gtk::manage(new Adjuster(M("TP_EXPOSURE_EXPCOMP"), -200, 400, 5, 0))), hlcompr(Gtk::manage(new Adjuster(M("TP_EXPOSURE_COMPRHIGHLIGHTS"), 0, 500, 1, 60))), @@ -88,7 +88,7 @@ Locallab::Locallab(): sensiex(Gtk::manage(new Adjuster(M("TP_LOCALLAB_SENSI"), 0, 100, 1, 15))), structexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_STRUCCOL"), 0, 100, 1, 0))), blurexpde(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLURDE"), 2, 100, 1, 5))), - blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -200, 100, 1, -100))), + blendmaskexp(Gtk::manage(new Adjuster(M("TP_LOCALLAB_BLENDMASKCOL"), -100, 150, 1, 0))), // Vibrance saturated(Gtk::manage(new Adjuster(M("TP_VIBRANCE_SATURATED"), -100., 100., 1., 0.))), pastels(Gtk::manage(new Adjuster(M("TP_VIBRANCE_PASTELS"), -100., 100., 1., 0.))), From ae771a9d98c78c8d3f2d079f27ed760e4deaec6c Mon Sep 17 00:00:00 2001 From: Desmis Date: Wed, 23 Jan 2019 18:40:49 +0100 Subject: [PATCH 22/23] Fixed clear curve mistake --- rtengine/improccoordinator.cc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 3beb789e7..580a17dc2 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -836,6 +836,10 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) */ ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, lochhmasexpCurve, LHutili, HHutili, cclocalcurve, localskutili, sklocalcurve, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, huer, chromar, lumar, sobeler); + lllocalcurve.clear(); + cclocalcurve.clear(); + sklocalcurve.clear(); + exlocalcurve.clear(); /* From 1101484ecbcc1dd7194818bb51fc17a4305dedcf Mon Sep 17 00:00:00 2001 From: Desmis Date: Thu, 24 Jan 2019 18:16:30 +0100 Subject: [PATCH 23/23] Improve flat curves and memory management for mask to prevent hang or crash --- rtengine/curves.cc | 18 +- rtengine/curves.h | 12 +- rtengine/dcrop.cc | 30 +++- rtengine/improccoordinator.cc | 30 +++- rtengine/improccoordinator.h | 6 + rtengine/improcfun.h | 2 +- rtengine/iplocallab.cc | 299 +++++++++++----------------------- rtengine/procparams.cc | 12 +- rtengine/simpleprocess.cc | 20 ++- 9 files changed, 184 insertions(+), 245 deletions(-) diff --git a/rtengine/curves.cc b/rtengine/curves.cc index 7d6f95bdb..af9c7e78a 100644 --- a/rtengine/curves.cc +++ b/rtengine/curves.cc @@ -1607,12 +1607,13 @@ void LocHHmaskexpCurve::Set(const Curve &pCurve) -void LocHHmaskexpCurve::Set(const std::vector &curvePoints) +void LocHHmaskexpCurve::Set(const std::vector &curvePoints, bool & lhmasexputili) { // if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); ttcurve.setIdentityValue(0.); + lhmasexputili = true; Set(ttcurve); } else { Reset(); @@ -1654,12 +1655,13 @@ void LocLLmaskexpCurve::Set(const Curve &pCurve) -void LocLLmaskexpCurve::Set(const std::vector &curvePoints) +void LocLLmaskexpCurve::Set(const std::vector &curvePoints, bool & llmasexputili) { // if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); ttcurve.setIdentityValue(0.); + llmasexputili = true; Set(ttcurve); } else { Reset(); @@ -1702,12 +1704,13 @@ void LocCCmaskexpCurve::Set(const Curve &pCurve) -void LocCCmaskexpCurve::Set(const std::vector &curvePoints) +void LocCCmaskexpCurve::Set(const std::vector &curvePoints, bool & lcmasexputili) { // if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); ttcurve.setIdentityValue(0.); + lcmasexputili = true; Set(ttcurve); } else { Reset(); @@ -1748,12 +1751,13 @@ void LocHHmaskCurve::Set(const Curve &pCurve) -void LocHHmaskCurve::Set(const std::vector &curvePoints) +void LocHHmaskCurve::Set(const std::vector &curvePoints, bool & lhmasutili) { // if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); ttcurve.setIdentityValue(0.); + lhmasutili = true; Set(ttcurve); } else { Reset(); @@ -1797,12 +1801,13 @@ void LocCCmaskCurve::Set(const Curve &pCurve) -void LocCCmaskCurve::Set(const std::vector &curvePoints) +void LocCCmaskCurve::Set(const std::vector &curvePoints, bool & lcmasutili) { // if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); ttcurve.setIdentityValue(0.); + lcmasutili = true; Set(ttcurve); } else { Reset(); @@ -1842,12 +1847,13 @@ void LocLLmaskCurve::Set(const Curve &pCurve) -void LocLLmaskCurve::Set(const std::vector &curvePoints) +void LocLLmaskCurve::Set(const std::vector &curvePoints, bool & llmasutili) { // if (HHutili && !curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { if (!curvePoints.empty() && curvePoints[0] > FCT_Linear && curvePoints[0] < FCT_Unchanged) { FlatCurve ttcurve(curvePoints, false, CURVES_MIN_POLY_POINTS / 2); ttcurve.setIdentityValue(0.); + llmasutili = true; Set(ttcurve); } else { Reset(); diff --git a/rtengine/curves.h b/rtengine/curves.h index 0d5270fec..817c34ccd 100644 --- a/rtengine/curves.h +++ b/rtengine/curves.h @@ -644,7 +644,7 @@ public: virtual ~LocHHmaskexpCurve() {}; LocHHmaskexpCurve(); void Reset(); - void Set(const std::vector &curvePoints); + void Set(const std::vector &curvePoints, bool & lhmasexputili); float getSum() const { return sum; @@ -673,7 +673,7 @@ public: virtual ~LocCCmaskexpCurve() {}; LocCCmaskexpCurve(); void Reset(); - void Set(const std::vector &curvePoints); + void Set(const std::vector &curvePoints, bool & lcmasexputili); float getSum() const { return sum; @@ -701,7 +701,7 @@ public: virtual ~LocLLmaskexpCurve() {}; LocLLmaskexpCurve(); void Reset(); - void Set(const std::vector &curvePoints); + void Set(const std::vector &curvePoints, bool & llmasexputili); float getSum() const { return sum; @@ -729,7 +729,7 @@ public: virtual ~LocHHmaskCurve() {}; LocHHmaskCurve(); void Reset(); - void Set(const std::vector &curvePoints); + void Set(const std::vector &curvePoints, bool & lhmasutili); float getSum() const { return sum; @@ -758,7 +758,7 @@ public: virtual ~LocCCmaskCurve() {}; LocCCmaskCurve(); void Reset(); - void Set(const std::vector &curvePoints); + void Set(const std::vector &curvePoints, bool & lcmasutili); float getSum() const { return sum; @@ -786,7 +786,7 @@ public: virtual ~LocLLmaskCurve() {}; LocLLmaskCurve(); void Reset(); - void Set(const std::vector &curvePoints); + void Set(const std::vector &curvePoints, bool & llmasutili); float getSum() const { return sum; diff --git a/rtengine/dcrop.cc b/rtengine/dcrop.cc index ac2e2fe44..edd9f2b8c 100644 --- a/rtengine/dcrop.cc +++ b/rtengine/dcrop.cc @@ -895,6 +895,13 @@ void Crop::update(int todo) LUTu lhist16loc2(32770, 0); bool LHutili = parent->LHutili; bool HHutili = parent->HHutili; + bool llmasutili = parent->llmasutili; + bool lhmasutili = parent->lhmasutili; + bool lcmasutili = parent->lcmasutili; + bool lhmasexputili = parent->lhmasexputili; + bool lcmasexputili = parent->lcmasexputili; + bool llmasexputili = parent->llmasexputili; + float avg = parent->avg; LUTu dummy; bool needslocal = params.locallab.enabled; @@ -920,12 +927,12 @@ void Crop::update(int todo) locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve); loclhCurve.Set(params.locallab.spots.at(sp).LHcurve, LHutili); lochhCurve.Set(params.locallab.spots.at(sp).HHcurve, HHutili); - locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve); - locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve); - lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve); - locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve); - locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve); - lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve); + locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve, lcmasutili); + locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve, llmasutili); + lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve, lhmasutili); + locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve, lcmasexputili); + locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve, llmasexputili); + lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve, lhmasexputili); locallutili = false; CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve2, sca); localcutili = false; @@ -955,12 +962,21 @@ void Crop::update(int todo) sca); parent->ipf.Lab_Local(1, sp, (float**)shbuffer, labnCrop, labnCrop, reservCrop, cropx / skip, cropy / skip, skips(parent->fw, skip), skips(parent->fh, skip), skip, locRETgainCurve, lllocalcurve2, - loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, lochhmasexpCurve, LHutili, HHutili, cclocalcurve2, localskutili, sklocalcurve2, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, huere, chromare, lumare, sobelre); + loclhCurve, lochhCurve, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, LHutili, HHutili, cclocalcurve2, localskutili, sklocalcurve2, localexutili, exlocalcurve2, hltonecurveloc2, shtonecurveloc2, tonecurveloc2, lightCurveloc2, huerefblu, huere, chromare, lumare, sobelre); lllocalcurve2.clear(); cclocalcurve2.clear(); sklocalcurve2.clear(); exlocalcurve2.clear(); + locRETgainCurve.Reset(); + loclhCurve.Reset(); + lochhCurve.Reset(); + locccmasCurve.Reset(); + locllmasCurve.Reset(); + lochhmasCurve.Reset(); + locllmasexpCurve.Reset(); + locccmasexpCurve.Reset(); + lochhmasexpCurve.Reset(); if (skip <= 2) { usleep(settings->cropsleep); //wait to avoid crash when crop 100% and move window diff --git a/rtengine/improccoordinator.cc b/rtengine/improccoordinator.cc index 580a17dc2..798028c3c 100644 --- a/rtengine/improccoordinator.cc +++ b/rtengine/improccoordinator.cc @@ -784,15 +784,21 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) localexutili = false; localcutili = false; localskutili = false; + llmasutili = false; + lcmasexputili = false; + lhmasexputili = false; + llmasexputili = false; + lhmasutili = false; + lcmasutili = false; locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve); loclhCurve.Set(params.locallab.spots.at(sp).LHcurve, LHutili); lochhCurve.Set(params.locallab.spots.at(sp).HHcurve, HHutili); - locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve); - locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve); - lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve); - locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve); - locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve); - lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve); + locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve, lcmasutili); + locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve, llmasutili); + lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve, lhmasutili); + locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve, llmasexputili); + locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve, lcmasexputili); + lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve, lhmasexputili); CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve, sca); CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve, sca); CurveFactory::curveskLocal(localskutili, params.locallab.spots.at(sp).skintonescurve, sklocalcurve, sca); @@ -834,13 +840,21 @@ void ImProcCoordinator::updatePreviewImage(int todo, bool panningRelatedChange) * - maxspot, huerefs, centerx and centery aren't used in Lab_Local (only for printf) so values aren't important * - shbuffer is used as nullptr */ - ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, lochhmasexpCurve, + ipf.Lab_Local(3, sp, (float**)shbuffer, nprevl, nprevl, reserv, 0, 0, pW, pH, scale, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, LHutili, HHutili, cclocalcurve, localskutili, sklocalcurve, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerblu, huer, chromar, lumar, sobeler); lllocalcurve.clear(); cclocalcurve.clear(); sklocalcurve.clear(); exlocalcurve.clear(); - + locRETgainCurve.Reset(); + loclhCurve.Reset(); + lochhCurve.Reset(); + locccmasCurve.Reset(); + locllmasCurve.Reset(); + lochhmasCurve.Reset(); + locllmasexpCurve.Reset(); + locccmasexpCurve.Reset(); + lochhmasexpCurve.Reset(); /* if (params.locallab.spots.at(sp).spotMethod == "exc") { diff --git a/rtengine/improccoordinator.h b/rtengine/improccoordinator.h index f703ce3f0..2c2a02504 100644 --- a/rtengine/improccoordinator.h +++ b/rtengine/improccoordinator.h @@ -246,6 +246,12 @@ protected: bool localcutili; bool localskutili; bool localexutili; + bool llmasutili; + bool lhmasutili; + bool lcmasutili; + bool lcmasexputili; + bool lhmasexputili; + bool llmasexputili; bool LHutili; bool HHutili; LUTf huerefs; diff --git a/rtengine/improcfun.h b/rtengine/improcfun.h index 39e51ceb0..4392c9ca3 100644 --- a/rtengine/improcfun.h +++ b/rtengine/improcfun.h @@ -289,7 +289,7 @@ public: void calc_ref(int sp, LabImage* original, LabImage* transformed, int cx, int cy, int oW, int oH, int sk, double &huerefblur, double &huere, double &chromare, double &lumare, double &sobelref, LUTu & histogram, float &avg); void copy_ref(LabImage* spotbuffer, LabImage* original, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp, double &huerefspot, double &chromarefspot, double &lumarefspot); void paste_ref(LabImage* spotbuffer, LabImage* transformed, int cx, int cy, int sk, const struct local_params & lp); - void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, const LocHHmaskexpCurve & lochhmasexpCurve, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, LUTf & lightCurveloc, double & huerefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref); + void Lab_Local(int call, int sp, float** shbuffer, LabImage* original, LabImage* transformed, LabImage* reserved, int cx, int cy, int oW, int oH, int sk, const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool & lhmasutili, const LocCCmaskexpCurve & locccmasexpCurve, bool &lcmasexputili, const LocLLmaskexpCurve & locllmasexpCurve, bool &llmasexputili, const LocHHmaskexpCurve & lochhmasexpCurve, bool & lhmasexputili, bool &LHutili, bool &HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurve, LUTf & shtonecurve, LUTf & tonecurve, LUTf & lightCurveloc, double & huerefblur, double &hueref, double &chromaref, double &lumaref, double &sobelref); void addGaNoise(LabImage *lab, LabImage *dst, const float mean, const float variance, const int sk); void BlurNoise_Localold(int call, const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy); void InverseBlurNoise_Local(const struct local_params& lp, LabImage* original, LabImage* transformed, const LabImage* const tmp1, int cx, int cy); diff --git a/rtengine/iplocallab.cc b/rtengine/iplocallab.cc index a7c5911a0..82cb4efab 100644 --- a/rtengine/iplocallab.cc +++ b/rtengine/iplocallab.cc @@ -764,57 +764,6 @@ static void calcTransitioninv (const float lox, const float loy, const float ach } */ -void ImProcFunctions::strcurv_data(std::string retistr, int *s_datc, int &siz) -{ - //strange function I create to manage curve !! - std::string delim[69] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", - "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", - "&", "#", "{", "[", "]", "}", "$", "*", "?", ">", "!", ";", "<", "(", ")", "+", "-" - }; - - int s_size; - std::size_t posend = retistr.find("@"); - - std::string strend = retistr.substr(posend - 1, 1); - int longe = 0; - - for (int sl = 0; sl < 69; sl++) { - if (delim[sl] == strend) { - longe = sl + 1; - } - } - - s_size = longe; - - int s_datcu[s_size + 1]; - - std::size_t pose[s_size + 1]; - pose[0] = -1; - - for (int z = 1; z < s_size + 1; z++) { - pose[z] = retistr.find(delim[z - 1]); - } - - - for (int z = 1; z < s_size + 1; z++) { - std::string sval = retistr.substr(pose[z - 1] + 1, (pose[z] - pose[z - 1])); - s_datc[z - 1] = s_datcu[z - 1] = std::stoi(sval.c_str()); - - } - - /* - //here to verify process is good - std::string cur_str = ""; - - for(int j = 0; j < s_size; j++) { - cur_str = cur_str + std::to_string(s_datcu[j]) + delim[j]; - } - printf("calc str=%s\n", cur_str.c_str()); - */ - siz = longe; - -} - void ImProcFunctions::ciecamloc_02float(int sp, LabImage* lab, LabImage* dest) { //be carefull quasi duplicate with branch cat02wb @@ -7066,97 +7015,6 @@ void ImProcFunctions::calc_ref(int sp, LabImage * original, LabImage * transform } } -void ImProcFunctions::copy_ref(LabImage * spotbuffer, LabImage * original, LabImage * transformed, int cx, int cy, int sk, const struct local_params & lp, double & huerefspot, double & chromarefspot, double & lumarefspot) -{ - if (params->locallab.enabled) { - -// double precision for large summations - double aveA = 0.; - double aveB = 0.; - double aveL = 0.; - double aveChro = 0.; -// int precision for the counters - int nab = 0; -// single precision for the result - float avA, avB, avL; - // int spotSize = 0.88623f * max (1, lp.cir / sk); //18 - int spotSize = max(1, lp.cir / sk); - - //O.88623 = sqrt(PI / 4) ==> sqare equal to circle - /* - // very small region, don't use omp here - printf ("COPYcy=%i cx=%i yc=%f xc=%f circ=%i spot=%i tH=%i tW=%i sk=%i\n", cy, cx, lp.yc, lp.xc, lp.cir, spotSize, transformed->H, transformed->W, sk); - printf ("COPYymin=%i ymax=%i\n", max (cy, (int) (lp.yc - spotSize)), min (transformed->H + cy, (int) (lp.yc + spotSize + 1)) ); - printf ("COPYxmin=%i xmax=%i\n", max (cx, (int) (lp.xc - spotSize)), min (transformed->W + cx, (int) (lp.xc + spotSize + 1)) ); - */ - for (int y = max(cy, (int)(lp.yc - spotSize)); y < min(transformed->H + cy, (int)(lp.yc + spotSize + 1)); y++) { - for (int x = max(cx, (int)(lp.xc - spotSize)); x < min(transformed->W + cx, (int)(lp.xc + spotSize + 1)); x++) { - - int yb = max(cy, (int)(lp.yc - spotSize)); - // int ye = min (transformed->H + cy, (int) (lp.yc + spotSize + 1)); - - int xb = max(cx, (int)(lp.xc - spotSize)); - // int xe = min (transformed->W + cx, (int) (lp.xc + spotSize + 1)); - - aveL += original->L[y - cy][x - cx]; - int z = y - yb; - int u = x - xb; - spotbuffer->L[z][u] = original->L[y - cy][x - cx]; -// printf("spBUFL=%f ", spotbuffer->L[z][u]); - spotbuffer->a[z][u] = original->a[y - cy][x - cx]; - spotbuffer->b[z][u] = original->b[y - cy][x - cx]; - - aveA += original->a[y - cy][x - cx]; - aveB += original->b[y - cy][x - cx]; - aveChro += sqrtf(SQR(original->b[y - cy][x - cx]) + SQR(original->a[y - cy][x - cx])); - - nab++; - } - } - - aveL = aveL / nab; - aveA = aveA / nab; - aveB = aveB / nab; - aveChro = aveChro / nab; - aveChro /= 327.68f; - avA = aveA / 327.68f; - avB = aveB / 327.68f; - avL = aveL / 327.68f; - huerefspot = xatan2f(avB, avA); //mean hue - chromarefspot = aveChro; - lumarefspot = avL; - } -} - -void ImProcFunctions::paste_ref(LabImage * spotbuffer, LabImage * transformed, int cx, int cy, int sk, const struct local_params & lp) -{ - if (params->locallab.enabled) { - - int nab = 0; - int spotSize = max(1, lp.cir / sk); - - for (int y = max(cy, (int)(lp.yc - spotSize)); y < min(transformed->H + cy, (int)(lp.yc + spotSize + 1)); y++) { - for (int x = max(cx, (int)(lp.xc - spotSize)); x < min(transformed->W + cx, (int)(lp.xc + spotSize + 1)); x++) { - int yb = max(cy, (int)(lp.yc - spotSize)); - // int ye = min (transformed->H + cy, (int) (lp.yc + spotSize + 1)); - - int xb = max(cx, (int)(lp.xc - spotSize)); - // int xe = min (transformed->W + cx, (int) (lp.xc + spotSize + 1)); - - // aveL += original->L[y - cy][x - cx]; - int z = y - yb; - int u = x - xb; - // printf("z=%i u=%i spotbufferL=%f", z, u, spotbuffer->L[z][u]); - transformed->L[y - cy][x - cx] = spotbuffer->L[z][u]; - transformed->a[y - cy][x - cx] = spotbuffer->a[z][u]; - transformed->b[y - cy][x - cx] = spotbuffer->b[z][u]; - nab++; - } - } - - } -} - void ImProcFunctions::fftw_denoise(int GW, int GH, int max_numblox_W, int min_numblox_W, float **tmp1, array2D *Lin, int numThreads, const struct local_params & lp, int chrom) { @@ -7379,7 +7237,7 @@ void ImProcFunctions::fftw_denoise(int GW, int GH, int max_numblox_W, int min_nu void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * original, LabImage * transformed, LabImage * reserved, int cx, int cy, int oW, int oH, int sk, - const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, const LocLLmaskCurve & locllmasCurve, const LocHHmaskCurve & lochhmasCurve, const LocCCmaskexpCurve & locccmasexpCurve, const LocLLmaskexpCurve & locllmasexpCurve, const LocHHmaskexpCurve & lochhmasexpCurve, + const LocretigainCurve & locRETgainCcurve, LUTf & lllocalcurve, const LocLHCurve & loclhCurve, const LocHHCurve & lochhCurve, const LocCCmaskCurve & locccmasCurve, bool & lcmasutili, const LocLLmaskCurve & locllmasCurve, bool & llmasutili, const LocHHmaskCurve & lochhmasCurve, bool &lhmasutili, const LocCCmaskexpCurve & locccmasexpCurve, bool &lcmasexputili, const LocLLmaskexpCurve & locllmasexpCurve, bool &llmasexputili, const LocHHmaskexpCurve & lochhmasexpCurve, bool & lhmasexputili, bool & LHutili, bool & HHutili, LUTf & cclocalcurve, bool & localskutili, LUTf & sklocalcurve, bool & localexutili, LUTf & exlocalcurve, LUTf & hltonecurveloc, LUTf & shtonecurveloc, LUTf & tonecurveloc, LUTf & lightCurveloc, double & huerefblur, double & hueref, double & chromaref, double & lumaref, double & sobelref) { //general call of others functions : important return hueref, chromaref, lumaref @@ -9910,8 +9768,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufexpfin = new LabImage(bfw, bfh); bufexptemp = new LabImage(bfw, bfh); bufcat02fin = new LabImage(bfw, bfh); - bufmaskorigexp = new LabImage(bfw, bfh); - bufmaskblurexp = new LabImage(bfw, bfh); + + if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { + int GWm = transformed->W; + int GHm = transformed->H; + bufmaskorigexp = new LabImage(bfw, bfh); + bufmaskblurexp = new LabImage(bfw, bfh); + originalmaskexp = new LabImage(GWm, GHm); + } #ifdef _OPENMP @@ -9923,12 +9787,16 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufexporig->L[ir][jr] = 0.f; bufexporig->a[ir][jr] = 0.f; bufexporig->b[ir][jr] = 0.f; - bufmaskorigexp->L[ir][jr] = 0.f; - bufmaskorigexp->a[ir][jr] = 0.f; - bufmaskorigexp->b[ir][jr] = 0.f; - bufmaskblurexp->L[ir][jr] = 0.f; - bufmaskblurexp->a[ir][jr] = 0.f; - bufmaskblurexp->b[ir][jr] = 0.f; + + if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { + bufmaskorigexp->L[ir][jr] = 0.f; + bufmaskorigexp->a[ir][jr] = 0.f; + bufmaskorigexp->b[ir][jr] = 0.f; + bufmaskblurexp->L[ir][jr] = 0.f; + bufmaskblurexp->a[ir][jr] = 0.f; + bufmaskblurexp->b[ir][jr] = 0.f; + } + bufexptemp->L[ir][jr] = 0.f; bufexptemp->a[ir][jr] = 0.f; bufexptemp->b[ir][jr] = 0.f; @@ -10057,7 +9925,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o #ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) + // #pragma omp parallel for schedule(dynamic,16) #endif for (int y = 0; y < transformed->H ; y++) //{ @@ -10066,15 +9934,18 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o int loy = cy + y; if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - bufmaskorigexp->L[loy - begy][lox - begx] = original->L[y][x]; - bufmaskorigexp->a[loy - begy][lox - begx] = original->a[y][x]; - bufmaskorigexp->b[loy - begy][lox - begx] = original->b[y][x]; + if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { + bufmaskorigexp->L[loy - begy][lox - begx] = original->L[y][x]; + bufmaskorigexp->a[loy - begy][lox - begx] = original->a[y][x]; + bufmaskorigexp->b[loy - begy][lox - begx] = original->b[y][x]; + bufmaskblurexp->L[loy - begy][lox - begx] = original->L[y][x]; + bufmaskblurexp->a[loy - begy][lox - begx] = original->a[y][x]; + bufmaskblurexp->b[loy - begy][lox - begx] = original->b[y][x]; + } + bufexporig->L[loy - begy][lox - begx] = original->L[y][x]; bufexporig->a[loy - begy][lox - begx] = original->a[y][x]; bufexporig->b[loy - begy][lox - begx] = original->b[y][x]; - bufmaskblurexp->L[loy - begy][lox - begx] = original->L[y][x]; - bufmaskblurexp->a[loy - begy][lox - begx] = original->a[y][x]; - bufmaskblurexp->b[loy - begy][lox - begx] = original->b[y][x]; float valLLexp = 0.f; float valCC = 0.f; @@ -10090,13 +9961,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { - if (locllmasexpCurve) { - valLLexp = (float)(locllmasexpCurve[500.f * (bufexporig->L[loy - begy][lox - begx]) / 32768.f]); + if (locllmasexpCurve && llmasexputili) { + float ligh = (bufexporig->L[loy - begy][lox - begx]) / 32768.f; + valLLexp = (float)(locllmasexpCurve[500.f * ligh]); valLLexp = 1.f - valLLexp; kmaskLexp = 32768.f * valLLexp; } - if (locccmasexpCurve) { + if (locccmasexpCurve && lcmasexputili) { float chromask = 0.0001f + (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))); float chromaskr = chromask / 45000.f; valCC = float (locccmasexpCurve[500.f * chromaskr]); @@ -10106,7 +9978,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } - if (lochhmasexpCurve) { + if (lochhmasexpCurve && lhmasexputili) { float huema = xatan2f(bufexporig->b[loy - begy][lox - begx], bufexporig->a[loy - begy][lox - begx]); float h = Color::huelab_to_huehsv2(huema); h += 1.f / 6.f; @@ -10115,7 +9987,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o h -= 1.f; } - // float chromask = (sqrt(SQR(bufexporig->a[loy - begy][lox - begx]) + SQR(bufexporig->b[loy - begy][lox - begx]))) + 0.0001f; valHH = float (lochhmasexpCurve[500.f * h]); valHH = 1.f - valHH; kmaskHa = valHH; @@ -10123,7 +9994,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o kmaskHL = 32768.f * valHH; } - bufmaskblurexp->L[loy - begy][lox - begx] = CLIP(kmaskLexp + kmaskHL); + bufmaskblurexp->L[loy - begy][lox - begx] = CLIPLOC(kmaskLexp + kmaskHL); bufmaskblurexp->a[loy - begy][lox - begx] = CLIPC(kmaskCa + kmaskHa); bufmaskblurexp->b[loy - begy][lox - begx] = CLIPC(kmaskCb + kmaskHb); @@ -10145,11 +10016,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o gaussianBlur(bufmaskblurexp->a, bufmaskorigexp->a, bfw, bfh, radiusb); gaussianBlur(bufmaskblurexp->b, bufmaskorigexp->b, bfw, bfh, radiusb); } - int GWm = transformed->W; - int GHm = transformed->H; + delete bufmaskblurexp; - originalmaskexp = new LabImage(GWm, GHm); if (lp.showmaskexpmet != 4) { @@ -10174,9 +10043,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if (zone > 0) { - bufexporig->L[loy - begy][lox - begx] += (lp.blendmaexp * bufmaskorigexp->L[loy - begy][lox - begx]); - bufexporig->a[loy - begy][lox - begx] *= (1.f + lp.blendmaexp * bufmaskorigexp->a[loy - begy][lox - begx]); - bufexporig->b[loy - begy][lox - begx] *= (1.f + lp.blendmaexp * bufmaskorigexp->b[loy - begy][lox - begx]); + bufexporig->L[loy - begy][lox - begx] = bufexporig->L[loy - begy][lox - begx] + (lp.blendmaexp * bufmaskorigexp->L[loy - begy][lox - begx]); + bufexporig->a[loy - begy][lox - begx] = bufexporig->a[loy - begy][lox - begx] * (1.f + lp.blendmaexp * bufmaskorigexp->a[loy - begy][lox - begx]); + bufexporig->b[loy - begy][lox - begx] = bufexporig->b[loy - begy][lox - begx] * (1.f + lp.blendmaexp * bufmaskorigexp->b[loy - begy][lox - begx]); bufexporig->L[loy - begy][lox - begx] = CLIP(bufexporig->L[loy - begy][lox - begx]); bufexporig->a[loy - begy][lox - begx] = CLIPC(bufexporig->a[loy - begy][lox - begx]); @@ -10188,6 +10057,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } } + + delete bufmaskorigexp; + } else if (lp.showmaskexpmet == 4) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) @@ -10216,6 +10088,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } + delete bufmaskorigexp; + delete bufexporig; + return; } } @@ -10335,9 +10210,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o delete bufexpfin; delete bufexptemp; delete bufcat02fin; - delete bufmaskorigexp; - delete bufmaskblurexp; - delete originalmaskexp; + + if (lp.showmaskexpmet == 2 || lp.showmaskexpmet == 3 || lp.showmaskexpmet == 4) { + delete originalmaskexp; + } } } @@ -10401,8 +10277,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (call <= 3) { //simpleprocess, dcrop, improccoordinator bufcolorig = new LabImage(bfw, bfh); - bufmaskorigcol = new LabImage(bfw, bfh); - bufmaskblurcol = new LabImage(bfw, bfh); + + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { + bufmaskorigcol = new LabImage(bfw, bfh); + bufmaskblurcol = new LabImage(bfw, bfh); + int GWm = transformed->W; + int GHm = transformed->H; + originalmaskcol = new LabImage(GWm, GHm); + } #ifdef _OPENMP #pragma omp parallel for @@ -10413,12 +10295,16 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o bufcolorig->L[ir][jr] = 0.f; bufcolorig->a[ir][jr] = 0.f; bufcolorig->b[ir][jr] = 0.f; - bufmaskorigcol->L[ir][jr] = 0.f; - bufmaskorigcol->a[ir][jr] = 0.f; - bufmaskorigcol->b[ir][jr] = 0.f; - bufmaskblurcol->L[ir][jr] = 0.f; - bufmaskblurcol->a[ir][jr] = 0.f; - bufmaskblurcol->b[ir][jr] = 0.f; + + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { + bufmaskorigcol->L[ir][jr] = 0.f; + bufmaskorigcol->a[ir][jr] = 0.f; + bufmaskorigcol->b[ir][jr] = 0.f; + bufmaskblurcol->L[ir][jr] = 0.f; + bufmaskblurcol->a[ir][jr] = 0.f; + bufmaskblurcol->b[ir][jr] = 0.f; + } + bufchro[ir][jr] = 0.f; bufchroslid[ir][jr] = 0.f; buflightslid[ir][jr] = 0.f; @@ -10540,7 +10426,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } #ifdef _OPENMP - #pragma omp parallel for schedule(dynamic,16) + // #pragma omp parallel for schedule(dynamic,16) #endif for (int y = 0; y < transformed->H ; y++) //{ @@ -10549,15 +10435,18 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o int loy = cy + y; if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { - bufmaskorigcol->L[loy - begy][lox - begx] = original->L[y][x]; - bufmaskorigcol->a[loy - begy][lox - begx] = original->a[y][x]; - bufmaskorigcol->b[loy - begy][lox - begx] = original->b[y][x]; + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { + bufmaskorigcol->L[loy - begy][lox - begx] = original->L[y][x]; + bufmaskorigcol->a[loy - begy][lox - begx] = original->a[y][x]; + bufmaskorigcol->b[loy - begy][lox - begx] = original->b[y][x]; + bufmaskblurcol->L[loy - begy][lox - begx] = original->L[y][x]; + bufmaskblurcol->a[loy - begy][lox - begx] = original->a[y][x]; + bufmaskblurcol->b[loy - begy][lox - begx] = original->b[y][x]; + } + bufcolorig->L[loy - begy][lox - begx] = original->L[y][x]; bufcolorig->a[loy - begy][lox - begx] = original->a[y][x]; bufcolorig->b[loy - begy][lox - begx] = original->b[y][x]; - bufmaskblurcol->L[loy - begy][lox - begx] = original->L[y][x]; - bufmaskblurcol->a[loy - begy][lox - begx] = original->a[y][x]; - bufmaskblurcol->b[loy - begy][lox - begx] = original->b[y][x]; float valLL = 0.f; float valCC = 0.f; @@ -10572,13 +10461,14 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { - if (locllmasCurve) { - valLL = (float)(locllmasCurve[500.f * (bufcolorig->L[loy - begy][lox - begx]) / 32768.f]); + if (locllmasCurve && llmasutili) { + float ligh = (bufcolorig->L[loy - begy][lox - begx]) / 32768.f; + valLL = (float)(locllmasCurve[500.f * ligh]); valLL = 1.f - valLL; kmaskL = 32768.f * valLL; } - if (locccmasCurve) { + if (locccmasCurve && lcmasutili) { float chromask = 0.0001f + (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); float chromaskr = chromask / 45000.f; valCC = float (locccmasCurve[500.f * chromaskr]); @@ -10587,7 +10477,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o kmaskCb = valCC; } - if (lochhmasCurve) { + if (lochhmasCurve && lhmasutili) { float huema = xatan2f(bufcolorig->b[loy - begy][lox - begx], bufcolorig->a[loy - begy][lox - begx]); float h = Color::huelab_to_huehsv2(huema); h += 1.f / 6.f; @@ -10596,7 +10486,6 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o h -= 1.f; } - // float chromask = 0.0001f + (sqrt(SQR(bufcolorig->a[loy - begy][lox - begx]) + SQR(bufcolorig->b[loy - begy][lox - begx]))); valHH = float (lochhmasCurve[500.f * h]); valHH = 1.f - valHH; kmaskHa = valHH; @@ -10624,11 +10513,7 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o gaussianBlur(bufmaskblurcol->a, bufmaskorigcol->a, bfw, bfh, radiusb); gaussianBlur(bufmaskblurcol->b, bufmaskorigcol->b, bfw, bfh, radiusb); } - int GWm = transformed->W; - int GHm = transformed->H; - - - originalmaskcol = new LabImage(GWm, GHm); + delete bufmaskblurcol; if (lp.showmaskcolmet != 4) { @@ -10654,9 +10539,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (lox >= begx && lox < xEn && loy >= begy && loy < yEn) { if (zone > 0) { - bufcolorig->L[loy - begy][lox - begx] += (lp.blendmacol * bufmaskorigcol->L[loy - begy][lox - begx]); - bufcolorig->a[loy - begy][lox - begx] *= (1.f + lp.blendmacol * bufmaskorigcol->a[loy - begy][lox - begx]); - bufcolorig->b[loy - begy][lox - begx] *= (1.f + lp.blendmacol * bufmaskorigcol->b[loy - begy][lox - begx]); + bufcolorig->L[loy - begy][lox - begx] = bufcolorig->L[loy - begy][lox - begx] + (lp.blendmacol * bufmaskorigcol->L[loy - begy][lox - begx]); + bufcolorig->a[loy - begy][lox - begx] = bufcolorig->a[loy - begy][lox - begx] * (1.f + lp.blendmacol * bufmaskorigcol->a[loy - begy][lox - begx]); + bufcolorig->b[loy - begy][lox - begx] = bufcolorig->b[loy - begy][lox - begx] * (1.f + lp.blendmacol * bufmaskorigcol->b[loy - begy][lox - begx]); bufcolorig->L[loy - begy][lox - begx] = CLIP(bufcolorig->L[loy - begy][lox - begx]); bufcolorig->a[loy - begy][lox - begx] = CLIPC(bufcolorig->a[loy - begy][lox - begx]); @@ -10670,6 +10555,9 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } + + delete bufmaskorigcol; + } else if (lp.showmaskcolmet == 4) { #ifdef _OPENMP #pragma omp parallel for schedule(dynamic,16) @@ -10698,6 +10586,8 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o } } + delete bufmaskorigcol; + delete bufcolorig; return; } @@ -10815,9 +10705,10 @@ void ImProcFunctions::Lab_Local(int call, int sp, float** shbuffer, LabImage * o if (call <= 3) { delete bufcolorig; - delete bufmaskorigcol; - delete bufmaskblurcol; - delete originalmaskcol; + + if (lp.showmaskcolmet == 2 || lp.showmaskcolmet == 3 || lp.showmaskcolmet == 4) { + delete originalmaskcol; + } } } diff --git a/rtengine/procparams.cc b/rtengine/procparams.cc index b27455bd7..dfcf5b099 100644 --- a/rtengine/procparams.cc +++ b/rtengine/procparams.cc @@ -2370,9 +2370,9 @@ LocallabParams::LocallabSpot::LocallabSpot() : cccurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, LHcurve{(double)FCT_MinMaxCPoints, 0.0, 0.50, 0.35, 0.35, 0.166, 0.50, 0.35, 0.35, 0.333, 0.50, 0.35, 0.35, 0.50, 0.50, 0.35, 0.35, 0.666, 0.50, 0.35, 0.35, 0.833, 0.50, 0.35, 0.35}, HHcurve{(double)FCT_MinMaxCPoints, 0.0, 0.50, 0.35, 0.35, 0.166, 0.50, 0.35, 0.35, 0.333, 0.50, 0.35, 0.35, 0.50, 0.50, 0.35, 0.35, 0.666, 0.50, 0.35, 0.35, 0.833, 0.50, 0.35, 0.35}, - CCmaskcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, - LLmaskcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, - HHmaskcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, + CCmaskcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.00, 1.0, 0.35, 0.35 }, + LLmaskcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.00, 1.0, 0.35, 0.35 }, + HHmaskcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.00, 1.0, 0.35, 0.35 }, invers(false), // Exposure expexpose(false), @@ -2387,9 +2387,9 @@ LocallabParams::LocallabSpot::LocallabSpot() : blurexpde(5), excurve{(double)DCT_NURBS, 0.0, 0.0, 1.0, 1.0}, showmaskexpMethod("none"), - CCmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, - LLmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, - HHmaskexpcurve{(double)FCT_MinMaxCPoints, 0., 1., 0.35, 0.35, 1., 1., 0.35, 0.35}, + CCmaskexpcurve{(double)FCT_MinMaxCPoints,0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35 }, + LLmaskexpcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35}, + HHmaskexpcurve{(double)FCT_MinMaxCPoints, 0.0, 1.0, 0.35, 0.35, 0.50, 1.0, 0.35, 0.35, 1.0, 1.0, 0.35, 0.35}, blendmaskexp(0), // Vibrance diff --git a/rtengine/simpleprocess.cc b/rtengine/simpleprocess.cc index 53abafeb2..a9649f5c8 100644 --- a/rtengine/simpleprocess.cc +++ b/rtengine/simpleprocess.cc @@ -1111,15 +1111,21 @@ private: bool localcutili = false; bool localskutili = false; bool localexutili = false; + bool llmasutili = false; + bool lcmasexputili = false; + bool lhmasexputili = false; + bool llmasexputili = false; + bool lcmasutili = false; + bool lhmasutili = false; locRETgainCurve.Set(params.locallab.spots.at(sp).localTgaincurve); loclhCurve.Set(params.locallab.spots.at(sp).LHcurve, LHutili); lochhCurve.Set(params.locallab.spots.at(sp).HHcurve, HHutili); - locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve); - locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve); - lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve); - locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve); - locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve); - lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve); + locccmasCurve.Set(params.locallab.spots.at(sp).CCmaskcurve, lcmasutili); + locllmasCurve.Set(params.locallab.spots.at(sp).LLmaskcurve, llmasutili); + lochhmasCurve.Set(params.locallab.spots.at(sp).HHmaskcurve, lhmasutili); + locccmasexpCurve.Set(params.locallab.spots.at(sp).CCmaskexpcurve, lcmasexputili); + locllmasexpCurve.Set(params.locallab.spots.at(sp).LLmaskexpcurve, llmasexputili); + lochhmasexpCurve.Set(params.locallab.spots.at(sp).HHmaskexpcurve, lhmasexputili); CurveFactory::curveLocal(locallutili, params.locallab.spots.at(sp).llcurve, lllocalcurve, 1); CurveFactory::curveCCLocal(localcutili, params.locallab.spots.at(sp).cccurve, cclocalcurve, 1); CurveFactory::curveskLocal(localskutili, params.locallab.spots.at(sp).skintonescurve, sklocalcurve, 1); @@ -1145,7 +1151,7 @@ private: hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, avg, 1); - ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, locllmasCurve, lochhmasCurve, locccmasexpCurve, locllmasexpCurve, lochhmasexpCurve, + ipf.Lab_Local(2, sp, (float**)shbuffer, labView, labView, reservView, 0, 0, fw, fh, 1, locRETgainCurve, lllocalcurve, loclhCurve, lochhCurve, locccmasCurve, lcmasutili, locllmasCurve, llmasutili, lochhmasCurve, lhmasutili, locccmasexpCurve, lcmasexputili, locllmasexpCurve, llmasexputili, lochhmasexpCurve, lhmasexputili, LHutili, HHutili, cclocalcurve, localskutili, sklocalcurve, localexutili, exlocalcurve, hltonecurveloc, shtonecurveloc, tonecurveloc, lightCurveloc, huerefblu, huere, chromare, lumare, sobelre); // Clear local curves