LINUX.ORG.RU
ФорумTalks

Специалистам по фотографии

 , ,


1

4

Вопрос про RAW снимки.

Есть у меня Nikon D3100, снимающий в RAW. У него матрица оснащена фильтром Байера, за счет которого она цветная. Суть в следующем. Никоновский RAW формат отлично читается средствами питона. И если прочитать напрямую RAW изображение тусклых объектов и вывести его, например, с помощью matplotlib (баланса белого и цветопередачи сейчас не касаемся) то изображение будет довольно сильно зашумлено. Но в то же время просмотрщики RAW, да хоть Geeqie, как-то выводят куда более гладкую картинку.

Хочу понять, это они просто сглаживают шумы, или я что-то не понимаю

RAW я читаю с помощью rawpy, после чего учитываю что это изображение на самом деле с фильтром Байера, и чтобы восстановить 3 канала, надо раскидать пиксели в соотв с маской:

image = rawpy.imread(filename).raw_image_visible

shape = image.shape
cshape = (int(shape[0]/2), int(shape[1]/2), 4)

post = np.zeros(cshape)
for y in range(cshape[0]):
    for x in range(cshape[1]):
        post[y][x][0] = image[y*2 + 1][x*2]
        post[y][x][1] = image[y*2][x*2+1]
        post[y][x][2] = image[y*2+1][x*2+1] + image[y*2][x*2]

Изображение в geeqie https://sun9-34.userapi.com/PmZaqUGFvW6vKNc6lNsIXpKTU5EcNkMffcsQaA/a2HvOGbQL2I.jpg

Изображение через мой код: https://sun9-71.userapi.com/TsMOGEC-X9ylBYshoxlvJN_ulvWPUgjBNC59Uw/NaZ4P8j7bpE.jpg

и да, geeqie каким-то образом не уменьшает вдвое разрешение по сравнению с исходной черно-белой картинкой на матрице:

https://sun9-66.userapi.com/WlF8ydXn8QFZTxnRJ9_wgE5Iuy9A_BH1h5rqvw/nzSpAFFjfx0.jpg

PS: да, конечно лучше использовать более длиннофокусный объектив для фото Луны, нежели 35-мм

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 8)

Да, я конечно напутал каналы, поэтому изображение синюшное вышло, но вопрос про шумы это не снимает

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Синий канал почти всегда самый шумный, потому что самый слабый.
Если при применении wb его ещё «разогнать», будет вообще ужас-ужас.
И да, многие конвертеры давят цифровой шум.
Копай алгоритмы дебайеризации.

ist76 ★★★★★
()

Просмотрщик выполняет дебайеризацию и применяет цветовой профиль камеры (если он у него есть).

aidaho ★★★★★
()

тусклых объектов

а точнее? «тусклый» - неточное описание ситуации.

Но в то же время просмотрщики RAW, да хоть Geeqie, как-то выводят куда более гладкую картинку.

там автоматически антиальясинг идет на любую картинку. чтобы типа пикселизации не было и пользователю было приятнее смотреть. без автосглаживания можешь feh (raw не умеет) попробовать.

и да

многие конвертеры давят цифровой шум.

crypt ★★★★★
()
Последнее исправление: crypt (всего исправлений: 2)
Ответ на: комментарий от ist76

Я чуть по-другому хочу сделать. У меня есть множество фото одного и того же объекта, я их хочу просуммировать, а затем уже попробовать подавить шум, уже не на байеровском изображении, а на разбитом по каналам.

Собственно осталось только последнее сделать

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)

чтобы восстановить 3 канала, надо раскидать пиксели в соотв с маской

Дебайеризация - это не так. Не делается один цветной пиксель ни из трех разноцветных, ни даже из четырех. Каждый из пикселей матрицы даёт инфу для четырех пикселей получаемого изображения, и при этом же для получения каждого из пикселей изображения используется инфа от четырех пикселей матрицы. На словах похоже на фигню, но по картинке с решеткой им. господина Байера понятно.

geeqie каким-то образом не уменьшает вдвое разрешение по сравнению с исходной черно-белой картинкой на матрице

Вот эти geeqie-фигики и делают дебайризацию, а не раскладывают пиксели по каким-то кучкам.

Dementy ★★★
()
Ответ на: комментарий от cvs-255

Называется стекинг. Делается, как правило, с пачкой уже конвертированных снимков, готовым софтом (в спецтеме есть). У астрофотографов, разве что, под это дело может быть свой софт для стекинг равов, но у них и камеры, часто не совсем обычные, типа Никона 810A.

ist76 ★★★★★
()
Ответ на: комментарий от ist76

Ну вот я пробовал использовать готовый siril для стекинга фото звезд. Так он даже звезды нормально не сматчил и получилось размыто

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

