OSV_q python 对图像进行傅里叶变换 fft2

==>> Wed Mar  9 11:11:56 2022 [Iter 1/8]   loss = 8833.374023
====>> Wed Mar  9 11:11:56 2022   Pass time: 0:00:17.003332
Traceback (most recent call last):
  File "C:/Users/shang/Desktop/STDN_LI/TVGnet/OSV_q.py", line 361, in <module>
    train(opt)
  File "C:/Users/shang/Desktop/STDN_LI/TVGnet/OSV_q.py", line 289, in train
    lap = -(cmul(fft2(grd_x), cconj(fft2(grd_x), inplace=False)) + cmul(fft2(grd_y), cconj(fft2(grd_y), inplace=False)))
  File "C:/Users/shang/Desktop/STDN_LI/TVGnet/OSV_q.py", line 138, in fft2
    return torch.fft.fft2(t, 2)
AttributeError: 'builtin_function_or_method' object has no attribute 'fft2'

Process finished with exit code 1

原来的代码在fft2报错,搜索之后搞成np数组的函数,然后错误换了,定位到了‘_pocketfft.py’这个子函数,从函数的解释看到了np.fft.fft2的使用方法,改正后这行就不报错啦

这个是函数的定义例子

 Examples
    --------
    >>> a = np.mgrid[:5, :5][0]
    >>> np.fft.fft2(a)
    array([[ 50.  +0.j        ,   0.  +0.j        ,   0.  +0.j        , # may vary
              0.  +0.j        ,   0.  +0.j        ],
           [-12.5+17.20477401j,   0.  +0.j        ,   0.  +0.j        ,
              0.  +0.j        ,   0.  +0.j        ],
           [-12.5 +4.0614962j ,   0.  +0.j        ,   0.  +0.j        ,
              0.  +0.j        ,   0.  +0.j        ],
           [-12.5 -4.0614962j ,   0.  +0.j        ,   0.  +0.j        ,
              0.  +0.j        ,   0.  +0.j        ],
           [-12.5-17.20477401j,   0.  +0.j        ,   0.  +0.j        ,
              0.  +0.j        ,   0.  +0.j        ]])

    """

我原来定义的代码

def fft2(t):
    return np.fft.fft2(t, 2)


def ifft2(t):
    return np.fft.ifft2(t, 2)

修改后本行不再报错的代码

def fft2(t):
    return np.fft.fft2(t)


def ifft2(t):
    return np.fft.ifft2(t)

哈哈哈哈哈,有那么一丢丢小开心,新错误来了,继续加油埋头苦干呐

====>> Thu Mar 10 17:06:33 2022   Pass time: 0:00:16.794601
Traceback (most recent call last):
  File "C:/Users/shang/Desktop/STDN_LI/TVGnet/OSV_q.py", line 361, in <module>
    train(opt)
  File "C:/Users/shang/Desktop/STDN_LI/TVGnet/OSV_q.py", line 289, in train
    lap = -(cmul(fft2(grd_x), cconj(fft2(grd_x), inplace=False)) + cmul(fft2(grd_y), cconj(fft2(grd_y), inplace=False)))
  File "C:/Users/shang/Desktop/STDN_LI/TVGnet/OSV_q.py", line 132, in cconj
    c = t.clone() if not inplace else t
AttributeError: 'numpy.ndarray' object has no attribute 'clone'

Process finished with exit code 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 傅立变换是一种将时域信号转换为频域信号的数学方法。在图像处理中,傅立变换可以将图像转换为频域表示,从而方便进行滤波、压缩、特征提取等操作。Python中的numpy库提供了傅立变换的实现,可以通过numpy.fft模块中的fft2函数对图像进行二维傅立变换。傅立变换的结果是一个复数数组,其中每个元素表示对应频率的幅度和相位信息。可以通过numpy.fft模块中的ifft2函数将频域信号转换回时域信号。 ### 回答2: 傅里变换是一种数学技术,可以将一个信号分解为一系列简单的正弦和余弦波。在图像处理中,傅里变换可以将图像从空间域(像素表示)转换为频率域(幅度和相位表示),这有助于我们更好地理解图像特征和纹理、去噪和压缩图像等任务。 Python中,我们可以使用SciPy库中的fftpack模块来执行傅里变换。该模块提供了许多函数,如fft2(二维离散傅里变换)和ifft2(逆变换),可以在频域和空间域之间进行转换。我们可以使用matplotlib和numpy库来可视化和处理变换后的图像。 一般来说,我们首先需要将图像的灰度值归一化为0到1之间的值,然后使用fft2函数对其执行傅里变换,得到频谱表示。这个频谱表示实际上是由正弦和余弦波的幅度和相位组成的。我们可以使用numpy库中的abs函数和angle函数来提取幅度和相位信息。然后可以使用这些信息来进行图像处理,例如滤波或重建。 在进行滤波时,我们需要在频率域中选择要过滤的频率范围并将其设置为零,或者对频率范围之外的值进行放大或缩小。然后,我们可以使用ifft2函数将滤波后的频谱转换回空间域,得到过滤后的图像。 在图像处理中,傅里变换可以帮助我们更好地理解图像的特征和纹理,去除图像中的噪声和压缩图像等任务。使用Python中的SciPy库和matplotlib和numpy库的组合,我们可以轻松地执行傅里变换和相应的图像处理任务。 ### 回答3: 傅立变换是一种将信号从时间域转换到频率域的算法,常用于图像处理领域。在图像处理中,图像可以看做是一个二维信号,因此需要使用二维傅立变换。 二维傅立变换图像从空间域转换到频率域,即将每个像素点的灰度值表示为从低频到高频的复杂振幅和相位的组合。低频表示图像中变化平缓的部分,高频表示图像中变化快速的部分。 在Python中,可以使用NumPy库中的fft2()函数来进行二维傅立变换。首先需要将图像转换为灰度图,并将其表示为一个矩阵。然后使用fft2()函数对矩阵进行傅立变换,得到一个与输入矩阵大小相同的复数数组。 为了可视化结果,可以使用fftshift()函数将频率最低点移到中心,并使用log()函数将结果取对数。最后使用imshow()函数将频谱图显示出来,可以清晰地看到图像中各个部分的频率分布情况。 在进行频域处理之后,可以使用ifft2()函数将得到的结果逆变换回空间域,得到处理后的图像。同时,也可以进行各种基于频域的图像处理操作,如滤波、去噪等。 总之,利用Python进行图像的傅立变换可以提取图像的频域特征,为后续的图像处理和分析提供基础。同时,Python强大的科学计算库和便捷的语法结构也为图像处理带来了更加高效和方便的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值