首页 > python for i in range 三维_python中的三维卷积

python for i in range 三维_python中的三维卷积

虽然循环可以工作,但跟踪嵌套循环也很困难。您可以考虑调用卷积定理来更容易地执行卷积。见here。在

使用numpy的fft模块,您可以计算原始图像堆栈的n维离散Fourier变换,并将其乘以大小相同的核的n维Fourier变换(文档可找到here)。因为你的2D内核是一个3x3数组,它是一个3x3xz正方形的“支柱”,你可以用0填充这个数组来相应地增加维数。在

试试这个:import numpy as np

import math

radius = 2

r2 = np.arange(-radius, radius+1)**2

sphere = r2[:, None, None] + r2[:, None] + r2

sphere -= np.max(sphere)

sphere = -sphere*2

array_len = 10*radius

array = np.zeros((array_len, array_len, array_len))

center = slice(array_len//2-radius,

array_len//2+radius+1), slice(array_len//2-radius,

array_len//2+radius+1),slice(array_len//2-radius,

array_len//2+radius+1)

array[center] = sphere

k_len = 3

kernel_2D = np.ones((k_len,k_len))

kernel = np.zeros_like(array)

center_k = slice(array_len//2-math.ceil(k_len/2),

array_len//2+k_len//2), slice(array_len//2-math.ceil(k_len/2),

array_len//2+k_len//2)

for i in range(kernel.shape[2]):

kernel[center_k+(i,)] = kernel_2D

def fft(array):

fft = np.fft.ifftshift(np.fft.fftn(np.fft.fftshift(array)))

return fft

def ifft(array):

ifft = np.fft.fftshift(np.fft.ifftn(np.fft.ifftshift(array)))

return ifft

def conv_3D(array, kernel):

conv = np.abs(ifft(fft(array)*fft(kernel)))

return conv

conv = conv_3D(array, kernel)

这将半径为2的球体与边长为3的支柱卷积在一起。在

更多相关:

  • 1. 一维数组 静态 int array[100];   定义了数组array,并未对数组进行初始化静态 int array[100] = {1,2};  定义并初始化了数组array动态 int* array = new int[100];  delete []array;  分配了长度为100的数组array 动态 int* a...

  • 一.选择排序 #include //选择排序 //记录最小的那个数的索引值 //下面这个循环就是去寻找最小的那个数的index //有比k对应的值更小的 //判断是否需要交换 //k和i对应的值交换 void selectsort(int array[],int counttimes){     int k = 0...

  • php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如u975au4ed4。人阅读比较困难。现在这个方法在json_encode的基础上再进行一次美化处理。使人能方便阅读内容。   1. 使用 json_encode 输出 1

  • 首先准备如下社交图形数据:打开spark-shell;导入相关包:import org.apache.spark._ import org.apache.spark.graphx._ import org.apache.spark.rdd.RDD创建如上graph对象:// Create an RDD for the vertice...

  • 一  字节流 1.1字节输出流OutputStream OutputStream是一个抽象类,操作的数据都是字节。 输出流中定义都是写write方法,如下图: 1.1.1 FileOutputStream类 OutputStream有很多子类,其中子类FileOutputStream可用来写入数据到文件。FileOutputStre...

  • 我来瞎谈一下Kernel Engineer的几个境界。瞎谈呀,弟兄们别当真。 闲聊Kernel engineer的境界境界(一):1. 喜欢OS。别的啥也看不上。2. 读kernel代码,每天特来劲。饭桌上特牛逼:-)3. 觉得自己啥也不懂,看了就忘,特沮丧。4. 玩板子,特来劲,饭桌上具牛逼。 闲聊Kernel engineer的境...