После чего я и написал свою программу для стекинга

cvs-255 ★★★★★
() автор топика

Ты шизик, если даже не в курсе про цветовую субдескритизацию, но решил уже заняться такими вещами.

soslow
()
Ответ на: комментарий от soslow
  1. Не хами

  2. И зачем мне цветовая субдискретизация? У меня не стоит задача сжатия

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от Dementy

Вообще, я поизучал алгоритмы demosaic, и то, что ты говоришь о том, что каждый пиксель входит в четыре пикселя вокруг по сути сводится к интерполяции. Причем в самом банальном варианте это просто nearest neighbour interpolation. Т.е. количество информации в уменьшенном в 2 раза изображении и исходном одно и то же. С зеленым цветом чуть посложнее, но тоже.

И в том же rawpy есть опция не проводить интерполяцию, а каждый блок 2*2 превращать в 1 пиксель. Что эквивалентно тому, что делаю я

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от cvs-255

каждый блок 2*2 превращать в 1 пиксель

Итого, например, с шестнадцатимегапиксельной матрицы получится картинка четыре мегапикселя? Тогда неверно. Если с матрицы с 16320000 разноцветными пикселями получается фотка в 16311700 пикселей - тогда верно.

Каждый из пикселей матрицы даёт инфу для четырех пикселей получаемого изображения, и при этом же для получения каждого из пикселей изображения используется инфа от четырех пикселей матрицы.

Dementy ★★★
()
Ответ на: комментарий от Dementy

То, что ты описываешь, это и есть по сути интерполяция.

У тебя матрица дает 16 мегапикселей, при этом в ней только 4 красных мегапикселей и 4 синих. И 8 зеленых.

Значит если у тебя получается итоговое изображение 16 мп, и в нем 16 млн красных значений (по 1 значению в каждом пикселе), то значит ты просто размножил каждый из исходных 4 млн красных в 4 раза и проинтерполировал. Новой информации ты при этом не создал.

Невозможно из N независимых переменных построить 4N независимых переменных

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 5)
Ответ на: комментарий от cvs-255

Нет.

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

Хотел сказать «загугли», но в гугле по «demosaic» всё или «умники», или сознательные дезинформаторы.

Представь себе сеть с квадратными ячейками. Представь, что дырки в сети - это пиксели матрицы. Теперь посмотри на узлы этой сети. Вот эти узлы и станут пикселями картинки после дебайеризации. Еще раз: не куски из четырех дырок, а именно узлы.

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

Были (возможно, и сейчас есть) соображения по поводу того, чтобы инфу о цвете брать с «узлов», а инфу о яркости брать прямо с реальных пикселей. Это еще хитрее и когда-то оказалось сложным.

Dementy ★★★
()
Ответ на: комментарий от Dementy

Я разобрался, как делают demosaic. Это именно интерполяция, как я выше и написал.

https://en.m.wikipedia.org/wiki/Demosaicing

Есть разные к тому же алгоритмы. То, что ты описываешь, даст следующее: будем брать узел. К нему прилегает 4 пикселя. Один из них - красный. В самом простом варианте и возьмем его за уровень красного. И тогда несложно заметить, что у всех 4 узлов, расположенных по углам красного пикселя, будет один и тот же уровень красного. Т.е. итоговое изображение в красном канале будет сложено из квадратиков 2*2 в каждом из которых цвет одинаков. Это и есть интерполяция по ближайшему соседу.

Есть и другие алгоритмы. Но все оги это интерполяция

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от Dementy

из одного rgb пикселя делалось четыре rgb пикселя.

По твоему же алгоритму из 1 красного пикселя делается красный канал 4-х пикселей

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Это Вы мне, батенька, льстите, что по моему.:)) Этот алгоритм не я сотворил.

По ощущениям (от рассматривания каналов (особенно синего и красного) по отдельности в полученном от конвертера изображении) алгоритм VNG так и делает. Хотя в его описании что-то про хитрости с использованием инфы про яркость соседних пикселей других цветов. Однако, по итоговым rgb-изображениям это всё равно слабо заметно. Те четыре получаемых пикселя, которые берут синий из одного исходного, расположены не вплотную друг к другу, а еще другие цвета берут из других пикселей.

В алгоритме PPG даже название такое: Pixel Grouping. Однако, по тем же ощущениям, в нем как раз те хитрости, которые есть в описании VNG. И, кстати, в этих хитростях есть что-то, что можно сравнить с интерполяцией по соседям.

Dementy ★★★
()
Ответ на: комментарий от Dementy

А ещё смешное: спектры пропускания условных R G и B фильтров на байере - могут быть очень далеки от настоящего красного, синего и зелёного. На алгоритм это, конечно, не влияет, а вот на то, что получится после - ещё как.

