基于Gabor滤波器的图像边缘检测实验

article/2025/10/23 3:13:13

1 Gabor滤波算法原理

Gabor核函数定义:这里写图片描述
式中:依次作为主轴方向上的高斯尺度、主轴方向正交的高斯尺度, 是滤波器的中心频率;是调制平面波以及高斯主轴旋转的角度,它沿着逆时针方向,和是常数。Gabor滤波器它的虚部适合用来提取图像的边缘信息,性能对噪声有较好的鲁棒特性。
在以、作为变量构建不同尺度和方向的滤波器组,分别可以检测出图像不同方向的边缘信息,再对非边缘点进行抑制,融合不同方向的边缘信息,得到完整的边缘信息。最后对图像进行边缘连接得到完整边缘。
2 Gabor滤波器检测步骤
选取如下图所示的图像作为边缘检测对象。该图像边缘主要为直线,方向清晰,易于作为图像的边缘检测。
这里写图片描述
2.1 多尺度多方向Gabor滤波核
由于Gabor滤波函数的虚部比较适合提取图像的边缘信息,选用不同的中心频率和方向构建一组滤波核
这里写图片描述
根据所选的检测图样,选取f = 0.15 , 0.3 , 0.45 theta为0,pi/4,pi/2,3pi/4。得到滤波核组如图1所示:
这里写图片描述

function [ Gabor_k ] = makeGabor(x,y, f0,theta )
%生成Gabor滤波
%gama,eta为常数
%            f0^2
% G(Z)=------------------*exp(-(f0^2*x1^2/gama^2+f0^2*y1^2/eta^2))*exp(i*2*pi*f0*x1)
%         pi*gama*eta
gama = 1;eta = 2;x1 = x*cos(theta)+y*sin(theta);y1 = -x*sin(theta)+y*cos(theta);Gabor_k = f0^2/(pi*gama*eta)*exp(-(f0^2*x1^2/gama^2+f0^2*y1^2/eta^2))*exp(i*2*pi*f0*x1);%Gabor的滤波函数end

2.2 图像初步边缘检测
首先对图像进行灰度化处理,处理后的图像与所构建的多尺度多方向滤波核依次进行卷积得到不同尺度下,各个方向的边缘检测图样,每个图像都代表不同方向和尺度下的边缘信息。
灰度图像
多尺度多方向边缘检测图

function [filtered] = filteredImage(I,h,w ,f0,theta)
%得到梯度幅值图和相位图,实部与虚部
%I------输入图像
%h------Gabor窗口高,为偶数
%w------Gabor窗口的宽,为偶数
%filtered--边缘检测图像
%--------------检测输入的h,w为偶数
if (mod(h,2)~=0 || mod(w,2)~=0)error('"h" or "w" is odd');
end
%--------------对输入图像进行判断和灰度处理
if (size(I,3)>1)I=rgb2gray(I);
end
%---------------生成(h+1)*(w+1)窗口大小的Gabor滤波器
x=0;
z=zeros(h+1,w+1);for m = linspace(-h/2,h/2,11)x=x+1;y=0;for n = linspace(-w/2,w/2,11)y=y+1;z(y,x) = makeGabor(m,n, f0,theta );end
end
%-------利用Gabor滤波器的虚部进行边缘检测
I = double(I);
z_img = imag(z);
filtered = conv2(I,z_img,'same');
%figure;
filtered = filtered/max(filtered(:));
end

