저는 Image Processing을 처음 접했고 FFT 컨볼 루션이 큰 커널 크기의 회선 속도를 높이는 것을 알았습니다.FFT Convolution - 커널 적용 방법
내 질문은 kissFFT를 사용할 때 주파수 공간의 이미지에 커널을 어떻게 적용 할 수 있습니까?
은 이미 다음 한 : 나는 다시 원래의 이미지를 얻을 할 이미지를 다시 RGB 값을 설정//I have an image with RGB pixels and given width/height
const int dim[2] = {height, width}; // dimensions of fft
const int dimcount = 2; // number of dimensions. here 2
kiss_fftnd_cfg stf = kiss_fftnd_alloc(dim, dimcount, 0, 0, 0); // forward 2d
kiss_fftnd_cfg sti = kiss_fftnd_alloc(dim, dimcount, 1, 0, 0); // inverse 2d
kiss_fft_cpx *a = new kiss_fft_cpx[width * height];
kiss_fft_cpx *r = new kiss_fft_cpx[width * height];
kiss_fft_cpx *g = new kiss_fft_cpx[width * height];
kiss_fft_cpx *b = new kiss_fft_cpx[width * height];
kiss_fft_cpx *mask = new kiss_fft_cpx[width * height];
kiss_fft_cpx *outa = new kiss_fft_cpx[width * height];
kiss_fft_cpx *outr = new kiss_fft_cpx[width * height];
kiss_fft_cpx *outg = new kiss_fft_cpx[width * height];
kiss_fft_cpx *outb = new kiss_fft_cpx[width * height];
kiss_fft_cpx *outmask = new kiss_fft_cpx[width * height];
for(unsigned int i=0; i<height; i++) {
for(unsigned int l=0; l<width; l++) {
float red = intToFloat((int)Input(i,l)->Red);
float green = intToFloat((int)Input(i,l)->Green);
float blue = intToFloat((int)Input(i,l)->Blue);
int index = i * height + l;
a[index].r = 1.0;
r[index].r = red;
g[index].r = green;
b[index].r = blue;
}
}
kiss_fftnd(stf, a, outa);
kiss_fftnd(stf, r, outr);
kiss_fftnd(stf, g, outg);
kiss_fftnd(stf, b, outb);
kiss_fftnd(stf, mask, outmask);
kiss_fftnd(sti, outa, a);
kiss_fftnd(sti, outr, r);
kiss_fftnd(sti, outg, g);
. 그래서 변환이 작동합니다. 커널을 적용하려면 지금 수행해야합니다 (예 : ). 9x9 상자 흐림 효과 (1/9, 1/9, ... 1/9).
빠른 컨볼 루션에 대한 몇 가지 사항을 읽었지만 FFT 구현에 따라 모두 다릅니다. 필터를 적용하기 전에 내가 배려해야 할 일들의 "목록"이 있습니까?
내가 생각하는 방식 :
이미지 크기는 2의 거듭 제곱이어야합니다. 이미지와 같은 크기의 커널을 만들어야합니다. 9 개의 중간 값을 1/9로하고, 나머지를 0으로 놓고이 커널을 주파수 영역으로 변환하고, 소스 이미지를 곱한 다음 소스 이미지를 다시 변환하십시오. 하지만 실제로 작동하지 않습니다. DD
올바른 생각을 갖고있는 것 같습니다. 마지막 문장에서 "정말로 작동하지 않습니다"라고 말하면 정확히 무엇을 의미합니까? –
음, 역변환 후 이미지가 쓰레기처럼 보입니다. 나는 여전히 이미지를 인식하고 있지만 그 안에 많은 색상, 그레이 스케일의 거꾸로 된 이미지와 다른 것들이 있으므로 정말 유용하지 않다. ^^ – Marco
FFT 회선에 대해 더 많은 것들을 읽었으며 어떤 것은 내가 덧붙일 필요가 있다고 말한다. 원본 이미지도 왜 그렇게해야합니까? 그리고 어떤 크기로해야합니까? – Marco