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

Date: 2017-02-01 10:11 am (UTC)
From: [identity profile] p2004r.livejournal.com
Я бы не тестировал это на "комнатных" снимках, лучше сразу на небо направить.

Date: 2017-02-01 11:35 am (UTC)
From: [identity profile] eddy-em.livejournal.com
В принципе, да: надо будет несколько ночных снимков сделать, чтобы было с чем сравнивать.
Может быть сойдет тупая билинейная интерполяция.
Вообще же, главное — не цветную картинку получить (толку от нее 0), а как можно лучше избавиться от влияния этой дурацкой маски Байера. Я вообще поражаюсь: какой мудак мог придумать наклеивать на all-sky камеру фильтр Байера?! Дело в том, что для упрощения вычисления координат звезд фон желательно сделать равномерным.
Хотя, может быть сойдет и такой вариант: тупо уменьшить разрешение в 2 раза, сложив значения пикселей в каждом квадрате, а по результирующему изображению уже звезды искать и определять процент облачности. Я даже на подобное именно для этой матрицы натыкался, но там было для питона, что совсем нехорошо.

Date: 2017-02-01 04:10 pm (UTC)
From: [identity profile] p2004r.livejournal.com
Лучше экспериментировать с картинками в чем то таком как https://imagej.nih.gov/ij/docs/guide/146-Part-II.html#toc-Part-II

было еще что то где совсем как электронная таблица изображение открывалось... но склероз мешает вспомнить :(

Date: 2017-02-01 05:22 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Для экспериментов лучше всего годится октава. Я обычно все алгоритмы сначала в ней отлаживаю, а потом уже сишный код пишу.

Date: 2017-02-01 11:40 am (UTC)
From: [identity profile] dimas.livejournal.com
А там какой-то специфический формат рава или что-то бол-менее стандартное?
Может попробовать Тутубалинский LibRaw, который на базе dcraw, если правильно помню ...

Date: 2017-02-01 11:48 am (UTC)
From: [identity profile] eddy-em.livejournal.com
Там 16-битный АЦП и маска BGGR. Управлялку по RS-232 я уже почти закончил (остается еще доделать управление наклонами камеры, но это не сильно-то нужно). Сейчас пилю визуализатор (т.к. картинку надо в веб-морду выводить, я как-то приводил скриншот этой морды), который должен отображать красивости (тут наплевать на точность передачи данных, лишь бы облачность видно было) — привожу к 8-битному изображению, эквализируя гистограмму с обрезкой 2% снизу и сверху и пытаюсь как-нибудь дебайеризовать. Простейший способ — понижение разрешения в 2 раза — не прокатит в данном случае, т.к. картинка станет совсем уж мелкой.

Date: 2017-02-01 12:03 pm (UTC)
From: [identity profile] dimas.livejournal.com
Как вариант - попробуй написать Тутубалину, он вроде на разнообразных форматах собаку съел, он же и эту либу поддерживает, и софтина у них есть для просмотра рав файлов, может что посоветует для разбора.

Date: 2017-02-01 12:23 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Мне софтины не нужны, надо просто готовый набор байтиков — изображение с маской Байера — преобразовать в другой набор байтиков — цветное RGB изображение.

В принципе, учитывая то, что изображение неба — это практически один сплошной фон, можно попробовать элементарнейшим образом сделать: компоненты R, G и B по-отдельности (соответственно, уменьшенное в 4 раза изображение; компоненту G брать как среднее в каждом квадрате) усреднить медианой 3х3, таким образом получить значения дополнительных цветов в каждом квадрате. Оригинальные компоненты оставлять без изменения, а к ним добавлять полученные дополнительные. В итоге и звезды останутся на изображении, и цвет будет.

Попробую этот алгоритм завтра.

Date: 2017-02-01 01:08 pm (UTC)
From: [identity profile] dimas.livejournal.com
Ты как будто читаешь через строчку :) У него кроме софтины есть либа, libraw. И с этим вот вычитанием фона и прочим он уже не одну собаку съел. Но если хочется изобретать велосипед ...

Date: 2017-02-01 01:25 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Напрямую что-то не хочется писать, а сишных примеров я под эту libraw что-то не нахожу. Поищу, может и правда не нужно будет ничего велосипедить.

Date: 2017-02-01 01:56 pm (UTC)
From: [identity profile] dimas.livejournal.com
посмотри сам dcraw, он кажется был чисто сишный ...

Date: 2017-02-01 02:01 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Можно полистать исходники. Боюсь, правда, что там их очень много будет...
Он у меня, оказывается, установлен.
Полистал исходники. Испугался и закрыл: 10200 с хвостиком строк в одном файле! Автор — точно наркоман!
Edited Date: 2017-02-01 02:08 pm (UTC)

Date: 2017-02-01 03:08 pm (UTC)
From: [identity profile] dimas.livejournal.com
Писать - ты не хочешь, либу - не хочешь, dcraw - не хочешь :)
Да, у libraw автор нет то, что и у dcraw ;)

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

Их там аж три.

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

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

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

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

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

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

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

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

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

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

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

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

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