2.3 图像非极大值抑制
将初步边缘检测得到的图像,按照检测的方向,对相应图像每个点附近两个点进行比较,若为最大值则保留,若不是,则变为0。
这里写图片描述
2.4 多尺度多方向图像融合
对于不同尺度和不同方向下检测得到的图像包含不同的边缘信息,为的到完整的边缘信息需要对图像进行融合,融合的图像如图6所示。
这里写图片描述
2.5 边缘连接
在对图形进行融合后,需要将图像边缘连接成轮廓,对融合图像的8邻域位置寻找可以连接的点,若在上下阈值方为内则设置为边缘点,若不在阈值范围内,则为0。最终检测得到的边缘图像如图7所示。
这里写图片描述
3 总结
1) 同过实验可以发现Gabor虚部对于图像的边缘检测有效,而多尺度多方向的检测更能比较全面的检测出图像的边缘信息。
2) 实验结果中,出现非边缘信息表明,在极大值的抑制中,对非边缘点的抑制不够导致部分非边缘信息显现。因此,后面有待改进。
3) 对于边缘点的连接,只是对每个点的8邻域进行了分析,对于边缘缺失信息较大的区域无法起到很好的连接作用。该点也是需要改进的地方。

clear all;
close all;
I = imread('1.jpg');
h = 6;
w = 6;
u = 4;
v = 3;
%-----------------------------------------对图像进行多方向多尺度的边缘检测
for i=1:vfor j=0:(u-1)theta = pi*j/4;%方向f0 = 0.15*i; %尺度filtered_cell{i,j+1} =  filteredImage(I,h,w ,f0,theta);figure(1);subplot(3,4,(i-1)*4+(j+1))imshow(filtered_cell{i,j+1});titlename = strcat('f0:',num2str(f0),' theta:',num2str(theta*180/pi));title(titlename);end
end
%-----------------------------------------对每幅图像进行非极大值抑制
[m,n] = size(filtered_cell{1,1});
for i = 1:vfor j =1:uimg = filtered_cell{i,j};for p = 3:m-2for q = 3:n-2if j==1A = [img(p-1,q),img(p+1,q)];if (img(p,q) < max(A))img(p,q)=0;endelseif(j==2)A = [img(p-1,q+1),img(p+1,q-1)];if (img(p,q) < max(A))img(p,q)=0;endelseif(j==3)A = [img(p,q-1),img(p,q+1)];if (img(p,q) < max(A))img(p,q)=0;endelseif(j==4)A = [img(p-1,q-1),img(p+1,q+1)];if (img(p,q) < max(A))img(p,q)=0;endendendendfiltered_cell{i,j} = img;figure(2);subplot(3,4,(i-1)*4+j)imshow(filtered_cell{i,j});titlename = strcat('f0:',num2str(f0),' theta:',num2str(theta*180/pi));title(titlename);end
end
%-----------------------------------------多尺度多方向的图像融合
%=======将同一尺度下各个方向的图像进行融合
for i = 1:vfor j = 1:uimg_cell = filtered_cell(i,:);endfor r = 1:mfor s = 1:nfor k=1:uB(k) = img_cell{1,k}(r,s);endimg(r,s) = max(B); endendimg_mix{1,i} = img;%  figure;%  imshow(img_mix{1,i}/max(img_mix{1,i}));
end
%=======将多尺度图像进行融合
for r = 1:mfor s = 1:nfor k = 1:vC(k) = img_mix{1,k}(r,s);endimg_mixed(r,s) = mean(C);end
endfigureimshow(img_mixed);
%---------------------------------------对图像进行边缘连接
low = 0.1;
up = 0.2;
neighbour=[-1 -1;-1 0;-1 1;0 -1;0 1;1 -1;1 0;1 1]; 
for i = 1:mfor j =1:nfor k=1:8  yy=i+neighbour(k,1);  xx=j+neighbour(k,2);  if yy>=1 && yy<=m && xx>=1 && xx<=n    if img_mixed(yy,xx)>=low    %判断下阈值  img_mixed(yy,xx)=255;    if img_mixed(yy,xx)<=up     %判断上阈值img_mixed(yy,xx)=0;endend  end          end end
end
img_edge = img_mixed;
figure
imshow(img_edge);
title('边缘检测图像');

http://chatgpt.dhexx.cn/article/13qwR8Ud.shtml

相关文章

版本管理工具git常用命令

