使用傅立叶变换将图像变换为声音(我认为它不起作用)

时间:2018-08-01 03:03:01

标签: python matlab image-processing plot fft

背景故事

我开始搞电子学,意识到我需要一台示波器。我去网上买了示波器(大约40美元),并观看了有关如何使用它们的教程。我偶然发现了一个视频,它使用示波器的“ X-Y”功能绘制图像。我认为那很酷。我尝试搜索如何从头开始执行此操作,并了解了您需要将图像转换为频域,以及如何将其转换为音频信号并将信号从音频的左右声道发送到示波器的两个声道输出。所以现在我正在尝试做图像处理部分。

我到目前为止所得到的

选择图片

我要做的第一件事是使用某些绘图软件创建一个 nxn 图像。我已经在线阅读了图片的像素总数应该是2的幂的乘积。我不知道为什么,但是我创建了256x256像素的图像以最大程度地减少计算时间。这是我用于此示例的图像。

我保持图像简单,因此在变换图像时可以生动地看到其对称性。因此,如果没有对称性,那肯定是有问题的。

MATLAB代码

我要做的第一件事是读取图像,转换为灰度,更改数据类型,并获取图像的大小(以获取大小差异,以备后用)。

%Read image
img = imread('tets.jpg');

%Convert image to gray scale
grayImage = rgb2gray(img);

%Incompatability of data type. uint8 type vs double
grayImage = double(grayImage);

%Grab size of image
[nx, ny, nz] = size(grayImage);

算法

这是事情变得有些朦胧的地方。由于有些机械工程课程,我对傅里叶变换有些熟悉,但是该主题被广泛介绍,并且从根本上讲并不是课程的一部分。它更像是,“嘿,看看这个东西;但是使用拉普拉斯变换。”

因此,在进行计算时,您必须以某种方式合并空间,幅度,频率和时间。我知道空间坐标只是矩阵或位图中图像上每个像素的位置。我还了解到,幅度只是某个像素从0-255的灰度值。但是,我不一定知道如何根据像素本身合并频率和时间。我想我在某处读到,频率随着像素的y位置的增加而增加,而时间变量随x位置的增加而增加。这是link(请阅读第二部分的第一部分)。

所以我尝试了在线遵循公式以及其他公式,这就是我为MATLAB代码所获得的。

if nx ~= ny 
    error('Image size must be NxN.'); %for some reason
else

    %prepare transformation matrix
    DFT = zeros(nx,ny);

    %compute transformation for each pixel
    for ii = 1:1:nx
        for jj = 1:1:ny
            amplitude = grayImage(ii,jj);  
            DFT(ii,jj) = amplitude * exp(-1i * 2 * pi * ((ii*ii/nx) + (jj*jj/ny)));        
        end
    end

    %plot of complex numbers
    plot(DFT, '*');

    %calculate magnitude and phase
    magnitudeAverage = abs(DFT)/nx;
    phase = angle(DFT);

    %plot magnitudes and phase
    figure;
    plot(magnitudeAverage);
    figure;
    plot(phase);
end

此代码只是尝试遵循我在YouTube上发现的这个离散的fourier transform example video。计算后,我绘制了复数域中的复数。这似乎在极坐标中。我不知道为什么正如有关奈奎斯特极限的视频所述,我也绘制了平均振幅。以及复数的相角。我只给你展示情节!

情节

复数 enter image description here 这是复杂的情节;我相信它是极性形式,而不是笛卡尔形式,但我不知道。看起来也是对称的。

平均幅度Vs。样本 enter image description here 纵轴是振幅,横轴是样本编号。这看起来像是信号的解构,但是我又真的不知道我在看什么。

相角Vs。样本 enter image description here 垂直轴是相角,水平轴是样品编号。这看起来是最有前途的,因为它看起来像是频域中的图,但这并不是假定是频域中的图。而是它在示例域中的图?再说一次,我不知道我在看什么。

我需要了解帮助

我需要以某种方式理解这些情节,所以我知道我得到了正确的情节。我相信算法中可能存在一些错误,因为它不一定实现频率和时间分量。因此,也许您可​​以告诉我该怎么做?或至少指导我?

TLDR;

我正在尝试将图像转换为声音文件以显示在示波器上。我被卡在图像处理部分。我认为MATLAB代码有问题(请检查上述内容),因为它不一定包含每个像素的频率和时间分量。我需要代码方面的帮助并了解如何解释结果,因此我知道转换是正确的。

0 个答案:

没有答案