标签: dft

如何在OpenCV中将高斯滤波器应用于DFT输出

我想在确定正确的填充尺寸后创建高斯高通滤波器(例如,如果图像宽度和高度是10X10,那么应该是20X20).

我有Matlab代码,我试图在OpenCV中移植,但我很难正确移植它.我的Matlab代码如下所示:

f1_seg = imread('thumb1-small-test.jpg');

Iori = f1_seg;


% Iori = imresize(Iori, 0.2);

%Convert to grayscale
I = Iori;
if length(size(I)) == 3
    I = rgb2gray(Iori);
end
% 

%Determine good padding for Fourier transform

PQ = paddedsize(size(I));

I = double(I);

%Create a Gaussian Highpass filter 5% the width of the Fourier transform

D0 = 0.05*PQ(1);

H = hpfilter('gaussian', PQ(1), PQ(2), D0);

% Calculate the discrete Fourier transform of the image.

F=fft2(double(I),size(H,1),size(H,2));

% Apply the highpass filter to the Fourier spectrum …
Run Code Online (Sandbox Code Playgroud)

opencv image fft gaussian dft

2
推荐指数
1
解决办法
1万
查看次数

STFT/FFT工作流程顺序

我正在尝试实现FFT,我可以使用代码等,但事情的一般顺序令我感到困惑.

我是否正确地认为这是正确的事情顺序?

输入 - >重叠输入 - >窗口 - > FFT - >相位计算/重叠补偿 - >输出

我得到的结果接近我的输入频率,但它们总是被一些我无法解决的因素关闭,即440Hz总是407Hz,430Hz总是420Hz.

令我困惑的主要部分是初始重叠,因为我一直在研究一些开源FFT代码,这是我永远无法解决的部分.我似乎从看到那些重叠应该在窗口之前发生的想法得到了这个想法,但对我来说逻辑上,不会那么混乱的窗口?

任何建议都会很棒

谢谢

signal-processing fft overlap dft

2
推荐指数
1
解决办法
5513
查看次数

验证卷积定理

我的主要目标是证明卷积定理有效(只是提醒一下:卷积定理意味着idft(dft(im) .* dft(mask)) = conv(im, mask)).我正在尝试编程.

这是我的代码:

function displayTransform( im )
% This routine displays the Fourier spectrum of an image.
% 
% Input:      im - a grayscale image (values in [0,255]) 
% 
% Method:  Computes the Fourier transform of im and displays its spectrum,
%                    (if F(u,v) = a+ib, displays sqrt(a^2+b^2)).
%                    Uses display techniques for visualization: log, and stretch values to full range,
%                    cyclic shift DC to center (use fftshift).
%                    Use showImage to display …
Run Code Online (Sandbox Code Playgroud)

matlab convolution dft

1
推荐指数
1
解决办法
6045
查看次数

fftw和在线DFT计算器得到不同的结果

我使用fftw/C++和在线计算器计算了数组{1,2,3,4,5,6}的FFT(http://calculator-fx.com/calculator/fast-fourier-transform-calculator-fft/ 1d离散傅立叶变换).结果似乎有点不同.

fftw输出:

0     21.000000      0.000000
1     -3.000000      5.196152
2     -3.000000      1.732051
3     -3.000000      0.000000
4      0.000000      0.000000
5      0.000000      0.000000
Run Code Online (Sandbox Code Playgroud)

在线计算器输出:

 21 + 0j
 -3 + 5.196152j
 -3 + 1.732051j
 -3 + 0j
 -3 - 1.732051j
 -3 - 5.196152j
Run Code Online (Sandbox Code Playgroud)

如上所示,fftw的后两个结果变为零.无法弄清楚为什么.有人可以帮帮我吗?谢谢.

[编辑] cpp代码:

int main()
{
    fftw_complex *out;
    fftw_plan plan;

    double arr[]={1,2,3,4,5,6};
    int n = sizeof(arr)/sizeof(double);

    out = (fftw_complex*)fftw_malloc ( sizeof ( fftw_complex ) * n );
    plan = fftw_plan_dft_r2c_1d ( n, arr, out, FFTW_ESTIMATE );
    fftw_execute ( …
Run Code Online (Sandbox Code Playgroud)

c++ fft fftw dft

1
推荐指数
1
解决办法
1769
查看次数

2D傅立叶变换实现中的错误

我试图在Matlab中使用1D DFT的组合来实现2D DFT.将我的结果与Matlab的内置函数(fft2)进行比较时,我意识到我有以下问题:

  1. 假想部分的符号正在被反转.ie +改为 - 反之亦然.
  2. 除第一个行外,行按降序排序.

此图显示了两个结果之间的比较.侧面的红色数字表示重新排序问题.

我的代码如下:

x = imread('img.png');
x = double(x);
x = x(1:12,1:5)

% FFT
Xw = complex(zeros(size(x)));
for row = 1:size(x,1)
    Xw(row,:) = fft(x(row,:));
end

for col = 1:size(x,2)
    Xw(:,col) = fft(Xw(:,col)');
end
Run Code Online (Sandbox Code Playgroud)

有人可以指出我的问题在哪里吗?谢谢

matlab 2d fft dft

1
推荐指数
1
解决办法
103
查看次数

有人可以用更好的逻辑编写这段代码吗?

我坚持这个问题2天了.有人可以帮我逻辑吗?

我正在研究C++程序以获得良好的算法.我现在正在研究Danielson-Lanczos算法来计算序列的FFT.

看着

mmax=2;
while (n>mmax) {
    istep = mmax<<1;
    theta = -(2*M_PI/mmax);
    wtemp = sin(0.5*theta);
    wpr = -2.0*wtemp*wtemp;
    wpi = sin(theta);
    wr = 1.0;
    wi = 0.0;

    for (m=1; m < mmax; m += 2) {
        for (i=m; i <= n; i += istep) {
            j=i+mmax;
            tempr = wr*data[j-1] - wi*data[j];
            tempi = wr * data[j] + wi*data[j-1];

            data[j-1] = data[i-1] - tempr;
            data[j] = data[i] - tempi;
            data[i-1] += tempr;
            data[i] += tempi;
        }
        wtemp=wr;
        wr += wr*wpr …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm dft

0
推荐指数
2
解决办法
1397
查看次数

MATLAB错误:不支持复数整数运算

.* 不支持使用复数整数运算时出错 .

Error in DFT (line 35)
        J(u,v) = J(u,v) + I(x,y) .*exp(-1i*2*pi.*((u*(x-1)/M)+(v*(y-1)/N)));
Run Code Online (Sandbox Code Playgroud)

matlab dft

0
推荐指数
1
解决办法
3485
查看次数

标签 统计

dft ×7

fft ×4

matlab ×3

c++ ×2

2d ×1

algorithm ×1

convolution ×1

fftw ×1

gaussian ×1

image ×1

opencv ×1

overlap ×1

signal-processing ×1