Gabor变化属于加窗傅里叶变换,Gabor函数可以在频域不同尺度、不同方向上提取相关的特征。Gabor函数与人眼的生物作用相仿,所以经常用于纹理识别上,并取得了较好的效果。

二维Gobor滤波函数:

其中:

xp = x*cos(theta)+y*sin(theta)

yp=y*cos(theta)-x*sin(theta)

function [ G,gabout ] = gaborfilter(I,Sx,Sy,f,theta)
% gaborfilter定义,I为输入图像,Sx、Sy是变量在x,y轴变化的范围,即选定的gabor小波窗口的大小
% f为正弦函数的频率,theta为gabor滤波器的方向。G为gabor滤波函数g(x,y),gabout为gabor滤波后的图像
if isa(I,'double')~=1
I = double(I);
end
for x = -fix(Sx):fix(Sx)
for y=-fix(Sy):fix(Sy)
xp = x * cos(theta) + y * sin(theta);
yp = y * cos(theta) - x*sin(theta);
G(fix(Sx)+x+1,fix(Sy)+y+1) = exp(-.5*((xp/Sx)^2+(yp/Sy)^2))*cos(2*pi*f*xp);
end
end
Imgabout = conv2(I,double(imag(G)),'same');
Regabout = conv2(I,double(real(G)),'same');
gabout = sqrt(Imgabout.*Imgabout+Regabout.*Regabout); %gabor小波变换后的图像gabout
end

close all;clear all;clc;
I = imread('wenli.jpg');
I=rgb2gray(I);
[G,gabout]=gaborfilter(I,2,4,16,pi/10); %调用garborfilter()函数对图像做小波变换
J = fft2(gabout); %对滤波后的图像做fft变换(快速傅里叶),变换到频域
A = double(J);
[m,n] = size(A);
B = A;
C = zeros(m,n);
for i=1:m-1
for j=1:n-1
B(i,j) = A(i+1,j+1);
C(i,j) = abs(round(A(i,j)-B(i,j)));
end
end
h = imhist(mat2gray(C))/(m*n);
mean = 0;con=0;ent=0;
for i=1:256 %图像的均值,对比度和熵
mean = mean+(i*h(i))/256;
con = con+i*i*h(i);
if(h(i)>0)
ent = ent-h(i)*log2(h(i));
end
end
figure;
subplot(121);imshow(I);
subplot(122);imshow(uint8(gabout));
mean,con,ent

​左图为原图,右图为gabor pi/10 方向上处理纹理图像
​左图为原图,右图为gabor pi/4 方向上处理纹理图像
  mean(平均值) Con(对比度) Ent(熵)
theta=pi/10 0.0043 1.6111 0.4046
theta=pi/4 0.0042 1.5869 0.3623

熵反映了图像的能量,当滤波器的方向和图像纹理方向越吻合,输出图像的能量越大。这证明了Gabor函数可以捕捉到相当多的纹理信息,具有极佳的空间特征。

利用Gabor变换法分析纹理图像 matlab代码实现的更多相关文章

  1. 熵权法原理及matlab代码实现

    参考原理博客地址https://blog.csdn.net/u013713294/article/details/53407087 一.基本原理 在信息论中,熵是对不确定性的一种度量.信息量越大,不确 ...

  2. 利用Python进行异常值分析实例代码

    利用Python进行异常值分析实例代码 异常值是指样本中的个别值,也称为离群点,其数值明显偏离其余的观测值.常用检测方法3σ原则和箱型图.其中,3σ原则只适用服从正态分布的数据.在3σ原则下,异常值被 ...

  3. dennis gabor 从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换(转载)

    dennis gabor 题目:从傅里叶(Fourier)变换到伽柏(Gabor)变换再到小波(Wavelet)变换 本文是边学习边总结和摘抄各参考文献内容而成的,是一篇综述性入门文档,重点在于梳理傅 ...

  4. SVM实例及Matlab代码

    ******************************************************** ***数据集下载地址 :http://pan.baidu.com/s/1geb8CQf ...

  5. Gabor变换、Gabor滤波器

    D.Gabor 1946年提出 窗口Fourier变换,为了由信号的Fourier变换提取局部信息,引入了时间局部化的窗函数. 由于窗口Fourier变换只依赖于部分时间的信号,所以,现在窗口Four ...

  6. 【转载】让你的MATLAB代码飞起来

    原文地址:http://developer.51cto.com/art/201104/255128_all.htm MATLAB语言是一种被称为是"演算纸"式的语言,因此追求的是方 ...

  7. 如何加速MATLAB代码运行

    学习笔记 V1.0 2015/4/17 如何加速MATLAB代码运行 概述 本文源于LDPCC的MATLAB代码,即<CCSDS标准的LDPC编译码仿真>.由于代码的问题,在信息位长度很长 ...

  8. 手机自动化测试:Appium源码分析之跟踪代码分析九

    手机自动化测试:Appium源码分析之跟踪代码分析九   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家 ...

  9. 转:【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/17348313 happen-before规则介绍 Java语言中有一个"先行发生 ...

随机推荐

  1. Autodesk Maya 2019 安装

    为什么我接触到建模了呢,我也不知道.只会弄点桌椅板凳简单动画,希望有时间更进一步学习,毕竟我还有一个开发游戏的梦想. 步骤:下载-安装-激活 Maya吧各版本合集下载 地址:https://pan.b ...

  2. 启动nginx 80端口被占用:tcp 0 0 127.0.0.1:80 127.0.0.1:34932 TIME_WAIT -

    1.启动nginx命令./sbin/nginx 2.提示80端口被占用 nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already ...

  3. Python+request+ smtplib 测试结果html报告邮件发送(上)《五》

    此方法通用适合所有邮箱的使用,只需注意几个点,如下: QQ邮箱.其他非QQ邮箱的写法,区别点如下: #--------------------------使用腾讯企业邮箱作为发件人的操作如下----- ...

  4. C# GridView 的使用

    1.GridView无代码分页排序: 1.AllowSorting设为True,aspx代码中是AllowSorting="True":2.默认1页10条,如果要修改每页条数,修改 ...

  5. 201812-4 数据中心(kruskal)

    考场上的时候被题目完全蒙住了,当时状态也不好,前几次考试每次考试当天就头晕感冒流鼻涕 好的,以上都是借口,自己没有好好复习才是真的... 题目: 好的,以上题目简述就是:给你一个无向连通图,求它的最小 ...

  6. 慕课网SSM仿大众点评

    目录: 配置部分: 1 配置报错不支持diamond运算符 运行部分: 1 登录的账号密码 2 运行项目是报错session超时 配置部分 1 配置报错不支持diamond运算符 原报错信息如下:id ...

  7. SIGAI机器学习第七集 k近邻算法

    讲授K近邻思想,kNN的预测算法,距离函数,距离度量学习,kNN算法的实际应用. KNN是有监督机器学习算法,K-means是一个聚类算法,都依赖于距离函数.没有训练过程,只有预测过程. 大纲: k近 ...

  8. Active Directory 常用属性

    1.获取DirectoryEntry string str = string.Empty; string strPath = @LDAP://testDomain.com.mo; string ad  ...

  9. 设计模式--UML类图简介

    UML:Unified Modelling Language是一种统一建模语言(英语:Unified Modeling Language,缩写 UML)是非专利的第三代建模和规约语言. “+”表示pu ...

  10. SpringMVC配置数据验证(JSR-303)

    这篇文章已经过时了. 请参考比较合适的前后端交互方式. 1.pom.xml中追加hibernate-validator 2.在dto类的域上追加JSR-303的注解 public class Data ...