numpy 三维医学图像的傅里叶合成

lqfhib0f  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(126)

我试图生成三维图像。使用优化-其中波的频率和振幅将被学习。因此,给定一组频率,振幅和偏移,我想通过添加一系列3D光栅来创建3D图像。
我的方法基于Stephen Gruppetta的一篇博客文章[1]。
然而,由于原始代码是用于2D图像的-我不知道如何将其调整为3D。下面是我尝试的-但我几乎可以肯定的是,有些地方是错误的,因为我认为对于3D情况,我应该定义2个Angular 而不是一个。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-7, 7, 1)
X, Y,Z = np.meshgrid(x, x,x)
wavelength = 5
angle = np.pi*1.5
grating = np.sin(
    2*np.pi*(X*np.cos(angle) + Y*np.sin(angle)+Z*np.cos(angle)) / wavelength
)
plt.set_cmap("gray")
plt.imshow(grating[:,:,1])
plt.show()

另外,我想知道对于给定的图像尺寸,什么可能的波长会导致可见的差异。我做了一些实验,似乎波长在图像宽度的0.1到2倍之间(在上面的例子中为15 -meshgrid的宽度)是合理的-但我只是通过实验来做的-有没有一些数学方法来计算它?
1)https://thepythoncodingbook.com/2021/08/30/2d-fourier-transform-in-python-and-fourier-synthesis-of-images/

xurqigkl

xurqigkl1#

我想我现在有答案了--如果有人有什么想法,请发表评论

import numpy as np
import matplotlib.pyplot as plt

def get_3d_grating_to_scan(wavelength, alphaa,betaa,amplitude,shift_x,shift_y,shift_z, shift_amplitude,X,Y,Z):
        alpha = np.pi*alphaa
        beta = np.pi*betaa
        grating = (np.sin(
        2*np.pi*(((X*np.cos(alpha)*np.cos(beta))+shift_x) + (Y*np.sin(alpha)*np.cos(beta)+shift_y) +(Z*np.sin(beta)) +shift_z)/ wavelength
          )*amplitude)+shift_amplitude
        return grating

x = np.arange(-70, 70, 1)
X,Y,Z = np.meshgrid(x, x,x)
wavelength = 50
amplitude=1
# shift_x=50
# shift_y=50
# shift_z=50

shift_x=0
shift_y=0
shift_z=0

shift_amplitude=0
alpha = 1.7
beta =1.7
grating=get_3d_grating_to_scan(wavelength, alpha,beta,amplitude,shift_x,shift_y,shift_z, shift_amplitude,X,Y,Z)

plt.set_cmap("gray")
plt.imshow(np.array(grating)[:,5,:])
plt.show()

相关问题