Python二维Gabor滤波加速

举报
振华OPPO 发表于 2022/01/08 16:26:40 2022/01/08
【摘要】 1️⃣作业需求选取5个尺度,36个方向共180个二维模板对一幅图像(任取,可用作业(1)的图像)分别做二维卷积,得到180幅滤波结果图像,以此作为基准Gabor滤波结果。由于这个基准算法处理速度很慢,故请试着对该方法进行改进,改进方法在要求得到同样180个卷积的结果图像的前提下,尽量提高其处理速度。2️⃣实现源码# coding:utf-8import cv2import numpy as ...
1️⃣作业需求
选取5个尺度,36个方向共180个二维模板对一幅图像(任取,可用作业(1)的图像)分别做二维卷积,得到180幅滤波结果图像,以此作为基准Gabor滤波结果。由于这个基准算法处理速度很慢,故请试着对该方法进行改进,改进方法在要求得到同样180个卷积的结果图像的前提下,尽量提高其处理速度。
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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。