3

我试图在 matlab 中找到图像的傅里叶变换。我在没有库函数的情况下这样做。代码是:

clc;
clear;
N=128; 
a=imread('lena128','bmp');
zeros(N,N);
for m=1:N
    for n=1:N
        w(m,n)=(exp(-1i*2*pi/N))^((m-1)*(n-1));
    end
end
af1=(w*a);
af=((w*(af1.')).');

当我编译这个程序时,会出现以下错误:

??? Error using ==> mtimes
Complex integer arithmetic is not supported.
Error in ==> qn4 at 12
af1=(w*a);

当我使用 a=rand(1,128) 而不是 a=imread('lena128','bmp') 时,我没有收到该错误。我在网上搜索,发现类似的问题。但没有解决办法。谁能为我指出错误?

4

2 回答 2

6

imread给你一个数组,它的元素是整数(uint8我认为是类型)。然后,您尝试将它们与复数结合起来,但这是行不通的。特别是,MATLAB 不会自动将它们变成doubles 或floats 或任何类似的东西。

你可能应该说

a=double(imread('lena128','bmp'));
于 2011-03-21T01:42:35.410 回答
4

imread函数返回uint8灰度 bmp 图像的元素矩阵。许多 MatLab 函数和操作double仅适用于元素。使用 .将图像转换为双矩阵im2double

a=imread('lena128','bmp');
a=im2double(a);
于 2011-03-21T01:43:17.577 回答