DCT - Дискретное косинусное преобразование
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.134] |
|
|
правила раздела Алгоритмы

| Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
DCT - Дискретное косинусное преобразование
|
Сообщ.
#16
,
|
|
|
|
2 Codemaster:
Если у тебя есть все исходники ,может подкинешь исходник I-Worm.Klez.e |
|
Сообщ.
#17
,
|
|
|
|
Чего-то я не понимаю - о чем вы говорите? Какие нафиг просчеты матриц косинусов?
Вроде исходники jpeg'а открытые валяются где хочешь! Там дкт на 5 умножениях и 25 сложениях, а вы блин велосипед изобретаете, вам че делать |
|
Сообщ.
#18
,
|
|
|
|
2 Sablin Sergey
Здесь не принято ругаться... |
|
Сообщ.
#19
,
|
|
|
|
2Sablin Sergey
дык если везде валяются на 5 умножений и 25 сложений, дай, именно этот кусок. было у меня сколько-то исходников, а вот выдрать это ОДКТ так, чтобы отдельно, не получилось, куча define'ов левых, глобалдьных переменных и левых подпрограмм. конечно, понятно, что так быстрее, но разобраться в этом у меня не получилось...\%) ЗЫ может я тупой? |
|
Сообщ.
#20
,
|
|
|
|
2 Demo_S:
![]() ![]() <br>int ForwardDCT( long *lvBlockIn, <br> long **lplvBlockSpecOut,<br> float *fvDCTCosTable,<br> long iN)<br>{<br> long i, j, k;<br><br> float *fvTmp = new float[iN*iN];<br><br> for(i=0; i<iN; i++)<br> for(j=0; j<iN; j++)<br> {<br> float fSum = 0.0f;<br><br> for(k=0; k<iN; k++)<br> fSum+=(float)lvBlockIn[i*iN + k]*fvDCTCosTable[j*iN + k];<br><br> fvTmp[i*iN + j] = fSum;<br> }<br><br> for(i=0; i<iN; i++)<br> for(j=0; j<iN; j++)<br> {<br> float fSum = 0.0f;<br><br> for(k=0; k<iN; k++)<br> fSum+=(float)fvTmp[k*iN + j]*fvDCTCosTable[i*iN + k];<br><br> (*lplvBlockSpecOut)[i*iN + j] = (long)fSum;<br> }<br><br> RELEASE(fvTmp);<br><br> return 0;<br>}<br><br>int InverseDCT( long *lvBlockSpecIn, <br> long **lplvBlockOut,<br> float *fvDCTCosTable,<br> long iN)<br>{<br> long i, j, k;<br><br> float *fvTmp = new float[iN*iN];<br> for(i=0; i<iN; i++)<br> for(j=0; j<iN; j++)<br> {<br> float fSum = 0.0f;<br><br> for(k=0; k<iN; k++)<br> fSum+=(float)lvBlockSpecIn[i*iN + k]*fvDCTCosTable[k*iN + j];<br><br> fvTmp[i*iN + j] = fSum;<br> }<br><br> for(i=0; i<iN; i++)<br> for(j=0; j<iN; j++)<br> {<br> float fSum = 0.0f;<br><br> for(k=0; k<iN; k++)<br> fSum+=(float)fvDCTCosTable[k*iN + i]*fvTmp[k*iN + j];<br><br> (*lplvBlockOut)[i*iN + j] = (long)fSum;<br> }<br><br> RELEASE(fvTmp);<br><br> return 0;<br>}<br><br>int GenDCTCosTable( float **lpfvDCTCosTable, <br> long iN)<br>{<br> long i, j;<br><br> float k1 = 1.0f/sqrtf((float)iN);<br> float k2 = sqrtf(2.0f/iN);<br> <br> for(i=0; i<iN; i++)<br> for(j=0; j<iN; j++)<br> (*lpfvDCTCosTable)[i*iN + j] = i ? k2*cosf((2.0f*j+1)*i*PI/2.0f/iN) : k1;<br><br> return 0;<br>}<br> |
|
Сообщ.
#21
,
|
|
|
|
Чего-то вы прислали 2*iN*iN умножений и сложений к ним немало, к тому же таблицы
косинусов не дослали. Вобщем матрицы умножаем, а гдеже быстрый счет. Пришлите что-нибудь другое, а то уже велосипедов наизобретал, хотелось бы сравнить с фирменными моделями. |
|
Сообщ.
#22
,
|
|
|
|
Цитата rem, 08.08.02, 18:37:33 Не понял......к тому же таблицы косинусов не дослали... Функция GenDCTCosTable генерит матрицу преобразования (aka таблица косинусов). Там есть ее реализация (снизу) |
|
Сообщ.
#23
,
|
|
|
|
…я нашел исходник DCT для MMX… :
Но, по-моему, это понять вообще невозможно… Автор – какой-то японец, и все комментарии по-ихнему. Только readme на английском.Вот кусочек: MMX_DCT is a implementation for 8x8 FDCT/IDCT with MMX technology. With the help of MMX, only about 1000 cpu cycle is needed to do a 8x8 IDCT… Скачать можно здесь: http://homex.coolconnect.com/user/xkwang/mmxdct/mmxdct-1.0.tar.gz |
|
Сообщ.
#24
,
|
|
|
|
Цитата MYSTiQUE, 01.06.02, 02:17:51 2 Codemaster: Если у тебя есть все исходники ,может подкинешь исходник I-Worm.Klez.e Тебе исходник в кодах (готовый рабочий модуль) или в виде путевого листинга |
|
Сообщ.
#25
,
|
|
|
|
Dr.Andiag. Извини, уезжал на море, толком не посмотрел. Это умножение матриц, данный алгоритм не относится к т.н. быстрым алгоритмам. Давай посчитаем число операций: 2*n*n*(n*( умнож.+слож.)). Быстрое двумерное DCT описано в книге под редакцией В.А.Сойфера "Методы компьютерной обработки". Напиши почему ты этим интересуешься ?" P.S. Ехал с моря, заезжал в Воронеж. :)
|
|
Сообщ.
#26
,
|
|
|
|
Цитата rem, 30.08.02, 12:20:35 Я знаю, что этот алгоритм не относится к быстрым. Я сказал, что он работает быстро Dr.Andiag. Извини, уезжал на море, толком не посмотрел. Это умножение матриц, данный алгоритм не относится к т.н. быстрым алгоритмам. Давай посчитаем число операций: 2*n*n*(n*( умнож.+слож.)). Быстрое двумерное DCT описано в книге под редакцией В.А.Сойфера "Методы компьютерной обработки". Напиши почему ты этим интересуешься ?" P.S. Ехал с моря, заезжал в Воронеж. ![]() Быстрее, чем без матриц. ![]() Где б мне взять В.А.Сойфера "Методы компьютерной обработки"? ??? Интересуюсь я этим потому, что... Гм... а хз. Мне интересно все, что не базы данных и не системное ;) А как тебе Воронеж? |
|
Сообщ.
#27
,
|
|
|
|
Книга п.р. Сойфера(Москва,физматлит,2001) рекомендована Министерством образования как учебник для обучающихся по специальности "Прикладная математика".Думаю, что она должна быть в библиотеке ВГУ, или любого ВУЗа, где есть эта специальность. Для понимания двумерных алгоритмов вводятся понятия кватерниона и кватернионного спектра. При желании можно в этом поупражняться ,но, в этом случае, думаю нужно переходить на мыло. Понять написанное проще если ранее доводилось писать быстрые алгоритмы.
В Воронеже мне показалось, что плохо работают коммунальные службы, из-за чего люди несколько озлоблены. Если бы основные предприятия города работали эффективно , то это бы был крупнейший в Европе промышленный центр. Ждем вестей из Воронежа и других городов. |
|
Сообщ.
#28
,
|
|
|
|
А я завтра какраз в ВГУ иду
![]() У меня препод по информатике умный - может у него есть? ![]() У нас тут в Воронеже и правда немного отстойно: все лето воды горячей не было, частенько свет выключают. Все время везде что-то строят |
|
Сообщ.
#29
,
|
|
|
|
посмотри в матлабе там есть и формулы и исходника на аля матлабовском языке
трехмерный трансформ пишется с помощью одномерного применненого три раза |
|
Сообщ.
#30
,
|
|
|
|
GrAnd мне бы прислал исходники клеза, всё чё есть forb@nvkz.net плиз
|