Dash & Cam - Форум для обсуждения видеорегистраторов и экшн-камер

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Table Editor v1.0 (by v_max)

Сообщений 1 страница 23 из 23

1

Утилита от камрада v_max для создания и редактирования кривых RGB в прошивках Ambarella.


1. Table Editor v1.0.0
2. Table Editor v1.0.0+Preview
3. Table Editor v1.0.1+Preview Обновлено 26.07.2018


Описание от автора...

Кто хочет попробовать...
Вот сырая не оттестированая версия редактора на попроб
Что бы запустить нужна установленная java 1.8 (JRE)

Сам редактор: https://drive.google.com/file/d/1aUQupW … b5Eva/view
Распаковать зип.. запустить run.bat...
Ну или из коммандной строки
>java -jar TableEditor-1.0-SNAPSHOT.jar

1. С помощью AE распаковываем на секции и распаковываем ROM
2. запускаем run.bat
3. В открвшемся окошке в меню файл -> Select File выбираем файл (например adj_video_default_00_Imx117)
4. В поле Addr проставляем адрес начала тройки RGB табличек и жмем Load - загружаем сырые данные тройки из выбранного файла
5. Жмем Raw->Curve  (обрабатывает входной массив алгоритмом дугласа-пеккера для выделения ключевых точек максимального отклонения)
по этим точкам строится кубический сплайн - получаем кривые

Ну и дальше можно работать...
Правой кнопкой мыши можно добавить удалить точку (поиск в радиусе 5пикселей от точки нажатия)
Можно таскать существующие точки
Внизу есть выключатели RGB. изменения (удаление, вставка, перемещение) делаются только для включеных каналов.
Пара выключателей Raw и Сurve управляют только отображением.
Через меню копирования можно копировать каналы один в другой или сразу в два других
Копировать можно как исходные (RAW) так и кривые..
Через меню файлов можно экспортировать как сырые данные тройки в отдельный файлик так и импортировать из файлика...
То же самое для кривых... В операциях экспорта и импорта участвуют все каналы тройки.

Когда вас удовлетворит вид кривых надо нажать Curve->Raw (создать сырые массивы из кривых)
Ну а потом можно нажать Save для записи в то место откуда эти данные былы загружены..
Ну а если поменять адрес (или даже выбрать другой файл) то можно записать по другому адресу или в другой файл...

А... ну и данные в табличке справа тоже можно редактировать...
При вводе будет создан узел кривой если его еще нет в этой точке или изменен существующий

Ну как-то так...
Побыстрому описал...
Чего не хватит говорите... допилим

Собирать прошивку обратно не пробовал еще ;)))

ЗЫ дуракоупоротостью не заморачивался. От дурных действий возможны непредсказуемые ошибки.


http://s7.uploads.ru/t/BzIrD.jpg

+1

2

v_max написал(а):

Жмем Raw->Curve  (обрабатывает входной массив алгоритмом
дугласа-пеккера для выделения ключевых точек максимального отклонения)
по этим точкам строится кубический сплайн - получаем кривые


Сама суть правки мышкой и экспортом кривой это ж просто красота...)

Просто поудалял точки, выставил новые, подвигал и экспортнулось всё как и нарисовано.
Хотя можно не открывать файл, а  нарисовать новую кривую и просто экспортировать её.
Низкий поклон за утилиту и грандиозную экономию времени, мил человек!

+1

3

Kaliningrad написал(а):

v_max написал(а):
    Жмем Raw->Curve  (обрабатывает входной массив алгоритмом
    дугласа-пеккера для выделения ключевых точек максимального отклонения)
    по этим точкам строится кубический сплайн - получаем кривые
На данном этапе появляется своеобразная кривая, отличная от реальной.
http://s7.uploads.ru/t/BzIrD.jpg


Суть операции...
Сначала фильтруются точки алгоритмом дугласа пеккера - т.е. находятся узловые точки а промежуточные  (удаление которых от прямой не превышает 0.5 единицы)  выкидываются, т.е. строится ЛИНЕЙНАЯ аппроксимация. А потом по узлам линейной аппроксимации строится кубический сплайн
для 'гладкой' без изломов сшивки.
Вот как раз на втором этапе возможны значительные отклонения от исходной если есть значительные переломы по углу на линейной аппроксимации
Можно конечно ограничиться только кусочно линейной аппроксимацией вместо кубической но не будет 'гладкой' без изломов сшивки участков.

ЗЫ... понятно почему ее так сломило ... по адресу 2125,2126 подряд два узла получились ... т.е. там получился горизонтальный отрезок ...
Видимо я переборщил с жестким условием на отклонение в дуглас-пекере  (0.5)... надо поставить 1.0 ,
что бы не получались совсем подряд идущие узловые точки из за ошибок округления до целых значений
Вечером поправлю... перезалью...

