eddy_em: (Костерок)
eddy_em ([personal profile] eddy_em) wrote2017-02-01 08:32 am
Entry tags:

Дебайеризация

Что-то сильно расхваливаемый авторами алгоритм дебайеризации дает довольно-таки много артефактов:
BGGR
Работает, кстати, медленно. Код мало того, что не оптимизирован, так еще и авторы зачем-то почти чистый (ну, заменить new на malloc, а delete на free — и будет совсем чистый) сишный код в cpp файлы запихали.
Ищу дальше...

[identity profile] alextutubalin.livejournal.com 2017-02-01 03:31 pm (UTC)(link)
Сишный пример libraw лежит там в каталоге samples/

Их там аж три.

Но скорее всего с наскоку - вашу камеру не распознает, надо строчку добавить по типу тех, что описывают андроидные дампы сенсора.

[identity profile] eddy-em.livejournal.com 2017-02-01 03:41 pm (UTC)(link)
Спасибо, посмотрю. Камеру мне не надо распознавать (да и не распознает ее эта штука: я, похоже, первый, кто сделал на С интрфейс к этой камере), мне надо с сырым набором байтов работать.

[identity profile] alextutubalin.livejournal.com 2017-02-01 04:22 pm (UTC)(link)
Такие камеры системы "дамп данных с сенсора" мы распознаем исключительно по размеру файла.

[identity profile] eddy-em.livejournal.com 2017-02-02 07:38 am (UTC)(link)
Судя по примерам и документации, использовать эту библиотеку с наскока не получится: только выдирать нужные функции и компоновать отдельно. А жаль...

[identity profile] alextutubalin.livejournal.com 2017-02-02 07:50 am (UTC)(link)
Добавить поддержку дампа пикселов для конкретной камеры
- или +1 строчка в коде
- или подать фактически эту же строчку в parse_custom_cameras() и подсунуть потом в параметры.

Но мне нужен этот дамп (не так чтобы очень нужен - можете трахаться сами если предпочитаете так)

[identity profile] eddy-em.livejournal.com 2017-02-02 07:59 am (UTC)(link)
В каком виде нужен дамп? Бинарный файл или текстовый с hex?

[identity profile] alextutubalin.livejournal.com 2017-02-02 08:08 am (UTC)(link)
Бинарный.

Прямо вот такой какой libraw будем подсовывать.

Я ж написал там выше (про порядок байт и тп)

[identity profile] eddy-em.livejournal.com 2017-02-02 08:36 am (UTC)(link)
Для этой картинки: https://drive.google.com/open?id=0B859YEB17d8vdzZZbk8zRmZ6S0E
дамп: https://drive.google.com/open?id=0B859YEB17d8veDVlUUpJNzJsXzg

Формат uint16_t, little endian, 640x480 пикселей, сохранено построчно. Экспозиция 0.5с. Получился эдакий псевдофлэт (морду я обмотал белой бумагой).
Edited 2017-02-02 08:38 (UTC)

[identity profile] alextutubalin.livejournal.com 2017-02-02 12:07 pm (UTC)(link)
Это не псевдофлет, это тотальный пересвет.

Вот патчик к LibRaw (к dcraw.c тоже подойдет, найдете там эту табличку в identify() и руками поставите), дамп совпадает по размеру с сенсором Kodak KAI-0340, поэтому кодак я закомментировал:

diff --git a/internal/dcraw_common.cpp b/internal/dcraw_common.cpp
index 4738c29..df78fde 100644
--- a/internal/dcraw_common.cpp
+++ b/internal/dcraw_common.cpp
@@ -15318,7 +15318,8 @@ void CLASS identify()
{12241200, 4040, 3030, 2, 0, 0, 13, 0, 0x49, 0, 0, "Kodak", "12MP"},
{12272756, 4040, 3030, 2, 0, 0, 13, 0, 0x49, 0, 0, "Kodak", "12MP", 31556},
{18000000, 4000, 3000, 0, 0, 0, 0, 0, 0x00, 0, 0, "Kodak", "12MP"},
- {614400, 640, 480, 0, 3, 0, 0, 64, 0x94, 0, 0, "Kodak", "KAI-0340"},
+// {614400, 640, 480, 0, 3, 0, 0, 64, 0x94, 0, 0, "Kodak", "KAI-0340"}, // Same size, so disable Kodak for it
+ {614400, 640, 480, 0, 0, 0, 0, 0, 0x94, 0, 0, "Some", "Shit"},
{15360000, 3200, 2400, 0, 0, 0, 0, 96, 0x16, 0, 0, "Lenovo", "A820"},
{3884928, 1608, 1207, 0, 0, 0, 0, 96, 0x16, 0, 0, "Micron", "2010", 3212},
{1138688, 1534, 986, 0, 0, 0, 0, 0, 0x61, 0, 0, "Minolta", "RD175", 513},


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