Вот патчик к 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 (может упасть в спам - поэтому отдельным)

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

Date: 2017-02-02 12:09 pm (UTC)
From: [identity profile] alextutubalin.livejournal.com
В диггере я это вижу так: 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

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

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

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

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

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

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

Date: 2017-02-01 03:27 pm (UTC)
From: [identity profile] alextutubalin.livejournal.com
(если меня громко упомянуть в ЖЖ - я могу и появиться)

Тут прежде чем пробовать алгоритм - хорошо бы на сами данные посмотреть.

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

Если вы умеете выгнать эти данные в дамп (без заголовка, ну там 16 бит на пиксель) - RawDigger сумеет их прочитать (см. раздел Support of non-standard cameras в его мануале в разделе настроек).

Ну или дайте пару файликов для опытов, гляну.

Date: 2017-02-01 03:29 pm (UTC)
From: [identity profile] alextutubalin.livejournal.com
Вдогонку.

Мне нужны бы пара файликов с изображением и пара темновых т.е. снятых на той же выдержке (и температуре), но с объективом закрытым крышкой.

Посмотрим что там за полосатость и нет ли ее в темновых кадрах тоже.

Date: 2017-02-01 03:42 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Темновые завтра сниму: я уже с работы ушел, а камеру из розетки выключил. Надо было включенной оставить...

Date: 2017-02-01 03:39 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Исходную картинку я в предыдущей записи привел.
Ту (стороннюю) утилиту, вообще, на самом деле неплохо было бы на реальном снимке неба проверить. Вдруг и она сгодится? Учитывая то, что считывание данных с матрицы длится около минуты, те 5-10 секунд, что работает утилита — фигня.
Примеры:
https://drive.google.com/open?id=0B859YEB17d8vd2ktYUJMMHIyQlE
https://drive.google.com/open?id=0B859YEB17d8vbWVRZTk3cTNoa2c
https://drive.google.com/open?id=0B859YEB17d8vbWVRZTk3cTNoa2c

Date: 2017-02-01 04:24 pm (UTC)
From: [identity profile] alextutubalin.livejournal.com
Tiff мне не пойдет - не буду возиться с ним, дамп сенсора нужен и знание размеров в пикселях.

Но судя по tiff - у вас там реально же вот сеточка в светах. То есть надо или баланс белого применять, или еще чего хорошее.

Де-байеризатор отработал как надо. Дали ему сеточку - он ее нарисовал почетче.

Date: 2017-02-01 05:24 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Попробую завтра потолок поснимать — эдакие флэты. Посмотрю, что будет.
> дамп сенсора
Просто бинарные данные? Так их из тифа чем угодно можно вытащить - хоть той же октавой. В каком формате нужны данные?

Date: 2017-02-01 05:40 pm (UTC)
From: [identity profile] alextutubalin.livejournal.com
Их *можно* вытащить. Но я - не буду. Опять же - гадать что там с гаммой, наложена, не наложена.
То есть я больше 5 минут на это не собираюсь тратить (примерно столько нужно для поддержки новой камеры типа "дамп сенсора")

Дамп мне нужен
- раз у вас там 16-битный АЦП, то вот прямо 2 байта на пиксель.
- порядок байт в слове - без разницы, но (чуть) лучше интеловский.
- нужно знать сколько строк-столбцов в сенсоре
- нужно знать как сделан дамп, по строкам или столбцам (удобнее - по строкам).

Если с одного раза получится - будет вам libraw с поддержкой вашей камеры.

Что касается флетов: раз у вас там байер т.е. светофильтры, то в зависимости от освещения будет (не может не быть) разбаланс по каналам (т.е. серая карта имеет разные сигналы в каналах), а значит нужен баланс белого.
Его можно накладывать до дебайера, можно после (тоже нормально выходит), но обычно делают до.

Date: 2017-02-01 05:56 pm (UTC)
From: [identity profile] eddy-em.livejournal.com
Гаммы никакой нет; порядок - little endian; 640 столбцов на 480 строк; каков порядок считывания данных, сказать не могу: в даташите на камеру этого не нашел, по RS-232 они передаются построчно.

Про баланс белого — имеете в виду деление на флэт?

Date: 2017-02-01 06:14 pm (UTC)
From: [identity profile] alextutubalin.livejournal.com
Ну можно и на флэт, если вы уверены что он флэт (а обеспечить равномерность освещения ну очень сложно).
Обычно просто на поканальные коэффициенты умножают.

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

Поканальные отклики (их отношение) будут же разные? А карта - как была серой, так и осталась.

Date: 2017-02-01 11:41 am (UTC)
From: [identity profile] dimas.livejournal.com
Кстати, трактовка некоторых вещей С-ным компилятором и С++-ным может отличаться ... так что может cpp там и неспроста :)

Date: 2017-02-01 07:47 pm (UTC)
From: [identity profile] koolru.livejournal.com
Слова то какие... дебайеризация :) думал что-то покупают :)

April 2025

S M T W T F S
  1 23 45
67 89101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2025 05:34 pm
Powered by Dreamwidth Studios