史蒂夫与MATLAB图像处理

图像处理的概念、算法和MATLAB

傅里叶变换,垂直线和水平线

一位读者问最近在博客评论为什么一条垂直线(或边缘)出现在一个图像的傅里叶变换为一条水平线。我想我应该试着来解释一下使用我能想到的最简单的例子。

我将从一个图像,是一个常数黑人除了一个垂直线中间。

x = 0 (200、200);x (:, 100) = 1;imshow (x)

接下来我将计算和显示日志大小的二维傅里叶变换。

X = fft2 (X);imshow (fftshift(日志(abs (X) + 1)), [])

在黑人和白人有问题,所以说:为什么会有一条水平线在二维傅里叶变换?

虽然我要避免方程和其他复杂的莫名其妙的在我的答案,我有解释一些事情关于一维,二维傅里叶变换。

首先,一维傅里叶变换的大小一个“脉冲序列”是一个常数。一个脉冲序列是一个序列,非零只在一个地方,像这样:

x1 = (0 0 1 0 0)
x1 = 0 0 1 0 0

的一维傅里叶变换的大小x是不变的:

abs (fft (x1))
ans = 1.0000 1.0000 1.0000 1.0000 - 1.0000

第二,一维傅里叶变换常数的大小是一个脉冲序列。也就是说,傅里叶变换是零只在一个地方。

x2 = (1 1 1 1 1)
x2 = 1 1 1 1 1
abs (fft (x2))
ans = 5 0 0 0 0

最后,计算二维傅里叶变换是数学与计算的一维傅里叶变换的所有行,然后计算一维傅里叶变换的所有列的结果。订单(一线或一列)实际上并不重要。

现在让我们回到x200 -,- 200矩阵,中间一条垂直线。每一行的x是一个脉冲序列:

情节(x (50,:))

如果我们计算的傅里叶变换的所有行,他们都是常数(级):

X_rows = fft (x, [], 2);情节(abs (X_rows (50,:))) ylim ([0 2])

的下一步计算二维傅里叶变换计算一维傅里叶变换的列X_rows。但这些列是常数。这是第100列X_rows:

情节(abs (X_rows (:, 100))) ylim ([0 2])

正如上面我说的,一个常数序列的傅里叶变换是一种冲动。如果你堆积产生的所有列包含脉冲序列,结果看起来就像一条水平线。

X = fft (X_rows [], 1);imshow (fftshift(日志(abs (X) + 1)), [])

这是一个循序渐进的计算解释。我留给你更多的概念(即简短)解释。让我们看看输入图像和二维傅里叶变换。

次要情节(1、2、1)imshow (x)标题(“x”次要情节(1、2、2)imshow (fftshift(日志(abs (X) + 1)),[])标题(的日志的大小fft2 (x)的)

你可以考虑水平和垂直截面。每个横截面的x是一个脉冲序列。一个脉冲序列的傅里叶变换是常数,所以水平横截面上的傅里叶变换是常数。

同样,每一个垂直的横截面x是一个常数序列。一个常数序列的傅里叶变换是一个脉冲序列,因此,垂直截面的傅里叶变换的冲动。冲动相互排列,导致一条水平线的外观。

这些解释为你工作吗?你知道另一种思考它,使得一个更好的解释吗?把您的想法发表如下意见。




使用MATLAB®7.11发表

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。