利用Gabor变换法分析纹理图像 matlab代码实现

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函数可以捕捉到相当多的纹理信息,具有极佳的空间特征。

原文地址:https://www.cnblogs.com/wojianxin/p/11432280.html

时间: 2024-11-19 03:34:59

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

模式识别之 MDS Multidimensional Scaling 多维尺度法 分析及Matlab实现

在模式识别中,我们会考虑到距离distance的问题,就是一个样本和另一个样本在空间中的距离.根据距离的大小来判断分类.那么,也存在这样的一类问题:我们只知道空间中的点(样本)的距离,那么怎么来重构这些点的相对位置呢? 显然欧式距离是最直观的距离,那么我们就会想使用欧式距离来进行计算重构,我们还希望能够在不同维度上进行重构,比如2维或者3维. 怎么做? 有这么个解决方法叫做MDS 全称为 Multidimensional Scaling. 下面Step By Step介绍MDS如何来求解这个问题

利用BPSO与KNN进行特征选择及matlab代码实现

这个是本人在做大创项目,师姐做完的特征提取部分代码后,我们利用接收到的结果进行特征选择操作.下面从要求和思路两个部分简单介绍一下:我们通过BPSO结合KNN进行降维的基本思路. 一.要求 学姐给我们的数据一共有4个.mat文件.分别是训练集数据.训练集标签.测试集数据和测试集标签.训练集和测试集分别是60张图片,每张图片提取了1862个特征.因此,我们得到的Train_dataH和Test_data都是60*1862的阵列,标签为60*1的列矩阵.我们观察了标签,发现训练集和测试集都分别是10类

Adaboost算法原理分析和实例+代码(简明易懂)

Adaboost算法原理分析和实例+代码(简明易懂) [尊重原创,转载请注明出处] http://blog.csdn.net/guyuealian/article/details/70995333     本人最初了解AdaBoost算法着实是花了几天时间,才明白他的基本原理.也许是自己能力有限吧,很多资料也是看得懵懵懂懂.网上找了一下关于Adaboost算法原理分析,大都是你复制我,我摘抄你,反正我也搞不清谁是原创.有些资料给出的Adaboost实例,要么是没有代码,要么省略很多步骤,让初学者

SAR成像学习(三)距离方向成像matlab代码解析 1

本文将结合matlab代码讲解SAR距离向成像问题. 本文只研究距离向,且是正侧视情况. 文中以同一方位向坐标上四个目标点的成像为例,这四个目标的关系如下: 目标的相关信息: % 关于目标 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Xc=2.e3; % Range distance to center of target area X0=50; % target area in range is within [Xc-X0,Xc+X0] ntarg

SAR成像学习(四)距离方向成像matlab代码解析 2

如果发射信号是线性调频信号,上一次讲的距离成像算法流程(匹配滤波方法)依然可以用,但那个流程要求T x =4X 0 c >T p  .如果T x <T p  ,即幅宽相对较小的情况,上一讲中的流程会带来一个问题,解决这个问题的办法是pulse compression.本文将会讨论这个puse compression的原理和实现. 1 what is pulse compression 对于线性调频信号:p(t)=a(t)exp(jβt+jαt 2 ) ,信号持续时间为T p  ,瞬时频率为β+

gabor变换人脸识别的python实现,att_faces数据集平均识别率99%

大家都说gabor做人脸识别是传统方法中效果最好的,这几天就折腾实现了下,网上的python实现实在太少,github上的某个版本还误导了我好几天,后来采用将C++代码封装成dll供python调用的方式,成功解决. 图像经多尺度多方向的gabor变换后,gabor系数的数目成倍上升,所以对gabor系数必须进行降维才能送至后续的SVM分类器.测试图像使用att_faces数据集(40种类型,每种随机选5张训练,5张识别),降维方式我测试了DCT.PCA两种变换方式,说实话,dct不怎么靠谱,居

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

转载请注明出处:http://blog.csdn.net/ns_code/article/details/17348313 happen-before规则介绍 Java语言中有一个"先行发生"(happen-before)的规则,它是Java内存模型中定义的两项操作之间的偏序关系,如果操作A先行发生于操作B,其意思就是说,在发生操作B之前,操作A产生的影响都能被操作B观察到,"影响"包括修改了内存中共享变量的值.发送了消息.调用了方法等,它与时间上的先后发生基本没有

Poisson image editing算法实现的Matlab代码解析

之前我发了数篇系列博文来仔细研究Poisson Image Editing算法,每次重新审视和深入,仿佛都能有更为深刻的认识和很大的收获.这应该算是我这个系列的完结篇,会用用Matlab代码一点一点的演示,原文作者到底是如何设计和实现他那个强大且影响深远的算法的.希望你在看本文之前务必参考一下文章来了解算法原理,本文将主要讲解编程实现的问题,对于前面讲过的内容,我不会深究.但我个人总体的感觉是,现在图像处理算法对数学的要求是越来越高了,像泊松融合.泊松抠图这样的算法如果没有偏微分方程(本算法中涉

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

原文地址:http://developer.51cto.com/art/201104/255128_all.htm MATLAB语言是一种被称为是"演算纸"式的语言,因此追求的是方便性.灵活性以及交互性.在快速性上要比C语言这种性能强劲著称的稍逊一筹.然而,通过一些手段,我们也能让MATLAB语言快起来,甚至和C差不多了! MATLAB语言是一种被称为是"演算纸"式的语言,因此追求的是方便性.灵活性以及交互性.在快速性上要比C语言这种性能强劲著称的稍逊一筹.然而,通