import os import cv2 import numpy as np def gabor_kernel(ksize, sigma, gamma, lamda, alpha, psi): """ reference https://en.wikipedia.org/wiki/Gabor_filter """ sigma_x = sigma sigma_y = sigma / gamma ymax = xmax = ksize // 2 # 9//2 xmin, ymin = -xmax, -ymax # print("xmin, ymin,xmin, ymin",xmin, ymin,ymax ,xmax) # X(第一个参数,横轴)的每一列一样, Y(第二个参数,纵轴)的每一行都一样 (y, x) = np.meshgrid(np.arange(ymin, ymax + 1), np.arange(xmin, xmax + 1)) # 生成网格点坐标矩阵 # print("y\n",y) # print("x\n",x) x_alpha = x * np.cos(alpha) + y * np.sin(alpha) y_alpha = -x * np.sin(alpha) + y * np.cos(alpha) print("x_alpha[0][0]", x_alpha[0][0], y_alpha[0][0]) exponent = np.exp(-.5 * (x_alpha ** 2 / sigma_x ** 2 + y_alpha ** 2 / sigma_y ** 2)) # print(exponent[0][0]) # print(x[0],y[0]) kernel = exponent * np.cos(2 * np.pi / lamda * x_alpha + psi) print(kernel) # print(kernel[0][0]) return kernel def gabor_filter(gray_img, ksize, sigma, gamma, lamda, psi): filters = [] for alpha in np.arange(0, np.pi, np.pi / 4): print("alpha", alpha) kern = gabor_kernel(ksize=ksize, sigma=sigma, gamma=gamma, lamda=lamda, alpha=alpha, psi=psi) filters.append(kern) gabor_img = np.zeros(gray_img.shape, dtype=np.uint8) i = 0 for kern in filters: fimg = cv2.filter2D(gray_img, ddepth=cv2.CV_8U, kernel=kern) gabor_img = cv2.max(gabor_img, fimg) i += 1 p = 1.25 gabor_img = (gabor_img - np.min(gabor_img, axis=None)) ** p _max = np.max(gabor_img, axis=None) gabor_img = gabor_img / _max print(gabor_img) gabor_img = gabor_img * 255 return gabor_img.astype(dtype=np.uint8) def main(): dir_path = '7/' files = os.listdir(dir_path) for i in files: print(i) img = cv2.imread(dir_path + "/" + i) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) gabor_img = gabor_filter(img_gray, ksize=9, sigma=1, gamma=0.5, lamda=5, psi=-np.pi / 2) Img_Name = "5/gabor/" + str(i) cv2.imwrite(Img_Name, gabor_img) main()
时间: 2023-06-09 09:04:53 浏览: 88
这段代码定义了一个函数,用于生成一个Gabor滤波器核(Gabor kernel)。其中,使用了Python中的三个模块,分别是os、cv2和numpy。函数的输入参数为ksize、sigma、gamma、lamda、alpha和psi,分别表示核的大小、标准差、长宽比、波长、方向以及相位偏移。函数的实现采用了Gabor滤波器的数学公式,使用了numpy中的数组操作,最终生成了一个Gabor核。
相关问题
import os import sys from pathlib import Path import numpy as np import torch import cv2
这是一段Python代码,用于导入一些常用的库和模块。让我为你逐个介绍一下:
1. `import os`:这个模块提供了许多与操作系统交互的函数,例如文件和目录操作。
2. `import sys`:这个模块提供了对Python解释器的访问和控制,可以用来处理命令行参数等。
3. `from pathlib import Path`:`pathlib`模块提供了一种面向对象的方式来处理文件系统路径。`Path`类是`pathlib`模块中的一个重要类,可以用来创建、操作和查询文件路径。
4. `import numpy as np`:`numpy`是一个用于科学计算的Python库,提供了高性能的多维数组对象和相关的计算函数。
5. `import torch`:`torch`是一个用于机器学习和深度学习的Python库,提供了张量(tensor)数据结构和相关的计算函数。
6. `import cv2`:`cv2`是OpenCV库的Python接口,OpenCV是一个用于计算机视觉和图像处理的开源库,提供了许多图像处理和计算机视觉算法的实现。
from .face_struct import * import cv2 import numpy as np import base64 import os
这段代码是导入了一些需要用到的库和自定义的人脸结构体。其中:
- `cv2` 是 OpenCV 库,用于图像处理;
- `numpy` 是 Python 数值计算的基础库,用于数组运算等;
- `base64` 是用于将二进制数据编码成 ASCII 字符的库;
- `os` 是 Python 的标准库,用于操作文件和目录。
具体的实现需要看后续代码。