使用torch 实现 sobel, scharr 算子

1. torch 实现 sobel ,schar 算子

在 PyTorch 中,可以通过使用卷积操作来实现 Sobel 和 Scharr 算子。

下面是一个使用 PyTorch 实现 Sobel 和 Scharr 算子的示例代码:

import torch
import torch.nn.functional as F

# Sobel 算子
sobel_x = torch.Tensor([[1, 0, -1], [2, 0, -2], [1, 0, -1]]).unsqueeze(0).unsqueeze(0)
sobel_y = torch.Tensor([[1, 2, 1], [0, 0, 0], [-1, -2, -1]]).unsqueeze(0).unsqueeze(0)

# Scharr 算子
scharr_x = torch.Tensor([[3, 0, -3], [10, 0, -10], [3, 0, -3]]).unsqueeze(0).unsqueeze(0)
scharr_y = torch.Tensor([[3, 10, 3], [0, 0, 0], [-3, -10, -3]]).unsqueeze(0).unsqueeze(0)

# 将图像转换为张量
image = torch.randn(1, 1, 256, 256)

# 应用 Sobel 算子
grad_x = F.conv2d(image, sobel_x, padding=1)
grad_y = F.conv2d(image, sobel_y, padding=1)

# 应用 Scharr 算子
grad_x_s = F.conv2d(image, scharr_x, padding=1)
grad_y_s = F.conv2d(image, scharr_y, padding=1)

# 计算梯度幅值
grad_mag = torch.sqrt(grad_x**2 + grad_y**2)
grad_mag_s = torch.sqrt(grad_x_s**2 + grad_y_s**2)

在上面的代码中,首先定义了 Sobel 和 Scharr 算子的卷积核。然后将图像转换为 PyTorch 张量,并使用 F.conv2d() 函数应用 Sobel 和 Scharr 算子。最后,通过计算梯度幅值,可以得到最终的梯度图像。

需要注意的是,使用 PyTorch 实现 Sobel 和 Scharr 算子时,需要将卷积核转换为 PyTorch 张量,并使用 F.conv2d() 函数进行卷积操作。此外,还需要对图像进行零填充以避免边界像素的影响。

1. torch 实现cqt

常数q变换;

reference:

https://ieeexplore.ieee.org/document/9174990

https://blog.csdn.net/weicao1990/article/details/100521530;

猜你喜欢

转载自blog.csdn.net/chumingqian/article/details/129829580