Калининград, Хочу добавить возможность визуально оценивать изменения на фото при редактировании кривых.
А нет ли у тебя хорошей готовой фотки с полным или близким к оному диапазоном яркостей от черного до белого снятая в RAW режиме на нашей камере?
Т.е. мне на входе надо бы как бы сырые данные кадра  до обработки кривыми что бы показать что получится после

Отредактировано v_max (24.07.2018 06:42:51)

+2

4

v_max, буду за ПК, скину. Визуализация liveview - очень хорошая задумка...
Можно работать по скрину с видео. Корректнее будет результат на выходе.

Пока такой RAW: https://yadi.sk/d/nzC9gUms3ZWbUA
Буду в городе, сниму другие планы, если нужно...

+1

5

Kaliningrad написал(а):

v_max, буду за ПК, скину. Визуализация liveview - очень хорошая задумка...
Можно работать по скрину с видео. Корректнее будет результат на выходе.

В идеале для такого скрина  видео надо  снять на прошивке с прямой линией в табличках тогда результат предпросмотра будет похож на правду
(т.е. на то что будет на выходе)

А про этот скриншот ... Это он реально в раве такой синюшный получается или это у меня проблемы с просмотром dng?
Если реально такой то ... вопрос к нормальным цветам его этими кривыми дотягивает или где-то другими настройками гамма подстраивается?

0

6

v_max написал(а):

А про этот скриншот ... Это он реально в раве такой синюшный получается или это у меня проблемы с просмотром dng?


Это обычный внутрикамерный RAW, сконвертированный в DNG.
В Adobe Camera RAW криминала нет...
Поэтому правильнее будет ориентироваться по стоковому скриншоту.

Ранее я просто брал скрин с видео и подбирал кривизну в обычном вьюере.
http://s7.uploads.ru/t/E2S6s.jpg
После выстраивал новую кривую, перезаписывал и сравнивал результаты.
Теперь это можно делать быстрее...)

+1

7

Kaliningrad написал(а):

Поэтому правильнее будет ориентироваться по стоковому скриншоту.
Ранее я просто брал скрин с видео и подбирал кривизну в обычном вьюере.
http://s7.uploads.ru/t/E2S6s.jpg
После выстраивал новую кривую, перезаписывал и сравнивал результаты.
Теперь это можно делать быстрее...)

Примерно так но есть нюанс...
Если скриншот сделан на прошивке в которой УЖЕ кривая а не прямая..
то в превью визуальный результат будет суммой кривой из пршивки (данные картинки то на нее уже помножены) и кривой из программулины
Получается тогда надо строить новую кривую как сумму исходной (из прошивки)  и нарисованной.
Точнее как сумму отклонений этих кривых от диагональной прямой

Поэтому в идеале в качестве сэмпла для визуальной подстройки нужен кадр сделаный с прямой кривой в прошивке...
тогда ее отклонение будет нулевым по всей длинне и можно не заморачиваться вычислением сумм.
(т.е пересчетом влияния той кривой на которой был снят скриншот)

Отредактировано v_max (24.07.2018 14:53:50)

0

8

Можно просто каждый раз подгружать скриншот прошивки с конкретной
кривой и уже относительно неё смотреть изменения в кадре.
Зачем ограничивать себя только прямой исходной?

0

9

Kaliningrad написал(а):

Можно просто каждый раз подгружать скриншот прошивки с конкретной
кривой и уже относительно неё смотреть изменения в кадре.
Зачем ограничивать себя только прямой исходной?
Подпись автора


Можно... хоть и заморочно.. 
Как вариант брать кривую из исходной прошивки. Только вот которую.. хрен знает... их там несколько файлов по несколько троек...
и какой скриншот с какой был сделан... а фиг его знает ж)

0

10

v_max написал(а):

Только вот которую.. хрен знает


Для коррекции достаточно взять только вторую тройку кривых (в случае Т5).
Именно она привносит максимальные изменения.
Хотя уже ничего не стОит менять всё, что заблагорассудится...)

0

11

v_max написал(а):

В идеале для такого скрина  видео надо  снять на прошивке с прямой линией в табличках тогда результат предпросмотра будет похож на правду
(т.е. на то что будет на выходе)

А про этот скриншот ... Это он реально в раве такой синюшный получается или это у меня проблемы с просмотром dng?
Если реально такой то ... вопрос к нормальным цветам его этими кривыми дотягивает или где-то другими настройками гамма подстраивается?


RAW полученный с помощью скрипта прогоняют через конвертер и DNG есть куча всего от ББ до кривых. Поэтому за исходные данные для превью DNG не совсем подойдет.

