基于Gabor滤波器的图像边缘检测实验
来源:互联网 发布:路由器无网络怎么回事 编辑:程序博客网 时间:2024/05/18 02:06
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*etagama = 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 ); endend%-------利用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:v for 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); endend%-----------------------------------------对每幅图像进行非极大值抑制[m,n] = size(filtered_cell{1,1});for i = 1:v for j =1:u img = filtered_cell{i,j}; for p = 3:m-2 for q = 3:n-2 if j==1 A = [img(p-1,q),img(p+1,q)]; if (img(p,q) < max(A)) img(p,q)=0; end elseif(j==2) A = [img(p-1,q+1),img(p+1,q-1)]; if (img(p,q) < max(A)) img(p,q)=0; end elseif(j==3) A = [img(p,q-1),img(p,q+1)]; if (img(p,q) < max(A)) img(p,q)=0; end elseif(j==4) A = [img(p-1,q-1),img(p+1,q+1)]; if (img(p,q) < max(A)) img(p,q)=0; end end end end filtered_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); endend%-----------------------------------------多尺度多方向的图像融合%=======将同一尺度下各个方向的图像进行融合for i = 1:v for j = 1:u img_cell = filtered_cell(i,:); end for r = 1:m for s = 1:n for k=1:u B(k) = img_cell{1,k}(r,s); end img(r,s) = max(B); end end img_mix{1,i} = img; % figure; % imshow(img_mix{1,i}/max(img_mix{1,i}));end%=======将多尺度图像进行融合for r = 1:m for s = 1:n for k = 1:v C(k) = img_mix{1,k}(r,s); end img_mixed(r,s) = mean(C); endend figure imshow(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:m for j =1:n for 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; end end end end endendimg_edge = img_mixed;figureimshow(img_edge);title('边缘检测图像');
- 基于Gabor滤波器的图像边缘检测实验
- 实验六、图像的边缘检测
- 基于C++的图像边缘检测技术
- 【图像处理】Gabor滤波器
- 【图像处理】Gabor滤波器
- 基于Gabor滤波器的纹理分割
- 基于Gabor滤波器的车道线识别
- 图像的边缘检测
- 图像的边缘检测
- 【图像处理】Gabor滤波器Gabor filter
- 基于DM642的图像边缘检测算法的研究
- OPenCV边缘检测滤波器
- 边缘检测滤波器
- OpenCV使用Sobel滤波器实现图像边缘检测
- Gabor滤波器的生成
- 2D-Gabor 滤波器对图像纹理的增强
- 8基于opencv的边缘检测_Canny算子_Sobel算子_Laplace算子_Scharr滤波器
- 基于OpenCV库的Gabor滤波器的实现
- Elasticsearch试水
- Angular开发(二十七)-补充rxjs的使用
- Android 设计模式一:单例模式
- ajax发送请求,以及动态添加到页面
- C++11 lambda
- 基于Gabor滤波器的图像边缘检测实验
- 【算法】程序猿不写代码是不对的70
- 学习笔记——JAVA设计模式<11>享元模式
- 封装:树形节点的封装
- 使用SQL操作SQLite存储的ST_Geometry
- win7 64位安装redis 及Redis Desktop Manager使用
- I/O多路转接之epoll
- Git常见问题汇总
- Java English Translation