Восстановление поврежденного изображения нейронной сетью?

h1I6QDby.png

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

Каждое изображение имеет повреждения цветовых плоскостей R/G/B регулярного характера (см. выноску в правой части картинки). Т.е., как пример — в каждом четвертом (втором) пикселе оставлена только R-координата. Также в поврежденном таким образом изображении опционально будет присутствовать шум (обучение будет проходить на реальных фотографиях). Количество повреждений — примерно 2/3, т.е. у каждого пиксела неповрежденной остаётся только одно из R/G/B значений. На выходе сеть должна выдавать восстановленное значение центрального пиксела из блока NxN, N — естественно нечетное, максимальный размер блока 15x15.

Входные данные будут проходить чистку — путём вычитания интерполированного по исходным данным изображения (в качестве предварительного результата).


Пока остановился на многослойной ИНС и на сети Элмана.


Если кто-то сталкивался с решением задач подобного рода, дайте совет, какой тип нейросети лучше использовать и как обучать? Стоит ли задействовать генетические алгоритмы?
  • Вопрос задан
  • 8567 просмотров
Пригласить эксперта
Ответы на вопрос 4
powder96
@powder96
Возможно, Вам пригодится эта статья: habrahabr.ru/post/120473/
Ответ написан
@sermal
@da0c
Задачка интересная. Вот какие мысли приходят в голову по поводу решения.
1. Нейронки. Может быть, но не очень понятно, как организовать обучения. Вообще попробовать работает/не работает можно в NeuroNet toolbox-е в Matlab, там и документация стоящая.
2. Возможно лучшим решением будут фрактальные методы на основе систем итерированных функций (Iteration Function System). Этот метод используется при сжатии и может давать достаточно хорошую экстраполяцию.
Ответ написан
akhmelev
@akhmelev
программист
Просто мысль.

Если ИНС это принципиально важно, то вам возможно подойдет обычная ИНС, но малюсенькая и с узким горлом (малое число нейронов в скрытом слое).

Жутко медленный алгоритм:
1) обучаем сетку бегающим окном 3x3 (или около того) по полю 15x15 (как ассоциативную память, т.е. окно вход и выход).
2) после обучения сеть будет аппроксимировать поверхность т.е. сгладит шум, для этого важен малый размер сети и ранний останов обучения.
3) выход сети для всех положений окна запоминаем, усредняем результаты попиксельно.
4) далее смещаем квадрат 15x15 и весь процесс повторяется. Смещение должно быть с перекрытием (т.е. меньше чем на 15 пикселей) иначе стыки вылезут.

Если поле одного цикла обучения делать больше чем 15х15, то аппроксимация будет смазывать изображение из-за чрезмерного усреднения. Алгоритм работать по идее в таком виде будет, но сверхмедленно.

P.S. А вообще тут имхо уместна обычная нелинейная регрессия или что-то типа сплайнов, но для двух входных переменных.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы