Witajcie,
Na potrzeby jednego z moich projektów muszę "ogarnąć" algorytm JPG. Zatrzymałem się na etapie transformacie kosinusowej. Otóż coś nie za bardzo chce ze mną współpraować. Zacznę od tego, że jestem w drugiej klasie liceum ogólnokształcącego i nie miałem nigdy styczności z tak rozbudowanymi wzorami i nie wiem czy dobrze je zinterpretowałem. Korzystałem z kilku, ogólnodostępnych materiałów, np. ten( http://www.uz.zgora.pl/~pstec/files/kompresja.pdf ) lub ten( http://www.zsk.ict.pwr.wroc.pl/zsk/repository/dydaktyka/tech_wiz/tw_cwiczenie_5.pdf ). W pierwszym odnośniku podany został przykład. Dla niego pierwsza wartość się zgadza, lecz dalej jest już totalna herezja. Jeżeli moglibyście mnie naprowadzić na poprawne rozwiązanie to byłbym wielce wdzięczny.
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
int main()
{
srand(time(NULL));
int width = 8;
int height = 8;
int blok[8][8];
int suma = 0;
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
int a;
cin >> a;
blok[x][y] = a;
}
}
int transformatakosinusowa[8][8];
for(int k = 0; k < height/8; k++) {
for(int l = 0; l < width/8; l++) {
float c_u, c_v;
for(int u = 0; u < 8; u++) {
for(int v = 0; v < 8; v++) {
if(u == 0) c_u = 1/sqrt(2); else c_u = 1;
if(v == 0) c_v = 1/sqrt(2); else c_v = 1;
suma = 0;
for(int x = 0; x < 8; x++) {
for(int y = 0; y < 8; y++) {
suma += blok[x][y] * cos(((2*x+1)/16)*u*M_PI) * cos(((2*y+1)/16)*v*M_PI);
}
}
transformatakosinusowa[u][v] = c_u*c_v*suma/4;
cout << u << " " << v << " " << blok[u][v] << " " << transformatakosinusowa[u][v] << "\n";
}
}
}
}
}
Wynik możecie sprawdzić, np. tu: http://ideone.com/798V1Q . Przepraszam za trochę chaotyczny kod, ale jest to wycięta część całego programu.
Proszę o nie kierowanie mnie na gotowe biblioteki !
Z góry dziękuję,
Pozdrawiam,
jpowie01