Следующим сообщением - скриншоты из RawDigger (может упасть в спам - поэтому отдельным)

[identity profile] eddy-em.livejournal.com 2017-02-02 01:32 pm (UTC)(link)
Сделал, скомпилировал, запускаю ./simple_dcraw dump.bin — получается черт-те что:
Edited 2017-02-02 13:32 (UTC)

[identity profile] alextutubalin.livejournal.com 2017-02-02 01:48 pm (UTC)(link)
Кодак не закомментировали?

Это егонный декодер срабатывает, я такую картинку уже видал сегодня

[identity profile] eddy-em.livejournal.com 2017-02-02 01:58 pm (UTC)(link)
А, черт! Я названия оставил — не думал, что повлияют. Поменял и их, получилось вот что:


Вполне прилично. Разве что цветовые профили надо пилить. Но скорость, конечно, намного выше, чем в алгоритме Buades & Co.
Edited 2017-02-02 14:02 (UTC)

[identity profile] alextutubalin.livejournal.com 2017-02-02 02:03 pm (UTC)(link)
Повлияют.

Там по make/model потом разруливается.

Очень это хрупкое место и черезжопное - разбор raw имени dcraw (а мы оттуда много наследуем)

[identity profile] alextutubalin.livejournal.com 2017-02-02 02:04 pm (UTC)(link)
Ну и снимите светофор о трех цветах (подписанных, где красный, где какой).

Потому что у меня вот нет уверенности, что там CFA pattern сейчас правильная.

[identity profile] eddy-em.livejournal.com 2017-02-02 02:10 pm (UTC)(link)
Могу в стандартных фильтрах b, v и r снять. Я как раз турельку с ними собрал — сегодня думали проницаемость тракта спектрографа замерить.

[identity profile] eddy-em.livejournal.com 2017-02-02 03:16 pm (UTC)(link)
Понаснимал:
https://drive.google.com/open?id=0B859YEB17d8vSjdoMUhYTDRtbzQ

В фильтрах B,V и R экспозиция по 2 секунды. Фильтры — стандартные джонсоновские.
Еще приложил дампы дарков: 2, 10, 100 и 300 секунд.
Судя по статистике, bias где-то на уровне 1400. Шум примерно на уровне 0.24 отсчета в секунду.

[identity profile] alextutubalin.livejournal.com 2017-02-02 03:37 pm (UTC)(link)
А чего у них размер внезапно не тот что был?

[identity profile] eddy-em.livejournal.com 2017-02-02 03:55 pm (UTC)(link)
Это обрезанный вариант. Там четыре варианта есть: полномасштабный, обрезанный, биннинг 2х2 и фрейм (до 127х127 пикселей). Камера умеет сама дарки вычитать для второго и третьего вариантов.
Edited 2017-02-02 15:56 (UTC)

[identity profile] alextutubalin.livejournal.com 2017-02-02 04:07 pm (UTC)(link)
Обрезанному варианту нужна другая строчка.

Надеюсь, вы сумеете ее сделать по образу и подобию

[identity profile] alextutubalin.livejournal.com 2017-02-02 12:09 pm (UTC)(link)
В диггере я это вижу так: https://www.dropbox.com/s/5j0otqfjqtx4dst/Screenshot%202017-02-02%2015.08.03.png?dl=0

А гистограмма, ну как и глазом видно, тотальная засветка, легли на максимум АЦП (или какой еще максимум) везде: https://www.dropbox.com/s/0hsxqrrnw34fq7n/Screenshot%202017-02-02%2015.08.58.png?dl=0

[identity profile] alextutubalin.livejournal.com 2017-02-02 12:12 pm (UTC)(link)
В-общем, в dcraw закомментируйте kodak, добавьте мою строчку, если я там не угадал (я и не угадывал, скопипастил) паттерн, то возможные значения 9-го поля:

0x94, 0x49, 0x16, 0x61 (в принципе, если два зеленых отличаются, то возможны еще варианты).

Ну или дайте что-нибудь цветное с известным цветом (только ярким, идеально чтобы было и красное и зеленое и синее яркие в кадре) - подберу сам.

[identity profile] alextutubalin.livejournal.com 2017-02-02 12:13 pm (UTC)(link)
Ну и темновые кадры нужны, кстати.

На нормальной выдержке и на минимально короткой. Оценить bias (уровень черного) и тоже в табличку добавить, иначе линейность уползет.

[identity profile] eddy-em.livejournal.com 2017-02-02 01:10 pm (UTC)(link)
Спасибо, попробую сделать.
Чуть позже выложу кадры.