lena512_GRAY.raw 파일을 DCT하는 코드를 작성했습니다.
그런데
파란색으로 체크한 부분처럼 출력이 되고 이미지도 저렇게 나와야하는데 빨간색처럼 출력이 됩니다..
어디를 손대야할지 감이 안잡혀서 질문드립니다ㅠ
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#define WIDTH 512
#define HEIGHT 512
#define PI 3.141592
int main() {
FILE* fp;
unsigned char* buf;
unsigned char* output;
buf = (unsigned char*)malloc(WIDTH * HEIGHT);
output = (unsigned char*)malloc(WIDTH * HEIGHT);
double dct1 = 0;
fopen_s(&fp, "lena512_GRAY.raw", "rb");
fread(buf, 1, WIDTH * HEIGHT, fp);
fclose(fp);
for (int h = 0; h < HEIGHT; h += 8) {
for (int w = 0; w < WIDTH; w += 8) {
for (int u = 0; u < 8; u++) {
for (int v = 0; v < 8; v++) {
double cu, cv;
for (int x = 0; x < 8; x++) {
for (int y = 0; y < 8; y++) {
dct1 += (buf[h * HEIGHT + w + x * HEIGHT + y] - 128) * cos((2 * x + 1) * u * PI / 16) * cos((2 * y + 1) * v * PI / 16);
}
}
if (u == 0) {
cu = 1 / sqrt(2);
}
else {
cu = 1;
}
if (v == 0) {
cv = 1 / sqrt(2);
}
else {
cv = 1;
}
printf("%6.2f\t", cu * cv / 4 * dct1);
output[h * HEIGHT + w + u * HEIGHT + v] = cu * cv / 4 * dct1;
dct1 = 0;
}
printf("\n");
}
}
}
fopen_s(&fp, "output.raw", "wb");
fwrite(output, 1, WIDTH * HEIGHT, fp);
fclose(fp);
return 0;
}