Дебайеризация
Feb. 1st, 2017 08:32 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Что-то сильно расхваливаемый авторами алгоритм дебайеризации дает довольно-таки много артефактов:

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

Работает, кстати, медленно. Код мало того, что не оптимизирован, так еще и авторы зачем-то почти чистый (ну, заменить new на malloc, а delete на free — и будет совсем чистый) сишный код в cpp файлы запихали.
Ищу дальше...
no subject
Date: 2017-02-01 10:11 am (UTC)no subject
Date: 2017-02-01 11:35 am (UTC)Может быть сойдет тупая билинейная интерполяция.
Вообще же, главное — не цветную картинку получить (толку от нее 0), а как можно лучше избавиться от влияния этой дурацкой маски Байера. Я вообще поражаюсь: какой мудак мог придумать наклеивать на all-sky камеру фильтр Байера?! Дело в том, что для упрощения вычисления координат звезд фон желательно сделать равномерным.
Хотя, может быть сойдет и такой вариант: тупо уменьшить разрешение в 2 раза, сложив значения пикселей в каждом квадрате, а по результирующему изображению уже звезды искать и определять процент облачности. Я даже на подобное именно для этой матрицы натыкался, но там было для питона, что совсем нехорошо.
no subject
Date: 2017-02-01 04:10 pm (UTC)было еще что то где совсем как электронная таблица изображение открывалось... но склероз мешает вспомнить :(
no subject
Date: 2017-02-01 05:22 pm (UTC)no subject
Date: 2017-02-01 11:40 am (UTC)Может попробовать Тутубалинский LibRaw, который на базе dcraw, если правильно помню ...
no subject
Date: 2017-02-01 11:48 am (UTC)no subject
Date: 2017-02-01 12:03 pm (UTC)no subject
Date: 2017-02-01 12:23 pm (UTC)В принципе, учитывая то, что изображение неба — это практически один сплошной фон, можно попробовать элементарнейшим образом сделать: компоненты R, G и B по-отдельности (соответственно, уменьшенное в 4 раза изображение; компоненту G брать как среднее в каждом квадрате) усреднить медианой 3х3, таким образом получить значения дополнительных цветов в каждом квадрате. Оригинальные компоненты оставлять без изменения, а к ним добавлять полученные дополнительные. В итоге и звезды останутся на изображении, и цвет будет.
Попробую этот алгоритм завтра.
no subject
Date: 2017-02-01 01:08 pm (UTC)no subject
Date: 2017-02-01 01:25 pm (UTC)no subject
Date: 2017-02-01 01:56 pm (UTC)no subject
Date: 2017-02-01 02:01 pm (UTC)Он у меня, оказывается, установлен.
Полистал исходники. Испугался и закрыл: 10200 с хвостиком строк в одном файле! Автор — точно наркоман!
no subject
Date: 2017-02-01 03:08 pm (UTC)Да, у libraw автор нет то, что и у dcraw ;)
no subject
Date: 2017-02-01 03:31 pm (UTC)Их там аж три.
Но скорее всего с наскоку - вашу камеру не распознает, надо строчку добавить по типу тех, что описывают андроидные дампы сенсора.
no subject
Date: 2017-02-01 03:41 pm (UTC)no subject
Date: 2017-02-01 04:22 pm (UTC)no subject
Date: 2017-02-02 07:38 am (UTC)no subject
Date: 2017-02-02 07:50 am (UTC)- или +1 строчка в коде
- или подать фактически эту же строчку в parse_custom_cameras() и подсунуть потом в параметры.
Но мне нужен этот дамп (не так чтобы очень нужен - можете трахаться сами если предпочитаете так)
no subject
Date: 2017-02-02 07:59 am (UTC)no subject
Date: 2017-02-02 08:08 am (UTC)Прямо вот такой какой libraw будем подсовывать.
Я ж написал там выше (про порядок байт и тп)
no subject
Date: 2017-02-02 08:36 am (UTC)дамп: https://drive.google.com/open?id=0B859YEB17d8veDVlUUpJNzJsXzg
Формат uint16_t, little endian, 640x480 пикселей, сохранено построчно. Экспозиция 0.5с. Получился эдакий псевдофлэт (морду я обмотал белой бумагой).
no subject
Date: 2017-02-02 12:07 pm (UTC)Вот патчик к 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 (может упасть в спам - поэтому отдельным)
no subject
Date: 2017-02-02 01:32 pm (UTC)no subject
Date: 2017-02-02 01:48 pm (UTC)Это егонный декодер срабатывает, я такую картинку уже видал сегодня
no subject
Date: 2017-02-02 01:58 pm (UTC)Вполне прилично. Разве что цветовые профили надо пилить. Но скорость, конечно, намного выше, чем в алгоритме Buades & Co.
no subject
Date: 2017-02-02 02:03 pm (UTC)Там по make/model потом разруливается.
Очень это хрупкое место и черезжопное - разбор raw имени dcraw (а мы оттуда много наследуем)
no subject
Date: 2017-02-02 02:04 pm (UTC)Потому что у меня вот нет уверенности, что там CFA pattern сейчас правильная.
no subject
Date: 2017-02-02 02:10 pm (UTC)no subject
Date: 2017-02-02 03:16 pm (UTC)https://drive.google.com/open?id=0B859YEB17d8vSjdoMUhYTDRtbzQ
В фильтрах B,V и R экспозиция по 2 секунды. Фильтры — стандартные джонсоновские.
Еще приложил дампы дарков: 2, 10, 100 и 300 секунд.
Судя по статистике, bias где-то на уровне 1400. Шум примерно на уровне 0.24 отсчета в секунду.
no subject
Date: 2017-02-02 03:37 pm (UTC)no subject
Date: 2017-02-02 03:55 pm (UTC)no subject
Date: 2017-02-02 04:07 pm (UTC)Надеюсь, вы сумеете ее сделать по образу и подобию
no subject
Date: 2017-02-02 12:09 pm (UTC)А гистограмма, ну как и глазом видно, тотальная засветка, легли на максимум АЦП (или какой еще максимум) везде: https://www.dropbox.com/s/0hsxqrrnw34fq7n/Screenshot%202017-02-02%2015.08.58.png?dl=0
no subject
Date: 2017-02-02 12:12 pm (UTC)0x94, 0x49, 0x16, 0x61 (в принципе, если два зеленых отличаются, то возможны еще варианты).
Ну или дайте что-нибудь цветное с известным цветом (только ярким, идеально чтобы было и красное и зеленое и синее яркие в кадре) - подберу сам.
no subject
Date: 2017-02-02 12:13 pm (UTC)На нормальной выдержке и на минимально короткой. Оценить bias (уровень черного) и тоже в табличку добавить, иначе линейность уползет.
no subject
Date: 2017-02-02 01:10 pm (UTC)Чуть позже выложу кадры.
no subject
Date: 2017-02-01 03:27 pm (UTC)Тут прежде чем пробовать алгоритм - хорошо бы на сами данные посмотреть.
В частности, вот эта вот регулярная хрень в светах на картинке - в исходных данных нет такой же хрени?
Если есть, то чего на байера (демозаику) пенять, ей че дали, то она и сделала.
Если вы умеете выгнать эти данные в дамп (без заголовка, ну там 16 бит на пиксель) - RawDigger сумеет их прочитать (см. раздел Support of non-standard cameras в его мануале в разделе настроек).
Ну или дайте пару файликов для опытов, гляну.
no subject
Date: 2017-02-01 03:29 pm (UTC)Мне нужны бы пара файликов с изображением и пара темновых т.е. снятых на той же выдержке (и температуре), но с объективом закрытым крышкой.
Посмотрим что там за полосатость и нет ли ее в темновых кадрах тоже.
no subject
Date: 2017-02-01 03:42 pm (UTC)no subject
Date: 2017-02-01 03:39 pm (UTC)Ту (стороннюю) утилиту, вообще, на самом деле неплохо было бы на реальном снимке неба проверить. Вдруг и она сгодится? Учитывая то, что считывание данных с матрицы длится около минуты, те 5-10 секунд, что работает утилита — фигня.
Примеры:
https://drive.google.com/open?id=0B859YEB17d8vd2ktYUJMMHIyQlE
https://drive.google.com/open?id=0B859YEB17d8vbWVRZTk3cTNoa2c
https://drive.google.com/open?id=0B859YEB17d8vbWVRZTk3cTNoa2c
no subject
Date: 2017-02-01 04:24 pm (UTC)Но судя по tiff - у вас там реально же вот сеточка в светах. То есть надо или баланс белого применять, или еще чего хорошее.
Де-байеризатор отработал как надо. Дали ему сеточку - он ее нарисовал почетче.
no subject
Date: 2017-02-01 05:24 pm (UTC)> дамп сенсора
Просто бинарные данные? Так их из тифа чем угодно можно вытащить - хоть той же октавой. В каком формате нужны данные?
no subject
Date: 2017-02-01 05:40 pm (UTC)То есть я больше 5 минут на это не собираюсь тратить (примерно столько нужно для поддержки новой камеры типа "дамп сенсора")
Дамп мне нужен
- раз у вас там 16-битный АЦП, то вот прямо 2 байта на пиксель.
- порядок байт в слове - без разницы, но (чуть) лучше интеловский.
- нужно знать сколько строк-столбцов в сенсоре
- нужно знать как сделан дамп, по строкам или столбцам (удобнее - по строкам).
Если с одного раза получится - будет вам libraw с поддержкой вашей камеры.
Что касается флетов: раз у вас там байер т.е. светофильтры, то в зависимости от освещения будет (не может не быть) разбаланс по каналам (т.е. серая карта имеет разные сигналы в каналах), а значит нужен баланс белого.
Его можно накладывать до дебайера, можно после (тоже нормально выходит), но обычно делают до.
no subject
Date: 2017-02-01 05:56 pm (UTC)Про баланс белого — имеете в виду деление на флэт?
no subject
Date: 2017-02-01 06:14 pm (UTC)Обычно просто на поканальные коэффициенты умножают.
Вот представьте хорошую серую карту (с плоским спектром).
Вы на нее посветили лампой накаливания (сильно желтая), а другой раз - голубым небом (сильно синее).
Поканальные отклики (их отношение) будут же разные? А карта - как была серой, так и осталась.
no subject
Date: 2017-02-01 11:41 am (UTC)no subject
Date: 2017-02-01 07:47 pm (UTC)