Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сжатие картинки
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
RHnd
Стоит задача сжать картинку 2048x1024x8bit (оттенки серого) и передать ее. Соответствие стандартам не требуется, т.к. на приемном конце стоит наша же аппаратура, разжимающая обратно в bmp, все упирается в быстродействие и степень сжатия.
Решил делать нечто jpeg'ообразное - DCT, RLE и Хаффман. Далее пошли вопросы:
1) Может я что-то упускаю и есть способы быстрее/лучше/проще для решения задачи? В частности, слышал, что вместо Хаффмана можно использовать алгоритм арифметик (я его, правда, не знаю smile.gif). На сколько это будет сложнее/дольше/лучше?
2) Как наиболее быстро сделать DCT? В частности, слышал про какой-то метод AA&N, который вроде хороший, но гугл мне тут не сильно помог. sad.gif И сопутствующий вопрос: как уж говорил, входная картинка - 8 бит на пиксель. А что с результатом DCT - какой там диапазон выходных значений?
3) Как на плисине попроще и побыстрее сделать алгоритм Хаффмана? Может, отправите к примерам выполнения?
RHnd
Цитата(Mig&L @ Oct 27 2007, 08:53) *

Спасибо. Первый я уже знаю, а вот второй не видел еще. smile.gif Вот только первый достаточно медленный, а у второго указания на скорость не нашел. Просто исходникам уже 5 лет, с тех пор ничего нового не сделано в этой области?
blackfin
Цитата(RHnd @ Oct 27 2007, 11:21) *
Первый я уже знаю, а вот второй не видел еще.
Вот еще: JPEG compression core
RHnd
Цитата(blackfin @ Oct 27 2007, 11:29) *
Вот еще: JPEG compression core

Так там же корка платная. Или вы предлагаете документацию посмотреть?
Mig&L
быстро - медленно, это относительно, какую скорость Вы хотите достичь?
RHnd
Цитата(Mig&L @ Oct 28 2007, 11:19) *
быстро - медленно, это относительно, какую скорость Вы хотите достичь?

2048x1024x8 бит пожать в примерно jpeg по трудозатратам на циклоне 2 на 35 тысяч speed grade -7 желательно меньше 0.5 секунды.
Mig&L
video_compression_systems на опенкорах справляется и умещается
в spartan3s400, надо только сравнить с циклоном
DmitryR
Цитата(RHnd @ Oct 28 2007, 21:00) *
2048x1024x8 бит пожать ... желательно меньше 0.5 секунды.

Раз есть столько времени - может еще скажете до кучи пропускную способность канала, может быть получится все проще.
анатолий
Можно попробовать сжатие с вейвлет-преобразованием -
должно получиться сильнее и красивее, чем с DCT.
Это как JPEG2000.
Но, к сожалению, для него нужен буфер побольше,
который в ПЛИС может и не влезть.
Насчет пропускной способности - это смотря как плотно сжимать.
Если не более чем в 5 раз, то через вейвлеты фильтровать можно только по строкам
- то и совсем без буфера получится.
RHnd
Цитата(Mig&L @ Oct 29 2007, 11:05) *
video_compression_systems на опенкорах справляется и умещается
в spartan3s400, надо только сравнить с циклоном

Спасибо, буду смотреть и разбираться. smile.gif

Цитата(DmitryR @ Oct 29 2007, 14:26) *
Раз есть столько времени - может еще скажете до кучи пропускную способность канала, может быть получится все проще.

Какого канала? Передачи информации? Толком не знаю, этой частью проекта не я занимаюсь. Требования по времени обусловлены требованием к готовности приема следующего кадра - пожать, записать на носитель, освободить буфер для следующего кадра. Максимальное время - 1 секунда (да и то много), запись на носитель примерно 2МБ/сек. Соответственно, если 2МБ картинки пожмется в 200-500 кил за 0.5 секунды, то я в требования укладываюсь.
А передача с носителя по каналу происходит в другой момент времени.
DmitryR
Цитата(RHnd @ Oct 29 2007, 18:25) *
Соответственно, если 2МБ картинки пожмется в 200-500 кил за 0.5 секунды, то я в требования укладываюсь.

Знаете, 200 и 500 килобайт - это не одно и то же. 200К - это в 10 раз, и это точно JPEG или wavelet. 500K - это вчетверо, и от типа картинки можно попробовать lossless.
анатолий
Цитата
Соответственно, если 2МБ картинки пожмется в 200-500 кил за 0.5 секунды, то я в требования укладываюсь.

Такую задачу можно и на микропроцессоре решить.
Взять, к примеру, фотоаппарат.http://electronix.ru/forum/style_images/russian_butt/folder_post_icons/icon6.gif
[sER]
буквально после прочтения темы на глаза попалась дока, может пригодится
RHnd
Цитата(DmitryR @ Oct 30 2007, 12:05) *
Знаете, 200 и 500 килобайт - это не одно и то же. 200К - это в 10 раз, и это точно JPEG или wavelet. 500K - это вчетверо, и от типа картинки можно попробовать lossless.

Речь, конечно, скорее о 200, про 500 я погорячился. smile.gif
RHnd
Блин, совсем задолбался. Помогите, плиз, найти исходник программы на C, берущий bmp (или просто массив пикселей) и делающей jpg файл. Мне он нужен для примера, плюс поиграться с коэффициентами квантования для тестовых картинок. Но нигде в инете исходников проги найти не могу - все либо обрывочные описания алгоритма, либо с использованием библиотек/классов. Заранее спасибо.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.