реклама на сайте
подробности

 
 
> Реализация сжатия изображения на AVR, Возможно ли это?
DmitriyX
сообщение Mar 1 2005, 07:12
Сообщение #1


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 21-12-04
Пользователь №: 1 581



Вопрос такой:
Нужно хоть как-нибудь сжать черно-белое изображение, которое поступает на микроконтроллер побайтно. Размер изображения 400 х 300 х 8бит (черно-белое).
Потянет ли AVR-микроконтроллер хоть какой-нибудь алгоритм сжатия такого изображения? На какую ориентировочную компрессию можно расчитывать?
И самый главный вопрос: не мог ли бы кто-нибудь поделиться таким алгоритмом или рассказать, где можно найти такой алгоритм за бесплатно? Какие входные данные у этого алгоритма: правильно ли я понимаю, что в микроконтроллере достаточно будет читать изображение побайтно, обходясь ОЗУ в 100-200 байт?

Благодарю за любую информацию
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rok
сообщение Mar 1 2005, 08:10
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 62
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 894



1-й вопрос - какая тактовая частота входного сигнала?
AVR не знаю потянет или нет. Мы это делаем на FPGA. Но задачка посложней вашей. Схема примерно следующая:
2D-DCT(8x8)->RLE->Huffman. Коэффициент сжатия получается примерно 10 (но на разных изображениях разный коэффициент).
По-поводу памяти: нужен блок памяти на 64 точки (после первого ДКТ). А остальная память это смотря какой алгоритм будет реализован.
Потом Хаффман - это тоже задачка интересная, счас я над ней голову ломаю smile3046.gif .
А вообще можно поискать на www.koders.com, а почитать на www.compression.ru.
Go to the top of the page
 
+Quote Post
DmitriyX
сообщение Mar 1 2005, 12:52
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 73
Регистрация: 21-12-04
Пользователь №: 1 581



Это диплом, совмещенный с реальной разработкой.

По поводу совета взять промышленный кодер: я не смог найти черно-белых промышленных кодеров. А цветные, которые умеют делать JPEG2000 стоят от 30-40$. Дороговато получается.

Размер картинки 300х400х8 бит. Ее контроллер читает в параллельном коде из ПЛИСа. Сколько ориентировочно потребуется времени для сжатия такой картинки на AVR 8МГц?


Цитата(Rok @ Mar 1 2005, 12:10)
1-й вопрос - какая тактовая частота входного сигнала?
AVR не знаю потянет или нет. Мы это делаем на FPGA. Но задачка посложней вашей. Схема примерно следующая:
2D-DCT(8x8)->RLE->Huffman. Коэффициент сжатия получается примерно 10 (но на разных изображениях разный коэффициент).
По-поводу памяти: нужен блок памяти на 64 точки (после первого ДКТ). А остальная память это смотря какой алгоритм будет реализован.
Потом Хаффман - это тоже задачка интересная, счас я над ней голову ломаю  smile3046.gif .
А вообще можно поискать на www.koders.com, а почитать на www.compression.ru.
*


Вы спрашиваете частоту входного сигнала? а правильно я понимаю, что он должен быть в цифровом виде? А в параллельном коде каждый 8-битный пиксель подойдет? Контроллер сам читает картинку из памяти в параллельном коде поэтому жестких требований по скорости обработки нет. Но при этом все-таки, очень бы хотелось, чтобы он успевал сжимать такие кадры с частотой хотя бы 10-15 кадров в секунду.

Цитата
2D-DCT(8x8)->RLE->Huffman

Не могли бы Вы объяснить вкратце каждый из приведеных выше терминов?

А на каком FPGA Вы это делаете? и какая тактовая частота подается на FPGA? Сколько примерно требуется логических ячеек для реализации такого алгоритма?
Go to the top of the page
 
+Quote Post
Rok
сообщение Mar 1 2005, 15:42
Сообщение #4


Участник
*

Группа: Свой
Сообщений: 62
Регистрация: 11-01-05
Из: Беларусь, Минск
Пользователь №: 1 894



Цитата(DmitriyX @ Mar 1 2005, 15:52)
Вы спрашиваете частоту входного сигнала? а правильно я понимаю, что он должен быть в цифровом виде? А в параллельном коде каждый 8-битный пиксель подойдет? Контроллер сам читает картинку из памяти в параллельном коде поэтому жестких требований по скорости обработки нет. Но при этом все-таки, очень бы хотелось, чтобы он успевал сжимать такие кадры с частотой хотя бы 10-15 кадров в секунду.

Вот отсюда и получаем входную частоту 1,8 Мгц. Я так понимаю, что для вас это нормально, т.к. AVR 8 Мгц.

Цитата
2D-DCT(8x8)->RLE->Huffman
Не могли бы Вы объяснить вкратце каждый из приведеных выше терминов?

Объясняю:
2D-DCT(8x8) - двумерное Дискретное Косинусное Преобразование (8 на 8 элементов). Оно делается как два одномерных преобразования (по строкам, а затем по столбцам).
А еще забыл - после этого этапа делаем так называемое ЗигЗаг сканирование. Здесь точно без памяти не обойтись. Т.е. нужно считывать вектор из левого верхнего угла в правый нижний угол матрицы(8x8).
RLE (Run lenght encoding)- так называемое RLE кодирование. Из входного вектора получаем пары типа (количество пропущенных нулей, следующий символ). Почему нулей - потому что после ДКП получаем вектор с множеством нулей (или близким к нему).
Ну а потом Хаффман - за счет его и роизводится собственно сжатие. Здесь мы часто употребляемые символы кодируем малым количеством бит. А редко употребляемые символы кодируем большим количеством бит.
Вот так вот и сжимаем.

Цитата
А на каком FPGA Вы это делаете? и какая тактовая частота подается на FPGA? Сколько примерно требуется логических ячеек для реализации такого алгоритма?

На Spartan-2. Тактовая= 60 Мгц. По-поводу логики ничего не могу сказать, т.к. проект еще не завершен.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 13:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.03 секунд с 7
ELECTRONIX ©2004-2016