Демозаика и шумоподавление должны выполняться одновременно. Лучше всего использовать программу DCRaw для извлечения необработанных данных о пикселях, а затем для решения проблемы восстановления изображения по первым принципам, вместо использования стандартных алгоритмов, которые не дадут наилучшей возможной реконструкции изображения.
При таком первом принципе лечения вы задаете проблему как так называемую обратную задачу, в которой вы вычисляете наиболее вероятную картину с учетом неполной информации в форме данных датчика. Затем вам нужно построить модель, основанную на измерениях, которая дает вероятность P (Y | X) для получения данных датчика Y, учитывая, что реальные данные изображения - X. Как только у вас есть хорошая модель для этой функции, вы хотите найти вероятность P (X | Y) для вероятности того, что изображение является X, учитывая, что данные датчика являются Y. Соотношение между ними определяется теоремой Байеса и включает в себя априорную вероятность P (X) для изображения. Это предварительное описание может быть описано с использованием простой модели, подходящей для рассматриваемого случая.
Если вы выбираете свои модели достаточно просто, например, Гауссовский шум, гауссовы априоры, только с локальными корреляциями (например, только корреляции между ближайшими и ближайшими ближайшими соседями), тогда модель будет точно решаемой. Затем можно записать изображение X, которое максимизирует P (X | Y), в пиксельном порядке, тогда решение для оптимального значения пикселя в некоторой точке дается в виде взвешенного суммирования по данным датчика. Такие модели слишком упрощены, чтобы давать очень хорошие результаты, но они уже достаточно хороши по сравнению с тем, что могут предложить необработанные процессоры.
например. Я реализовал простой фильтр шума, который основан на определении P (X) на основе того, как наименьшие квадратные отклонения полинома 3-й степени соответствуют 6 на 6 блокам. Таким образом, учитывая некоторую произвольную картинку, определяемую значениями пикселей, p_ {n, m} разбивает ее на 6 на 6 блоков и записывает формальное выражение суммы всех наименьших квадратов отклонений при подгонке полиномов к каждому из блоков в терминах из p_ {n, m}. Выражение S, которое вы получите, является квадратичной функцией всех p_ {n, m}. Затем я предполагаю, что вероятность P (X) пропорциональна exp (-a S), где a - некоторый параметр, который можно исправить позже. Поскольку S является квадратичным выражением, оно является гауссовой моделью и может быть точно решено (при наложении периодических граничных условий трансляционная инвариантность позволяет решить модель с использованием преобразований Фурье).
В результате получается фильтр, который в итоге уменьшает усреднение шума по соседним пикселям, но делает это, используя как положительные, так и отрицательные веса. Причина ввода отрицательного веса состоит в том, чтобы отменить эффекты размытия, которые вы получили бы, если бы все веса были положительными (это похоже на то, как маска нерезкости работает с использованием отрицательных весов). Но это вытекает из математики: вы не помещаете сюда ничего на специальной основе, кроме вашего предположения о предыдущем P (X) и модели шума.
Но вы можете сделать намного лучше, записывая реалистичные модели, настроенные на любую сцену, которую вы фотографируете, и резкость. Картина, которая максимизирует P (X | Y), тогда не будет иметь аналитического решения, но вы можете затем решить ее, используя численные методы, включающие последовательные приближения, которые становятся все лучше и лучше.