Jump to content

    

Обратная свёртка изображения

Коллеги, помогите.

 Предыстория: Возникла необходимость передавать изображения/кадры в сжатом виде, а потом на том конце разворачивать их. На обеих сторонах обработка будет осуществляться  с помощью ПЛИС.

Я могу получить свёртку изображения через КИХ-фильтр (5х5). Соответственно ядро свёртки у меня есть.

Вопрос: Можно ли, и главное как, мне на другом конце по свёртке и ядру получить исходное изображение?

Если где-то алгоритм обратной свёртки уже описан, ткните пожалуйста носом в ссылку)

PS. Не уверен что угадал с разделом, подходит и сюда и в ЦОС

Edited by shunix

Share this post


Link to post
Share on other sites

Странная идея использовать свертку. Сжимать изображения логично с помощью соответствующих алгоритмов, например, jpeg один из самых простых.

А алгоритма обратной свертки, насколько я понимаю, :girl_crazy:не существует.

Share this post


Link to post
Share on other sites

Почему не существует? Насколько помню, сводится к решению системы интегральных уравнений. При наличии аналитически заданного якобиана может сводиться к задаче поиска минимума (максимума) функции нескольких переменных. В форме физической реализации на лазере использовалось для восстановления расфокусированного изображения.

Share this post


Link to post
Share on other sites

Самое простое использовать JPEG сжатие. В нем на основе дискретного косинусного преобразования, уровня квантования и алгоритма huffman сможете сжать.

В инете есть несколько реализаций jpeg энкодеров и декодеров.

Иначе создавать что-то свое кастомное, велосипедное приведет только к потере времени.

https://compression.ru/book/part2/part2__3.htm#_Toc448152511

Share this post


Link to post
Share on other sites

Если отвечать на вопрос о восстановлении начальной последовательности, а не о лучшем способе сжатия изображения,

то  ПФ - преобразование Фурье,  ПФ(полученных данных) / ПФ(характеристики фильтра) и от полученного частного

обратное ПФ

Вам бы лучше к анархистам... Вам бы лучше в ЦОС...

Share this post


Link to post
Share on other sites

Результат свертки (NxN) и (MxM) имеет габариты (N+M-1)x(N+M-1). О каком сжатии идет речь - совершенно не понятно. Похоже, очередной  изобретатель треугольных колес путем распиливания квадратных.

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Дорогой ТС!

Для начала об обращении свёртки:

Небольшие свёртки можно обращать "прямо", отсылаю  к классике:

Айфичер, Джервис "Цифровая обработка сигналов. Практический подход" Гл.5 Корреляция и свёртка, пп "Идентификация систем", "Обращение свёртки"

Свёртки побольше, как я уже написал, обращают при помощи ДПФ, находя поэлеметное частное от ДПФ полученных данных и ДПФ ядра, а после выполняя

обратное ДПФ. Здесь, естественно, нужно следить за тем, что бы у ядра не было нулевых частотных компонентов, либо понимать что в этих точках информация

потеряна, приравнивать частное нулю и осознавать что восстановленная последовательность не соответствует исходной.

 

Теперь Вы, раз уж подняли волну, намекните, какую роль в сжатии изображения у Вас будет играть свёртка, да ещё такого корявенького размера?

Share this post


Link to post
Share on other sites
1 hour ago, GermanN said:

Дорогой ТС!

Для начала об обращении свёртки:

Небольшие свёртки можно обращать "прямо", отсылаю  к классике:

Айфичер, Джервис "Цифровая обработка сигналов. Практический подход" Гл.5 Корреляция и свёртка, пп "Идентификация систем", "Обращение свёртки"

Свёртки побольше, как я уже написал, обращают при помощи ДПФ, находя поэлеметное частное от ДПФ полученных данных и ДПФ ядра, а после выполняя

обратное ДПФ. Здесь, естественно, нужно следить за тем, что бы у ядра не было нулевых частотных компонентов, либо понимать что в этих точках информация

потеряна, приравнивать частное нулю и осознавать что восстановленная последовательность не соответствует исходной.

 

Теперь Вы, раз уж подняли волну, намекните, какую роль в сжатии изображения у Вас будет играть свёртка, да ещё такого корявенького размера?

Спасибо всем за ответы.

Попытаюсь объяснить что хочу.

Есть коэффициенты числа по18 бит(ядро свёртки 5х5 25коэффициентов),есть КИХ фильтр(5х5) 24-го порядка. Получаю свёртку число 48 бит. Я думаю если я буду считывать свёртку 1 раз в 25 тактов то буду получать значения куда входят байты 25-ти пикселей(5х5). Похоже на сжатие в 25 раз. Далее передавать по Ethernet только значение свёртки. А на приёмнике вернутся от свёртки к исходным значениям пикселей(YCbCr 4:2:2) зная коэффициенты(ядро свёртки).

Share this post


Link to post
Share on other sites

Не совсем ясно, как получаеться после двумерной свертки число 48 бит.

Вот наглядный пример операции двумерной свертки - https://neurohive.io/ru/osnovy-data-science/glubokaya-svertochnaja-nejronnaja-set/

Одно значение/сэмпл/отсчет/пиксель, даже если и центральный, с выхода свертки не будет нести в себе всей информации.

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

Тогда нужно:

- децимировать выкидывая пиксели и строки,

- отфильтровать (возможно, фильтром Ланцоша),

- передать,

- интерполировать до оригинального изображения дополняя нулями,

- снова отфильтровать фильтром Ланцоша.

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

Потренируйтесь в матлабе...

Share this post


Link to post
Share on other sites
On 8/13/2019 at 11:32 PM, quato_a said:

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

Тогда нужно:

- децимировать выкидывая пиксели и строки,

- отфильтровать (возможно, фильтром Ланцоша),

- передать,

- интерполировать до оригинального изображения дополняя нулями,

- снова отфильтровать фильтром Ланцоша.

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

Потренируйтесь в матлабе... 

Спасибо, буду пробовать

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now