三维图像做全局空间变换后进行双线性插值代码python

是在图像进行空间变换后做的插值

cp是cupy库,跟numpy的功能基本一样,indx,indy,indz是图像的x,y,z轴的坐标索引,mat是空间变换矩阵。为了迭代更快做了函数部分并行化处理

def rot_tran_3inter(img, indx, indy, indz, mat):
    # 旋转变换是沿着z,x,y方向进行的,先旋转再平移

    rows, cols, slic = img.shape
    dstimg = img.copy()

    # 双线性插值
    fnx = mat[0, 0] * indx + mat[0, 1] * indy + mat[0, 2] * indz + mat[0, 3]
    fny = mat[1, 0] * indx + mat[1, 1] * indy + mat[1, 2] * indz + mat[1, 3]
    fnz = mat[2, 0] * indx + mat[2, 1] * indy + mat[2, 2] * indz + mat[2, 3]


    dx=fnx-cp.floor(fnx)
    dy=fny-cp.floor(fny)
    dz=fnz-cp.floor(fnz)
    fx1 = cp.clip((cp.floor(fnx)).astype(cp.int),0,rows - 2)
    fy1 = cp.clip((cp.floor(fny)).astype(cp.int),0,cols - 2)
    fz1 = cp.clip((cp.floor(fnz)).astype(cp.int),0,slic - 2)
    fx2=fx1+1
    fy2=fy1+1
    fz2=fz1+1

    #先在z1层进行二维双线性插值
    z1=(img[fx1,fy1,fz1]*(1-dx)+img[fx2,fy1,fz1]*dx)*(1-dy)\
         +(img[fx1,fy2,fz1]*(1-dx)+img[fx2,fy2,fz1]*dx)*dy
    #z2层次进行二维双线性插值
    z2=(img[fx1,fy1,fz2]*(1-dx)+img[fx2,fy1,fz2]*dx)*(1-dy)\
         +(img[fx1,fy2,fz2]*(1-dx)+img[fx2,fy2,fz2]*dx)*dy

    dstimg[indx, indy, indz]=z1*(1-dz)+z2*dz
    return dstimg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值