【发布时间】:2014-03-20 06:45:41
【问题描述】:
我遇到了 HPF 问题。在dft上实现HPF后,生成的图像很奇怪。
这里有一个例子(我是新手,所以我无法发布图片,但没有它我无法提出这个问题):
http://imageshack.com/a/img69/5911/tnj6.png
http://imageshack.com/a/img132/6931/fc8k.png 应用半径为 50 的 HPF 后
我不明白为什么会出现这种情况。当我在 HPF 蒙版的中心添加白点时,结果很好。低通滤波器也可以完美运行。
我认为我可以消除我的 FFT 实现错误的可能性,因为我自己编写了一个并且我也使用了这个实现:librow.com/articles/article-10,结果几乎相同。
这是我的 HPF 代码:
void Picture::HighPass(int radius){
const complex<double> oblivion=(0,0);
const int middlex = w/2;
const int middley=h/2;
double distance=0;
int * T = new int[w*h];
//draw circle in the center
for(int y=0; y<h; y++){
for(int x=0; x<w; x++){
distance = sqrt(pow((middlex-x),2) + pow((middley-y),2));
if(distance<radius){
T[x+y*w]=0;
} else T[x+y*w]=1;
}
}
//T[middlex+middley*w]=1;
int *temp = new int[w*h];
for(int i=0;i<w*h;i++)temp[i]=T[i];
//swap quadrants
for(int x=0;x<middlex;x++){
for(int y=0;y<middley;y++){
T[x+y*w] = temp[(middlex+x)+(middley+y)*w];
T[(middlex+x)+(middley+y)*w] = temp[x+y*w];
T[(middlex+x)+y*w] = temp[x+((middley+y)*w)];
T[x+((middley+y)*w)] = temp[(middlex+x)+y*w];
}
}
for(int i=0;i<w*h;i++)
if(T[i]==0) dft[i]=oblivion;
delete [] T;
delete[] temp;
}
如果您能给我一些建议或解决方案,我将不胜感激。
【问题讨论】:
-
图像已从 ImageShack 中删除(错误 404)。
标签: image-processing filtering signal-processing fft