一、git是什么&#xff0c;⽤来做什么 git是分布式版本控制系统&#xff0c;⽤来进⾏版本管理 ⼆、git有什么特点 git VS svn git是分布式&#xff0c;svn是集中式。分布式版本系统的最⼤好处之⼀是在本地⼯作完全不需要考 虑远程库的存在&#xff0c;也就是有没有联⽹都可以…

Git 代码版本管理工具详解 进厂必备

目录 前言Git 概述什么是版本控制&#xff1f;为什么需要版本控制&#xff1f;版本控制工具集中式分布式 Git 工作机制Git安装Git 常用命令(部分)初始化本地库设置用户签名初始化本地库查看本地库状态***工作区代码编写***添加暂存区撤销工作区的修改***提交本地库***工作区修改…

代码版本管理工具Git

Git 的发展历史 在做一个项目工程的时候&#xff0c;代码总是不断地更新&#xff0c;于是你就可能一边写代码&#xff0c;一边就为你的代码创建了很多的版本文件夹&#xff0c;分别叫“项目 0.1”、“项目 0.2”、“项目 0.3”、“项目 1.0”之类的名字&#xff0c;让你可以区…

Git分布式版本管理工具

Git_1_概述 1.特性 能够记录历史版本,回退历史版本团队开发,方便代码合并 2.介绍(摘自维基百科) git是一个分布式版本控制软件&#xff0c;最初由林纳斯托瓦兹创作&#xff0c;于2005年以GPL许可协议发布。最初目的是为了更好地管理Linux内核开发而设计。应注意的是&#xf…

Node版本管理工具

前些天在公司的时候&#xff0c;由于业务需求需要降低node的版本&#xff0c;但是网上找了一大堆教程&#xff0c;windows电脑都无法使用&#xff0c;没办法自己研究了一下&#xff0c;成功在自己电脑上安装了多个版本的node&#xff0c;几个命令就能切换&#xff0c;那么就让我…

软件测试——版本管理工具:SVN和Git

软件测试——版本管理工具&#xff1a;SVN和Git SVNSVN的安装和介绍SVN的安装操作冲突 GitGit的安装和配置git的命令行用法git 代码冲突 持续集成和持续交付定义目的持续集成和持续交付实施模型分析 SVN SVN是开放源代码的版本控制系统集中式的含义是指&#xff1a;所有的文件…

版本管理工具介绍—Git篇

一.版本管理工具作用 主要讲解了git在各平台的安装和基本使用&#xff0c;Git能够帮助我们解决文件的提交、检出、回溯历史、冲突解决、多人协作模式等问题&#xff0c;并且大大提升我们的工作效率。 版本管理工具是干什么的&#xff1f; 1.备份文件 2.历史记录 3.回到过去…

版本管理的使用

gitlab的使用 gitlab是一个代码仓库&#xff0c;类似于github&#xff0c;只不过gitlab是私有的&#xff0c;一般部署在公司内部的服务器上 网站设置为中文页面 点击右上角的头像&#xff0c;点击弹出框的Preferences菜单&#xff0c;如下图&#xff1a; 打开页面后&#xff0…

2. 版本管理

文章目录 2.1 一句话总结Git2.2 可以完成哪些功能&#xff1f;2.3 主流版本控制工具/软件2.4 版本控制分类2.4.1 本地版本控制2.4.2 集中版本控制2.4.3 分布式版本控制 2.5 Git VS SVN2.5.1 SVN2.5.2 Git 2.1 一句话总结Git 在开发的过程中用于管理对文件、目录或工程等内容的…

软件版本管理

修订说明 1.PC端产品内部版本号管理说明 为了规范产品管理&#xff0c;提高产品质量&#xff0c;特制定产品版本规则。产品从版本上分为主版本和分支版本&#xff0c;从稳定程度上分为每日构建、内部测试版(alpha测试)、Beta测试版、稳定版。 所有的版本命名均遵循以下规则&a…

Git版本管理工具使用详细介绍

