| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Фокусировка изображения |
| Автор: W4FhLF 18.5.2011, 08:25 |
| Здравствуйте! Имеется изображение с вертикальным сдвигом на ~10 пикселей (см. приложение). Т.е. создаётся такой эффект, что на исходное изображение наложили сверху это же изображение сдвинутое по вертикали на n-ое количество пикселей. Можно ли с этим как-то бороться? Хотя бы частично улучшить ситуацию? |
| Автор: maxim1000 18.5.2011, 10:28 |
| наложение со сдвигом можно представить в виде линейного фильтра и его можно обратить в некоторых ситуациях рисунок выглядит так, как будто к нему применили такую операцию: B(x,y)=(A(x,y)+A(x,y+10))/2 соответственно, получаем: A(x,y+10)=2*B(x,y)-A(x,y) т.е. зная первые 10 строчек мы можем восстановить изображение две неприятности: 1. точно первые 10 строчек мы не знаем 2. ошибки округления и шумы накапливаются в принципе, с этим бороться можно, но лучше попробовать по-простому: сказать, что первые 10 строчек полностью чёрные (или выбрать их средний цвет) и запустить этот алгоритм - вдруг результат будет иметь приемлемое качество... |
| Автор: W4FhLF 18.5.2011, 14:19 |
| maxim1000, спасибо за идею. Это действительно самое простое решение с которого следует начать. Вероятно, в качестве значения A(x,y) лучше брать среднее значение некоторой окрестности. |
| Автор: W4FhLF 18.5.2011, 15:57 |
| Попробовал на простейшем примере, сработало (см. simple.png, слева картинка со сдвигом, справа восстановленная, которая точно соответствует оригиналу). Далее попробовал тот же код на картинке из первого поста (см. filtered.png). Можно заключить, что подход не сработал. В качестве начального приближения значений пикселей в первых 10 строчках брал их среднее. Пытаюсь сейчас применить деконволюцию. Пока не очень получается. |
| Автор: W4FhLF 18.5.2011, 15:58 |
| Ещё одна картинка для предыдущего поста. |
| Автор: maxim1000 18.5.2011, 22:02 |
| да, похоже, основная проблема - накопление ошибок - даёт себя знать... если я правильно понимаю её описание, то в общем-то "A(x,y+10)=2*B(x,y)-A(x,y)" - это она и есть нужно как-то затушить шум например, можно попробовать использовать среднее значение не только для первых строчек, но и для остальных: 1. C(x,y+10)=2*B(x,y)-A(x,y) 2. D(x,y+10)=средний цвет исходного изображения вокруг (x,y+10) 3. A(x,y+10)=C(x,y+10)*0.9+D(x,y+10)*0.1 0.9 и 0.1 - здесь можно поиграться, главное, чтобы в сумме была 1 увеличение второго будет лучше подавлять шумы, но начнёт "проглядывать" исходное изображение со всеми своими "дубликатами" |
| Автор: esperanto 18.5.2011, 23:26 |
| А исходное изображение Б - матрица светки (1 0 0 0 0 0 0 0 0 1) Новое изображение это сверта А с Б делаем трансформ фурье Ф(А-Б) по теореме о сверте Ф(А-Б)=Ф(А)Ф(Б) Откуда Ф(а)=Ф(а-б)\Ф(Б) Находим А используя обратную трансформацию фурье не забыть предотвратить деление на ноль |
| Автор: W4FhLF 19.5.2011, 06:02 | ||
| esperanto, насколько я понимаю, этот подход приведёт к аналогичному приумножению высокочастотного шума, только в частотной области. Фактически ты описал деконволюцию в частотной области, а она нестабильна. Но это мне напомнило про фильтры Вейнера, сейчас попытаюсь применить. maxim1000, попробовал регуляризацию, которую ты предложил (см. regularized.png), оптимальные коэффициенты оказались в районе 0.7/0.3. Шума стало меньше, но если присмотреться, то все объекты умнодились на два, т.е. вместо 2х кратного наложения, теперь имеем 4х кратное. Не могу понять что не так. Код очень простой (matlab):
|
| Автор: W4FhLF 19.5.2011, 07:21 |
| Вот результат применения фильтра Вейнера для деконволюции. Пример синтетический. На реальных данных результат скорее неудовлетворительный. Лучше во всяком случае не стало. |
| Автор: W4FhLF 19.5.2011, 10:45 |
| maxim1000, всё зависит от того какие области считать яркими? Цвету (яркости) в моём случае соответствует вполне конкретный физический параметр -- температура. В общем нужна возможность задавать пороговое значения. Твоя идея состоит в том, чтобы после деконволюции провести пороговую фильтрацию? |
| Автор: maxim1000 19.5.2011, 17:43 | ||
| пришла одна мысль - воспользоваться тем, что преимущественно у нас отдельные объекты на тёмном фоне т.е. нам нужно просто оставить верхний из объектов
|
| Автор: esperanto 19.5.2011, 23:49 | ||
Нельзя ли формально описать -аналогичное приумножение высокочастотного шума - что Вы имеете в виду? -нестабильна в частотой области? - это что за зверь? Необохдимо помнить, что если мы посмоитрим кривую чувствительности зрительных нейрнов коры мозга находящихся в зрительном кортексе зоны 17, то эти нейроны мало чувствительны к высоким частотам, поэтому можно позволить относительно высокие шумы на высоких частотах. Так же я написал необходимо правильно обработать деление на ноль, дабы нивировать искжаение высоких частот. |
| Автор: W4FhLF 20.5.2011, 05:48 | ||
AFAIK, деконволюция относится к классу обратных задач, которые нестабильны по своей природе. Наверное я неправильно выразился выделив именно частотную область. Было у меня формальное доказательство этого факта в какой-то статье, но я забыл в какой именно. Гугл дал эту ссылку: http://cnx.org/content/m13144/latest/ Там тоже объясняется. Добавлено через 10 минут и 34 секунды Отличная идея между прочим Светлые объекты вроде как даже сфокусировались (см. original.png и threshold.png). Однако тёмные стали ещё более размытыми. |
| Автор: W4FhLF 20.5.2011, 05:59 |
| Картинка к предыдущему посту. |
| Автор: maxim1000 20.5.2011, 08:26 | ||
охохох... боюсь, что тут начнётся эвристика на эвристике пока пришло в голову два варианта: 1. Разделить изображение на две области - со светлыми объектами и с тёмными объектами, светлые искать через min, тёмные - чере max. Наверняка, возникнут проблемы на стыке областей и там, где тёмные объекты слишком близко к светлым 2. Заменить min. По сути он выполняет следующую задачу: если обе точки принадлежат объекту или обе фону - взять любую из них, если одна из них принадлежит фону - взять её. Это можно сделать по-другому: смотрим разницу A(x,y) и A(x,y+10), если она большая, заменяем на фон, если маленькая - берём одну из них (например, верхнюю). Фон можно вычислить на основании окрестности, например, собрать статистику, повыкидывать верхнюю и нижнюю трети и посчитать среднее. |