繁体   English   中英

如何从原始 TEM tiff 获取 FFT 图像?

[英]How to get the FFT image from a raw TEM tiff?

我正在尝试编写获取 TEM(透射 Electron 显微镜)TITFF 图像并计算 FFT 的代码。 但我总是得到普通的红色、绿色或蓝色图像。

这是 RAW TEM 图像的样子:

原始 TEM Tiff

FFT 图像应如下所示:

GMS软件制作的FFT

但相反,我得到:

代码中的 FFT

这是我的代码:

import numpy as np
import diplib as dip
import matplotlib.pyplot as plt
from PIL import Image
from ncempy.io import dm


img1 = dip.ImageReadTIFF('RAW_FFT.tif')
f = np.fft.fft2(img1)
f = np.fft.fftshift(f)

plt.imshow(abs(f))
plt.show()

你知道可能是什么问题吗? 我什至尝试将图像转换为np.array并逐步进行 FFT,但我得到了相同的结果。

FFT 是复杂的并且没有对数,傅立叶变换将比所有其他点亮得多,以至于其他所有点都将显示为黑色。 详见: https://homepages.inf.ed.ac.uk/rbf/HIPR2/fourier.htm

import cv2
import numpy as np

img=cv2.imread('inputfolder/yourimage.jpg',0)
def fft_image_inv(image):
    f = np.fft.fft2(image)
    fshift = np.fft.fftshift(f)
    magnitude_spectrum = 15*np.log(np.abs(fshift))
    return magnitude_spectrum

fft= fft_image_inv(img)
cv2.imwrite('outputfolder/yourimage.jpg',fft)

output: 在此处输入图像描述

这里有多个问题。 首先,有时灰度图像会像 RGB 图像一样写入文件(在 TIFF 文件中,这可能就像存储灰度颜色 map 一样简单,像素值将被解释为 map 的索引,加载的图像将是 RGB 图像而不是灰度图像,即使它只有灰度颜色)。

这里就是这种情况。 所有三个通道具有完全相同的信息,但存储了三个通道,您的 FFT 将计算相同的东西 3 次!

使用dip.ImageReadTIFF()加载图像后,您可以使用括号来索引其中一个通道:

img1 = dip.ImageReadTIFF('RAW_FFT.tif')
img1 = img1(0)

我们现在有一个实际的灰度图像。 这应该可以消除 output 中的红色。

在计算 FFT 之后,我们得到了一个动态范围非常高的浮点图像(中间像素处的最大幅度为 437536704)。 默认情况下,pyplot 将显示浮点图像,其中 0 和所有负值显示为黑色,1 和所有更大的值显示为白色(实际 colors 当然取决于它使用的颜色 map)。 所以你的显示器将全是白色的。 使用vmax参数来imshow显示为白色的值。 将此设置为 1e6 应该会给您与 GMS 软件中类似的显示。

您可以使用 DIPlib 代替 pyplot 进行显示。 它的交互式查看器将让您使用 slider 手动设置灰度限制,您可以手动 select 显示幅度,以及选择对数映射(这往往对显示频域最有用)。

f = dip.FourierTransform(img)
dip.viewer.ShowModal(f)

或者,您可以使用 static 显示器,它在引擎盖下使用 pyplot:

f.Show((0, 1e6))

或者

f.Show('log')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM