Python二维Gabor滤波加速
【摘要】 1️⃣作业需求选取5个尺度,36个方向共180个二维模板对一幅图像(任取,可用作业(1)的图像)分别做二维卷积,得到180幅滤波结果图像,以此作为基准Gabor滤波结果。由于这个基准算法处理速度很慢,故请试着对该方法进行改进,改进方法在要求得到同样180个卷积的结果图像的前提下,尽量提高其处理速度。2️⃣实现源码# coding:utf-8import cv2import numpy as ...
1️⃣作业需求 |
---|
2️⃣实现源码 |
---|
# coding:utf-8
import cv2
import numpy as np
import pylab as pl
from PIL import Image
#构建Gabor滤波器
from joblib.numpy_pickle_utils import xrange
def build_filters():
filters = []
ksize = [7,9,11,13,15] #gabor尺度 5个
lamda = np.pi/2.0 # 波长
# 三个参数 默认起点为0,终点为360,步长为10
for theta in np.arange(0,360,10): #gabor方向 36个方向
for k in xrange(5):
kern = cv2.getGaborKernel((ksize[k],ksize[k]),1.0,theta,lamda,0.5,0,ktype=cv2.CV_32F)
kern /= 1.5*kern.sum()
filters.append(kern)
return filters
#滤波过程
def process(img,filters):
accum = np.zeros_like(img)
for kern in filters:
fimg = cv2.filter2D(img,cv2.CV_8UC3,kern)
np.maximum(accum,fimg,accum)
return accum
#特征图生成并显示
def getGabor(img,filters):
image = Image.open(img)
img_ndarray = np.asarray(image)
res = [] #滤波结果
for i in xrange(len(filters)):
res1 = process(img_ndarray,filters[i])
res.append(np.asarray(res1))
pl.figure(2)
for temp in xrange(len(res)):
pl.subplot(36,5,temp+1) #画36*5的格子显示出来
pl.imshow(res[temp],cmap='gray')
pl.show()
return res
if __name__ == '__main__':
filters = build_filters()
getGabor('./dataset/image.png',filters)
其中image.png是我们要进行Gabor滤波处理的图片,也就是这张图片:
3️⃣实验结果 |
---|
实验结果是36x5的图片序列,每一列从左到右代表[7,9,11,13,15]五个尺度。每一行从上至下代表0、10、20…340、350共36个维度。一共180幅滤波结果图像,使用的cv2的getGaborKernel进行优化,滤波处理的速度非常快。
⭐实验源码+报告⭐ |
---|
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)