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

| Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
DCT - Дискретное косинусное преобразование
|
Сообщ.
#1
,
|
|
|
|
Есть ли у кого нибудь исходники прямого и обратного ДКП?
|
|
Сообщ.
#2
,
|
|
|
|
www.fftw.org - Быстрое Преобразование Фурье
|
|
Сообщ.
#3
,
|
|
|
|
ты линк не по той теме дал
ему нужно DCT, а не DFT ![]() 2Vadim если хотишь я тебе дам исходник для разжатия блоков 8*8, с 4 (по-моему) умножениями (и то с фиксированной точкой - good). недавно придумали более крутой алгоритм - без умножений _вообще_ называется binary DCT. только вот исходников нигде нет! |
|
Сообщ.
#4
,
|
|
|
|
Вы простите чайника, а чем собсно отличается FFT и DCT? Ну так, по сути?
|
|
Сообщ.
#5
,
|
|
|
|
У меня есть такой старый-старй журнал (года эдак 94) "Монитор".
В нём есть не только сорсы, но итекстовое описание. Так что если надо пиши на майл, отсканирую - отправлю, но не обессудь, мыло проверю не ранее вторника, а тправлю скорее всего в четверг (да не, не после дождичка) |
|
Сообщ.
#6
,
|
|
|
|
У меня есть все исходники :P
|
|
Сообщ.
#7
,
|
|
|
|
Цитата Codemaster, 06.03.02, 13:43:38 У меня есть все исходники ![]() Слушай, а может исходнички Win98 подкинешь? ;) А то никак, что-то в инете не найду... ;D |
|
Сообщ.
#8
,
|
|
|
|
DCT прямое и обратное делается умножением на одну и туже матрицу констант.
DFT делается несколько сложнее, т.к. работаем с комплексными числами. Хорошо знаем что кайф делать быстрое DFT. А вот есть ли кайф городить быстрое DCT и на сколько? Во всех справочниках молчат про быстрое DCT, хотя на первый взгляд алгоритм просматривается. Если кому интересно можно поболтать на эту тему. |
|
Сообщ.
#9
,
|
|
|
|
int ForwardDCT(long *pSrc, long **ppDst, long iN){ long u, v, x, y; for(v=0; v<iN; v++) for(u=0; u<iN; u++) { float F = 0.0f; float cu = 1.0f, cv = 1.0f; if(u==0) cu = 1.0f / sqrtf(2.0f); if(v==0) cv = 1.0f / sqrtf(2.0f); for(y=0; y<iN; y++) for(x=0; x<iN; x++) F+=(float)pSrc[y*iN + x] * cosf(((2*(float)x + 1) * (float)u * PI)/(2*(float)iN)) * cosf(((2*(float)y + 1) * (float)v * PI)/(2*(float)iN)); F*=(2.0f/(float)iN)*cu*cv; (*ppDst)[v*iN + u] = (long)F; } return 0;}int InverseDCT(long *pSrc, long **ppDst, long iN){ long u, v, x, y; for(y=0; y<iN; y++) for(x=0; x<iN; x++) { float f = 0.0f; for(v=0; v<iN; v++) for(u=0; u<iN; u++) { float cu = 1.0f, cv = 1.0f; if(u==0) cu = 1.0f / sqrtf(2.0f); if(v==0) cv = 1.0f / sqrtf(2.0f); f+=cu*cv*(float)pSrc[v*iN + u] * cosf(((2*(float)x + 1) * (float)u * PI)/(2*(float)iN)) * cosf(((2*(float)y + 1) * (float)v * PI)/(2*(float)iN)); } f*=(2.0f/(float)iN); (*ppDst)[y*iN + x] = (long)f; } return 0;} |
|
Сообщ.
#10
,
|
|
|
|
2andyag
угу, только этот вариант офигенно тормознутый. нет ли у тебя удобопонимаемого примера который делает ОДКТ быстрее? |
|
Сообщ.
#11
,
|
|
|
|
...вот тебе и спасибо...
|
|
Сообщ.
#12
,
|
|
|
|
Могу кинуть .pdf про оптимизацию сабжа...
|
|
Сообщ.
#13
,
|
|
|
|
Цитата andyag, 27.04.02, 22:36:47 ...вот тебе и спасибо... хм, как бы.... за что? а пдф кидай:)... мне один уважаемый человек прислал исходник, за что ему спасибо, но разобраться с ним (исходником) у меня терпения не хватило, да и времени не очень есть:(. но любая инфа полезна:) так что кидай:) |
|
Сообщ.
#14
,
|
|
|
|
лови pdf
|
|
Сообщ.
#15
,
|
|
|
|
Почитал я ребята про быстрое Фурье. Написал прогу ,вообще не имеет отношение к делу.
О ни в ЖПГ фазу сдвигают.Вот и Аndiag 1 в косинус добавил. Это делается быстрее если матрицу косинусов заранее посчитать и потом на матрицы умножать.Некоторые процессоры ,кстати , для этого пытаются оптимизировать. Так хотелось разбить 2-мерную фигню на 2 одномерные и быстро их просчитать, но для этого видимо нужно или повышать размерность матрицы дополняя ее симметричной, или считать полное Фурье. А может у кого мысль какая есть, или желание хотябы прикинуть как считать быстрее, или положить на ЖПГ и FFT попробывать? |