<p>lena512_GRAY.raw 파일을 DCT하는 코드를 작성했습니다.</p> <p>그런데 </p> <p> <img src="http://thimg.todayhumor.co.kr/upfile/202011/16055404762b3c8c259c094a06afdde828ef54c48b__mn754904__w800__h441__f76011__Ym202011.jpg" alt="DCT.jpg" style="width:800px;height:441px;" filesize="76011"></p> <p>파란색으로 체크한 부분처럼 출력이 되고 이미지도 저렇게 나와야하는데 빨간색처럼 출력이 됩니다..</p> <p>어디를 손대야할지 감이 안잡혀서 질문드립니다ㅠ</p> <p> </p> <p>#include <stdio.h> </p> <p>#include <stdlib.h> </p> <p>#include<math.h></p> <p> <br></p> <p>#define WIDTH 512</p> <p>#define HEIGHT 512</p> <p>#define PI 3.141592</p> <p> <br></p> <p>int main() {</p> <p> <span style="white-space:pre;"></span>FILE* fp; </p> <p> <span style="white-space:pre;"></span>unsigned char* buf; </p> <p> <span style="white-space:pre;"></span>unsigned char* output; </p> <p> <span style="white-space:pre;"></span>buf = (unsigned char*)malloc(WIDTH * HEIGHT); </p> <p> <span style="white-space:pre;"></span>output = (unsigned char*)malloc(WIDTH * HEIGHT); </p> <p> <span style="white-space:pre;"></span>double dct1 = 0; </p> <p> <br></p> <p> <span style="white-space:pre;"></span>fopen_s(&fp, "lena512_GRAY.raw", "rb"); </p> <p> <span style="white-space:pre;"></span>fread(buf, 1, WIDTH * HEIGHT, fp); </p> <p> <span style="white-space:pre;"></span>fclose(fp); </p> <p> <br></p> <p> <span style="white-space:pre;"></span>for (int h = 0; h < HEIGHT; h += 8) { </p> <p> <span style="white-space:pre;"></span>for (int w = 0; w < WIDTH; w += 8) { </p> <p> <span style="white-space:pre;"></span>for (int u = 0; u < 8; u++) { </p> <p> <span style="white-space:pre;"></span>for (int v = 0; v < 8; v++) { </p> <p> <span style="white-space:pre;"></span>double cu, cv; </p> <p> <span style="white-space:pre;"></span>for (int x = 0; x < 8; x++) { </p> <p> <span style="white-space:pre;"></span>for (int y = 0; y < 8; y++) { </p> <p> <span style="white-space:pre;"></span>dct1 += (buf[h * HEIGHT + w + x * HEIGHT + y] - 128) * cos((2 * x + 1) * u * PI / 16) * cos((2 * y + 1) * v * PI / 16); </p> <p> <span style="white-space:pre;"></span>} </p> <p> <span style="white-space:pre;"></span>} </p> <p> <span style="white-space:pre;"></span>if (u == 0) { </p> <p> <span style="white-space:pre;"></span>cu = 1 / sqrt(2); </p> <p> <span style="white-space:pre;"></span>} </p> <p> <span style="white-space:pre;"></span>else { </p> <p> <span style="white-space:pre;"></span>cu = 1; </p> <p> <span style="white-space:pre;"></span>} </p> <p> <span style="white-space:pre;"></span>if (v == 0) { </p> <p> <span style="white-space:pre;"></span>cv = 1 / sqrt(2); </p> <p> <span style="white-space:pre;"></span>} </p> <p> <span style="white-space:pre;"></span>else { </p> <p> <span style="white-space:pre;"></span>cv = 1; </p> <p> <span style="white-space:pre;"></span>} </p> <p> <span style="white-space:pre;"></span>printf("%6.2f\t", cu * cv / 4 * dct1); </p> <p> <span style="white-space:pre;"></span>output[h * HEIGHT + w + u * HEIGHT + v] = cu * cv / 4 * dct1; </p> <p> <span style="white-space:pre;"></span>dct1 = 0; </p> <p> <span style="white-space:pre;"></span>} </p> <p> <span style="white-space:pre;"></span>printf("\n"); </p> <p> <span style="white-space:pre;"></span>} </p> <p> <span style="white-space:pre;"></span>} </p> <p> <span style="white-space:pre;"></span>} </p> <p> <br></p> <p> <span style="white-space:pre;"></span>fopen_s(&fp, "output.raw", "wb"); </p> <p> <span style="white-space:pre;"></span>fwrite(output, 1, WIDTH * HEIGHT, fp); </p> <p> <span style="white-space:pre;"></span>fclose(fp); </p> <p> <br></p> <p> <span style="white-space:pre;"></span>return 0; </p> <p>}</p>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.