簡體   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