Нарушение доступа при попытке вычислить БПФ (быстрое преобразование Фурье) 2 изображений

Я пытаюсь взять БПФ двух необработанных изображений. Но я получаю unhandled exception (access violation) — Я не мог понять, почему. Я использую библиотеку fftw.
Сначала я читаю два изображения, затем вычисляю БПФ. Но прежде чем начать вычисление, он выдает ошибку нарушения доступа.

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

0

Решение

fft1 а также fft2 достаточно большие, чтобы вместить одну строку вывода — вам нужно Height строк. Возможно, вы также захотите распределить их динамически, так как они, скорее всего, будут слишком большими для стека, когда вы получите правильный размер, например.

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

NB: не забудьте позвонить delete [] чтобы освободить их позже.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]