문제

나는 FFTW에 대한 과제를 가지고 있으며 이미지의 FFT를 만들기 위해 작은 프로그램을 작성하려고했습니다. CIMG를 사용하여 이미지를 읽고 쓰고 있습니다. 그러나 내가 얻는 것은 하나의 흰색 점이있는 어두운 이미지입니다 :(

나는 이것을 잘못한 방식으로 할 가능성이 높으며 누군가가 어떻게 해야하는지 설명 할 수 있다면 감사하겠습니다. 코드가 필요하지 않습니다.이 작업을 수행하는 올바른 방법이 무엇인지 알아야합니다.

내 코드는 다음과 같습니다.

CImg<double> input("test3.bmp");
CImg<double> image_fft(input, false);

unsigned int nx = input.dimx(), ny = input.dimy();
size_t align = sizeof(Complex);

array2<Complex> in (nx, ny, align);

fft2d Forward(-1, in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        in(i,j) = input(i,j);
    }
}

Forward.fft(in);

for (int i = 0; i < input.dimx(); ++i) {
    for (int j = 0; j < input.dimy(); ++j) {
        image_fft(i,j,0) = image_fft(i,j,1) = image_fft(i,j,2) = std::abs(in(i,j));
    }
}

image_fft.normalize(0, 255);
image_fft.save("test.bmp");
도움이 되었습니까?

해결책

크기의 로그를 가져 가야합니다. 단일 흰색 점은 기본 값 (0Hz, DC, 호출하려는 모든 것)이므로 거의 항상 촬영 한 이미지의 가장 큰 구성 요소가 될 것입니다 (픽셀 값은 음수 일 수 없으므로 DC 값은 DC 값이됩니다. 항상 긍정적이고 큽니다).

당신이해야 할 일은 정규화하기 전에 각 지점에서 크기 (LN, 어떤 유형, 일부 유형의 로그 계산)를 계산하는 것입니다. 그것.

값이 있으며, DC 값에 비해 실제로 작으며 로그를 가져옵니다 (작은 값이 많이 크게 커지고 더 큰 값이 약간 더 크게)는 다른 주파수를 볼 수있게 해줍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top