게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
학부수준 질문드립니다.
게시물ID : programmer_23196짧은주소 복사하기
작성자 : se1251(가입:2017-06-10 방문:11)
추천 : 0
조회수 : 767회
댓글수 : 2개
등록시간 : 2020/11/17 00:29:31

lena512_GRAY.raw 파일을 DCT하는 코드를 작성했습니다.

그런데 

DCT.jpg

파란색으로 체크한 부분처럼 출력이 되고 이미지도 저렇게 나와야하는데 빨간색처럼 출력이 됩니다..

어디를 손대야할지 감이 안잡혀서 질문드립니다ㅠ

 

#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;

}

전체 추천리스트 보기
댓글쓰기
리스트 페이지로
데이터절약모드
◀뒤로가기
PC버전
맨위로▲
공지 운영 게시판요청 자료창고