ist76 ★★★★★
()
Ответ на: комментарий от ist76

Ну, да. Недавно же вспоминали сплетни про никоновские фильтры. А еще там может быть, например, не совсем байер, а, например, как на мелких фудзёнышах было. А может быть не только красный-синий-зеленый. Но, сдается мне, тогда дебайер надо с учетом всего такого делать.

Или вот. Есть матрицы без фильтра, они в потемках хоть как-то отдают. Теперь вот ту самую Лейку сделали. Вот интересно, там просто сквозняком можно, или тоже как-то пересчитывать приходится?

Dementy ★★★
()
Ответ на: комментарий от Dementy

Ну вот собственно это и есть все интерполяция. Это позволяет получить картинку такого же разрешения, как исходная матрица, но информации в ней на самом деле меньше в 3 раза: из красных и синих компонент пикселей лишь каждый 4-й информативен, а из зеленых лишь каждый второй. И соотв (0.25 + 0.25 + 0.5) / (1+1+1) = 1/3

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

Впрочем для стэкинга фотографий это в любом случае не столь критично

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 4)
Ответ на: комментарий от Dementy

Кое-кто даже специальный мини-конвертер сделал для камер со смытым байером, который из raw-а камеры чёрно-белый dng делает, а то странное получалось. И в DT (или RT, путаю все время) сделали режим passthrough, который тупо пиксель в пиксель конвертит. И, кстати, была история, что где-то даже со смытым байером, ячейки оказались разные

ist76 ★★★★★
()
Ответ на: комментарий от cvs-255

Это позволяет получить картинку такого же разрешения, как исходная матрица, но информации в ней на самом деле меньше в 3 раза

А какой именно информации получается меньше? Яркостной или цветовой?
Потому что условный L (из Lab) можно брать полноразмерный, тем же passthrough
А «вес» цветовой части гораздо меньше.
В конце концов в объектив к нам прилетают никакие не RGB каналы, это все очень искусственно.

ist76 ★★★★★
()
Ответ на: комментарий от cvs-255

То есть, представь, что конвертер у тебя из raw генерит не RGB tiff, а Lab tiff. L берет из яркостей всех ячеек с поправкой на разбаланс, а каналы ab генерит после, соотношениями между всеми каналами (ещё и с оглядкой на уже сделанный L)
Это будет интерполяция или нет?

ist76 ★★★★★
()
Ответ на: комментарий от ist76

Потому что условный L (из Lab) можно брать полноразмерный

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

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

Вообще, лучше всего было бы просто вообще снимать без фильтра байера, а накручивать светофильтры на объектив

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 1)
Ответ на: комментарий от cvs-255

Вообще, лучше всего было бы просто вообще снимать без фильтра байера, а накручивать светофильтры на объектив

Факт. Так часто и делают.

ist76 ★★★★★
()
Ответ на: комментарий от ist76

Доделаю телескоп, на него и поставлю какую-нибудь черно-белую матрицу. А вот с фотоаппаратом надо подумать, он дает как раз панорамные снимки, чего на телескопе не сделать

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от ist76

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

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от ist76

L берет из яркостей всех ячеек с поправкой на разбаланс

И, кстати, была история, что где-то даже со смытым байером, ячейки оказались разные

Были (возможно, и сейчас есть) соображения по поводу того, чтобы инфу о цвете брать с «узлов», а инфу о яркости брать прямо с реальных пикселей. Это еще хитрее и когда-то оказалось сложным.

Это не удивительно. Когда-то люди заметили, что если красного сделать столько, сколько надо, то синего получается мало, а зеленого совсем мало. Было решено зеленых ячеек сделать в два раза больше. Получилось, что зеленого много и хорошего, а синего мало совсем. Возможно, это как-то подравнивается еще до конвертера, хоть внутрикамерного, хоть какого.

Dementy ★★★
()
Ответ на: комментарий от ist76

L берет из яркостей всех ячеек с поправкой на разбаланс

Что именно имеется ввиду под «поправкой на разбаланс»?

cvs-255 ★★★★★
() автор топика
Последнее исправление: cvs-255 (всего исправлений: 5)
Ответ на: комментарий от cvs-255

Синий канал самый слабый (тёмный), красный чуть сильнее. Практически при любом сюжете. «Баланс белого» в raw конвертере, это, пр сути, умножение синего и красного канала. Поэтому просто сделать L не получится, синие и красные пиксели придётся сделать ярче.

ist76 ★★★★★
()
Ответ на: комментарий от cvs-255

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

хотя ты почему-то коммент выше проигнорил, я тебе и так скажу что нет.

crypt ★★★★★
()
Ответ на: комментарий от ist76

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

cvs-255 ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.