И вот мы подходим к самому интересному =) Что было раньше с картинкой до кривых? Одно точно известно, кроме этого инструмента есть еще 3DLUT...

0

12

molexey написал(а):

Одно точно известно, кроме этого инструмента есть еще 3DLUT...


И Color 3D есть, и Black Level, и LUT Control, и AWB LUT, и много всячины всякой...
И сочетаний всех этих прелестей есть множество великое...)

molexey написал(а):

И вот мы подходим к самому интересному =) Что было раньше с картинкой до кривых?


Это один из первых экспериментов с кривыми:
http://sg.uploads.ru/t/tOB3o.jpg http://s9.uploads.ru/t/bBSnI.jpg

0

13

1. Подстроил дельту в алгоритме  дуглас-пеккера что бы не так жестко отклонения считал на ошибках округления до целого и не рожал таких артефактов
2. Допилил живое превью на образчике..
т.е. теперь можно смотреть как было и как будет с новыми кривыми
Что бы исключить влияние тех кривых на которых был снят сэмпл  надо сначала экспортнуть RGB таблички из той прошивки на которой образец (скриншот) был снят
а потом при подгрузке картинки сэмпла подгрузить их  тоже ( в меню превью загрузка сэмпла и его кривых) 
Тут есть ограничение... поскольку для вычитания влияния исходных кривых нужно преобразование обратное то надо делать реверсную таблицу из экспортнутых данных
Это возможно только в том случае если данные монотонно возрастающие ... т.е. каждое следующее значение не меньше предыдущего в исходной таблице...
Вобщем то по жизни оно так и есть (должно быть)... но ничто же не мешает в таблицу с дуру фигню немонотонную напихать ж)
Короче при попытка построить реверсную функцию из немонотонной таблички будет ошибка... ну и фиг бы с ним

3. Залил на гуглодрайве в директорию так что теперь нет необходимости каждый раз ссылку обновлять при апдейтах.
Ссылка на директорию https://drive.google.com/drive/folders/ … sp=sharing останется неизменной

Калининград, поправь в шапочном посте ссылку на эту плиз )

Отредактировано v_max (25.07.2018 20:51:55)

+3

14

v_max, дабы не возникло вопросов как смотреть изменения и пользоваться в целом,
опиши нам как чайникам пошагово, а ещё лучше и с видеопримером, если есть такая возмжность.
Полагаю, это отсеет 99% ненужных вопросов...

0

15

"Слона-то" я и не приметил (обведённое красным)...)))
На кривую не обращаем внимания. Она чисто для примера просмотра изменений...
http://s7.uploads.ru/t/JxERn.jpg

Всё становится ещё удобнее...
На примере А7:
http://s7.uploads.ru/t/X3fNv.gif

0

16

Kaliningrad написал(а):

Всё становится ещё удобнее...

Если что-то неудобно или не хватает то говорите.
Подумаем как допилить...

Мне сейчас 'для чайников' надо систематизировать знания какая тройка  в каких ситуациях применяется
т.е. понять как и по каким параметрам происходит выбор файла и тройки.
Что бы не в слепую случайные таблички редактировать а осмысленно выбирать нужную
Есть догадки что это скорее всего может зависеть от режима WB, сцены и/или эффектов 

т.е. мне нужна табличка вида

файл |  адрес ( или номер тройки) |  условия применения

для видео и такая-же для фото

Тогда можно будет встроить осмысленно именованные пресеты настроек для загрузки/выгрузки таблиц в в файлы прошивки
Пока нужна конкретно для T5E ... откатаем на ней можно будет расширить и наборами пресетов для других аппаратов

Если таких знаний в готовом виде нет .... то есть мысли как их нарыть....
1. понять от чего зависит выбор файла..
Есть три файла для видео... В первом файле портим все три таблички красного, во втором файле все три таблички зеленого ну а в третьем синего.
В настройках отключаем все авто настройки переводя их в ручной режим (баланс белого итп)
Снимаем в разных разрешениях и смотрим что и как испортилось... Это что-бы понять зависит ли выбор файла от режима видео.
Если зависит (испортилось поразному ) то пытаемся понять в каком режиме какой файл использовался
Если во всех режимах попортилось одинаково то значит от режима видео выбор файла не зависит.
Тогда пытаемся понять зависит ли это от WB отсняв сэмплы с разными настройками WB
или от сценария сняв сэмплы с разными сценариями или от эффекта опять таки сняв сэмплы на разных эффектах...
2. Понять от чего зависит выбор тройки внутри файла...
Во всех трех файлах одинаково портим тройки... в первой тройке - красный, во второй тройке зеленый, в третьей синий.
И так одинаково во всех трех файлах....
Аналогично пункту первому снимаем сэмплы что бы понять от чего зависит выбор тройки ВНУТРИ файла
Тут чуть меньше шагов потребуется поскольку то что уже определили в первом пункте можно исключить из вариативности проверок.

