2013-04-25 5 views
0

원시 이미지 두 개를 FFT하려고합니다. 그러나 나는 unhandled exception (access violation)을 얻고있다 - 나는 이유를 이해할 수 없었다. 나는 fftw 라이브러리를 사용하고있다. 먼저 두 이미지를 읽은 다음 FFT를 계산합니다. 그러나 계산을 시작하기 전에 액세스 위반 오류가 발생합니다.두 이미지의 FFT (고속 푸리에 변환)를 계산하는 동안 액세스 위반이 발생했습니다.

#include "stdafx.h" 
#include <iostream> 
#include <conio.h> 
#include "fftw3.h" 

#define Width 2280 
#define Height 170 

unsigned char im2[170*2280]; 
unsigned char im1[170*2280]; 
float image1[170*2280]; 
float image2[170*2280]; 

using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    FILE* fp1, *fp2; 

    //Read two images 

    fp1 = fopen ("image1.raw" , "r"); 
    fread(im1, sizeof(unsigned char), Width* Height, fp1); 

    fp2 = fopen ("image2.raw" , "r"); 
    fread(im2, sizeof(unsigned char), Width* Height, fp2); 


    fclose(fp2); 
    fclose(fp1); 

    //Typecasting two images into float 

    for (int i = 0; i < Width* Height; i++) 
    {  
     image1[i]= (float)im1[i]; 
     image2[i] = (float)im2[i]; 

    } 

    fftwf_plan fplan1, fplan2; 
    fftwf_complex fft1[((Width/2)+1)*2]; 
    fftwf_complex fft2[((Width/2)+1)*2]; 

    fplan1 = fftwf_plan_dft_r2c_2d(Height, Width, (float*)image1, fft1, FFTW_ESTIMATE); 
    fftwf_execute(fplan1); 
    fftwf_destroy_plan(fplan1); 

    fplan2 = fftwf_plan_dft_r2c_2d(Height,Width, image2, (fftwf_complex*)fft2, FFTW_ESTIMATE); 
    fftwf_execute(fplan2); 
    fftwf_destroy_plan(fplan2); 

    _getch(); 
    return 0; 
} 
+2

어떤 줄에서 액세스 위반 오류가 발생합니까? – Pace

+0

@lightalchemist .raw 파일. 픽셀 데이터 만있는 파일은 이미지 처리 응용 프로그램에서 매우 일반적입니다. – denver

+0

@Pace : 줄 fftwf_execute (fplan1); 나에게 오류를 준다. – MShah

답변

4

fft1fft2은 하나 개의 출력 행을 저장하기에 충분히에만 큰 - 당신은 Height 행을해야합니다. 크기를 정하면 스택에 비해 너무 커질 수 있으므로 동적으로 할당하는 것이 좋습니다.

fftwf_complex *fft1 = new fftwf_complex[((Width/2)+1)*2*Height]; 
fftwf_complex *fft2 = new fftwf_complex[((Width/2)+1)*2*Height]; 

주의 : 나중에 delete []으로 연락하여 전화를 무료로 이용할 수 있습니다.

+1

정말 고마워요! 그것은 도움이 :) – MShah