9.27学习内容

9.27学习内容

  • torch.clamp/np.clip
  • hdf5storage.loadmat
  • scipy.ndimage.filters.convolve函数
  • np.rot90
  • np.tile
    • torch.roll(input, shifts, dims=None) → Tensor
  • 傅里叶变换
  • torch.conj
  • numpy.ceil()函数和numpy.floor()函数解读

看了 main_dpir_deblur.py

第一遍开始有些看不懂,第二遍懂一些了,第三遍使用debug跟着数据走了一遍,还是有些不是很懂

torch.clamp/np.clip

clamp_:in-place类型是指,但在一个tensor上操作了之后,是直接修改了这个tensor

clamp:返回一个新的tensor,而旧的tensor并不修改。

torch.clamp(input, min, max, out=None) → Tensor

将输入input张量每个元素的夹紧到区间 [min,max][min,max],并返回结果到一个新张量。

		| min, if x_i < min
  y_i = | x_i, if min <= x_i <= max
     	| max, if x_i > max

hdf5storage.loadmat

kernels = hdf5storage.loadmat(os.path.join('kernels', 'Levin09.mat'))['kernels'] ## 读取matlab数据的值

scipy.ndimage.filters.convolve函数

def convolve(input, weights, output=None, mode='reflect', cval=0.0,
         origin=0)

函数定义如上,其中weight代表卷积核/滤波器,mode代表填充方式,cval代表使用常数填充时的常数值,origin代表卷积核的中心位置偏移。函数返回值代表处理后的结果。

np.rot90

np.flipud(img)#将矩阵上下翻转,输入图像的话,翻转后生成新的图像
np.rot90(img)#将矩阵img逆时针旋转90°
np.flipud(np.rot90(img))#旋转90°后在上下翻转
#将矩阵A逆时针旋转(90×k)°以后返回B,k取负数时表示顺时针旋转。
np.rot90(img,k=2)

np.tile

对某一维进行扩充,默认是x轴

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i27L9cuY-1632758458221)(E:\book\blog\note\9.27\image-20210927191815918.png)]

如果有多个,第一个是y,第二个是x,x因为是1所以不会再复制了

torch.roll(input, shifts, dims=None) → Tensor

  • input (Tensor) —— 输入张量。
  • shifts (python:int 或 tuple of python:int) —— 张量元素移位的位数。如果该参数是一个元组(例如shifts=(x,y)),dims必须是一个相同大小的元组(例如dims=(a,b)),相当于在第a维度移x位,在b维度移y位
  • dims (int 或 tuple of python:int) 确定的维度。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-88kyUizY-1632758458222)(E:\book\blog\note\9.27\image-20210927203024112.png)]

傅里叶变换

将点扩展函数转换为光学传递函数。 otf = p2o(psf) 计算点扩展函数 (PSF) 阵列的快速傅立叶变换 (FFT),并创建不受 PSF 偏心影响的光学传递函数 (OTF) 阵列。

def p2o(psf, shape):
    '''
    Convert point-spread function to optical transfer function.
    otf = p2o(psf) computes the Fast Fourier Transform (FFT) of the
    point-spread function (PSF) array and creates the optical transfer
    function (OTF) array that is not influenced by the PSF off-centering.
    将点扩展函数转换为光学传递函数。 otf = p2o(psf) 计算点扩展函数 (PSF) 阵列的快速傅立叶变换 (FFT),并创建不受 PSF 偏心影响的光学传递函数 (OTF) 阵列。
    Args:
        psf: NxCxhxw
        shape: [H, W]
    Returns:
        otf: NxCxHxWx2
    '''
    otf = torch.zeros(psf.shape[:-2] + shape).type_as(psf)
    otf[...,:psf.shape[2],:psf.shape[3]].copy_(psf)
    for axis, axis_size in enumerate(psf.shape[2:]): ## 中心化!
        otf = torch.roll(otf, -int(axis_size / 2), dims=axis+2)
    otf = torch.fft.fftn(otf, dim=(-2,-1))  ## 傅里叶变换
    #n_ops = torch.sum(torch.tensor(psf.shape).type_as(psf) * torch.log2(torch.tensor(psf.shape).type_as(psf)))
    #otf[..., 1][torch.abs(otf[..., 1]) < n_ops*2.22e-16] = torch.tensor(0).type_as(psf)
    return otf

torch.conj

计算给定输入张量的元素共轭。 如果输入具有非复杂数据类型,则此函数仅返回输入。

>>>torch.conj(torch.tensor([-1 + 1j, -2 + 2j, 3 - 3j]))
tensor([-1 - 1j, -2 - 2j, 3 + 3j])

numpy.ceil()函数和numpy.floor()函数解读

np.ceil(a)np.floor(a) : 计算各元素的ceiling 值, floor值(ceiling向上取整,floor向下取整)

你可能感兴趣的:(每日学习汇总,pytorch,python,深度学习)