Систематизируем результат и формулируем правило выбора тройки...

Есть энтузиасты готовые помочь с такими исследованиями?

Отредактировано v_max (26.07.2018 06:23:49)

+1

17

v_max написал(а):

Есть три файла для видео...
В первом файле портим все три таблички красного,
во втором файле все три таблички зеленого ну а в третьем синего.


Была мысля такая, чтобы конкретно разграничить и понять влияние каждого в отдельности файла.
И, как всегда, то лень, то некогда...)

v_max написал(а):

Есть энтузиасты готовые помочь с такими исследованиями?


Ты, да я, да мы с тобой...)
Мало нас тут таких...

0

18

v_max написал(а):

Есть энтузиасты готовые помочь с такими исследованиями?

Kaliningrad написал(а):

v_max написал(а):
Ты, да я, да мы с тобой...)
Мало нас тут таких...


Эхххх... все приходится делать самому ;-)
Короче записывайте...

Номер файла [0..2] зависит от разрешения (разрешение - номер файла)
4K30     0
4K25SW   0
2.7K30   0
2.7K30SW 0
2.5K60   2
2.5K30   2
FHD120   1
FHD60    2
FHD30    2
FHD60SW  2
HD*240   0
HD*120   0
HD*60    0
HD*30    0
HD120SW  0
HD30SW   0

Номер тройки в файле [0..2] зависит от scene
Normal = 1
Flash = 1
Night = 0
Sports=0
Landscape = 0
Portrait = 0
Sunset= 0

Изменений от WiteBalance, Effect, FOV, EIS, Sharpness, VideoQuality, DistortionCorrection, Shrpeness
не наблюдается...

Заставить камеру задействовать последнюю тройку из трех (с индексом 2) мне не удалось никак ;(
Возможно она для более низких разрешений или HDR которых у нас нет

Отредактировано v_max (26.07.2018 18:44:02)

+3

19

Пока со всем этим ковырялся обнаружил пару мелких косячков в редакторе...

1. при удалении всех узлов когда остается две точки кубический сплайн уже неприменим и все простоперестает интерполировать.. ну и подвигать концы не получается...
Вставил линейный при двух точках
2. в табличке хексов неправильно отображались адреса если стартовый адрес сменить на другую тройку...

Короче вычинил и перезалил..
Версия 1.0.1 лежит там-же

Отредактировано v_max (26.07.2018 20:01:39)

+2

20

v_max написал(а):

Эхххх... все приходится делать самому


Реверc-инжиниринг он такой =) нужно сломать, а потом понять что именно сломалось.

Эх было весело править прошивку без ELF файла и ведь не кирпичнул ни разу.

Кстати, я же говорил, что кривые в сцене задаются. Поэтому на T5 это полезная штука (для ночи и дня). А на Mijia просто нет сцен в меню, но есть три типа adj_video и используется первая тройка кривых всегда.

+2

21

molexey
Это теперь лехко проверить.. Редактором напилить разных таблиц лехко...
на свои 9 троек в общем случае я зафигачил 9 разных кривых..
В первых трёх оставив по одному цвету , в следующих трех по два в разных комбинациях, а в оставшихся трех сделал инверсные кривые опять таки по одному цвету в каждой. Т. е. за раз в одной прошивке по-разному сломал все таблички так что это сразу видно визуально причем уже на экранчике.. нет нужды даже сэмплы снимать что бы понять какая  включилась...
Эту логику порчи при необходимости легко расширить до 12 вариантов (добавив инверсные кривые для каждой пары цветов)
+ есть еще 6 комбинаций типа один цвет прямой второй инверсный ... итого можно зараз до 18 троек запортить
так что их легко визуально идентифицировать...
Ну и дальше играемся настройками и смотрим какая из кривых при каких комбинациях включается

На все про все вчера ушло меньше пары часов... 
Большая часть времени на вдумчивый перебор всех настроек камеры которые потенциально могут влиять на выбор
и контрольный перебор по второму кругу  выявленных зависимостей для проверки ...

Отредактировано v_max (27.07.2018 05:32:35)

+1

22

Вчерась сделал все кривые прямолинейными... сегодня поснимал...
Как-то прям даже неплохо получается... образчик 1080[dog]60
https://drive.google.com/open?id=1nt2Fo … 7sHMnDeVRf

+2

23

v_max написал(а):

сделал все кривые прямолинейными


Я как-то в самом начале пути с кривыми делал такое, но результат мне не понравился.
Больше не повторял. А тут картина совсем иная вышла. Хрен поймёшь эту Амбареллу...)

+1