一、引言 跟你们吐槽一下&#xff0c;最近小编的工作制度也改成996&#xff0c;怎么说&#xff1f; 是好是坏呢&#xff1f; 网上很多小伙伴也在吐槽&#xff0c;刚开始小编也是挺反感的&#xff0c;毕竟之前周末一些坚持的习惯&#xff0c;因此都需要改变。 既然公司选择了996…

Git—版本管理工具

作用&#xff1a;分布式版本控制 一句话&#xff1a;在开发的过程中用于管理对文件、目录或工程等内容的修改历史&#xff0c;方便查看历史记录&#xff0c;备份以便恢复以前的版本的软件工程技术 官网下载安装&#xff1a;https://git-scm.com/ 命令大全&#xff1a;https://g…

常见的版本控制工具

常见的版本控制工具 我们学习的东西&#xff0c;一定是当下最流行的&#xff01; 主流的版本控制器有如下这些&#xff1a; Git SVN&#xff08;Subversion&#xff09; CVS&#xff08;Concurrent Versions System&#xff09; VSS&#xff08;Micorosoft Visual SourceS…

git版本管理工具

文章目录 1&#xff1a;安装1&#xff1a;设置信息 2&#xff1a;初始化本地项目仓库2.1&#xff1a;本地仓库目录解释 3&#xff1a;git基本原理1&#xff1a;本地流程原理图2&#xff1a;分支合并&#xff1a;merge和rebase3&#xff1a;命令解释 4&#xff1a;git-gui界面操…

项目管理中,如何对各种文件进行统一版本管理?

不知道你在工作中是否也遇到过这样的问题&#xff1a; 1、文件先存一个位置&#xff0c;等晚点再整理&#xff0c;结果过了一段时间&#xff0c;就变成了这样&#xff1a; 2、想从电脑中找一份重要材料&#xff0c;要花费很长时间&#xff0c;有时查找一通&#xff0c;却一无所…

【Linux】版本管理工具 Git

目录 一、什么是 Git 二、如何使用 Git 1、创建远程仓库 2、将远端仓库克隆到本地 3、将本地文件添加到仓库 3.1、三板斧第一招&#xff1a;文件添加 3.2、三板斧第二招&#xff1a;提交本地 3.3、三板斧第三招&#xff1a;提交远端 4、删除文件 5、删除仓库 一、什么是 Gi…

版本管理工具(一)

Git 是一个分布式版本控制工具&#xff0c;它的作者 Linus Torvalds 是这样给我们介绍 Git —— The stupid content tracker&#xff08;傻瓜式的内容跟踪器&#xff09; 1、 Git 背景 Git 最初由Linus Torvalds编写&#xff0c;用于 Linux 内核开发的版本控制工具。 Git 与常…

版本管理工具

目录 什么是Git&#xff0c;Git与SVN区别是什么什么是gitGit与SVN区别是什么 Git结合android studio使用安装Git配置信息Android Studio中配置GitGitLab 使用Android Studio中使用Git从GitLab上clone项目分支管理 Git复制其他分支提交Git同步远程分支Git只删除远程仓库文件修改…

Git 版本管理工具(一)

Git 是一个分布式版本控制工具&#xff0c;它的作者 Linus Torvalds 是这样给我们介绍 Git —— The stupid content tracker&#xff08;傻瓜式的内容跟踪器&#xff09; 1、 Git 背景 Git 最初由Linus Torvalds编写&#xff0c;用于 Linux 内核开发的版本控制工具。 Git 与…

版本管理工具 SVN和git

目录 版本管理工具 SVN和git 一、版本控制器的应用场景 二、版本控制器的方式 1.集中式版本控制工具 2.分布式版本控制工具 二、SVN 1.安装服务端 1.创建仓库 2.创建用户 2.安装eclipse插件 1.常见图标 2. 拉取 3.提交、更新、合并、分支等 三、GIT 3.1 基本概念…