Kirsch边缘检测原理

Kirsch算子由8个3×3窗口模扳组成、每个模板分别代表一个特定的检测方向,其模板算子如图2.3.1所示。

  在进行边缘检测时,把M0-M7所表示的边缘模板(加权矩阵)分别与图像中的一个3×3区域相乘,选取输出值为最大的模板。然后,把这一最大输出值作为中央像素点上的边缘强度,把取得最大值的边缘模板Mk的方向k(k的取值如图2.3.2所示)作为其边缘方向。假设图像中一点P(i,j)及其八邻域的灰度如图3.3.3所示,并设Qk(k=0,1,…,7)为图像经过kirsch算子第k个模板处理后得到的k方向上的边缘强度,则P(i,j)的边缘强度为s(i,j)=max|qk|(k=0,1,…,7),而相应的边缘方向D(i,j)={k|qk为最大值}

%读出要处理的图象
clear
clc
close all
bw=imread('e:\11.jpg');

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对图象进行预处理

%画出原始图象
bw1=rgb2gray(bw);
figure(1)
imshow(bw1)
title('原始图象')

%对图象进行均值滤波处理
bw2=filter2(fspecial('average',3),bw1);
figure(2)
imshow(bw2)
title('均值滤波')

%对图象进行高斯滤波处理
bw3=filter2(fspecial('gaussian'),bw2);
figure(3)
imshow(bw3)
title('高斯滤波')

%利用小波变换对图象进行降噪处理
[thr,sorh,keepapp]=ddencmp('den','wv',bw3);     %获得除噪的缺省参数
bw4=wdencmp('gbl',bw3,'sym4',2,thr,sorh,keepapp);%图象进行降噪处理
figure(4)
imshow(bw4)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%提取图象边缘
t=1200 ;                        %设定阈值
colormap(gray(256));          %设定调色板
bw5=double(bw4);             %把图变为十进制数
[m,n]=size(bw5);               %得到图像的大小(长和宽)
g=zeros(m,n);              %定义一个大小为S的零矩阵
%利用Sobel算子进行边缘提取
for i=2:m-1
  for j=2:n-1
       d1 =(5*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;
       d2 =((-3)*bw5(i-1,j-1)+5*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;
       d3 =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)+5*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)+5*bw5(i+1,j+1))^2;
       d4 =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)+5*bw5(i,j+1)-3*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;
       d5 =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)-3*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)+5*bw5(i+1,j+1))^2;
       d6 =((-3)*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)+5*bw5(i+1,j)-3*bw5(i+1,j+1))^2;
       d7 =(5*bw5(i-1,j-1)-3*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)+5*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2;
       d8 =(5*bw5(i-1,j-1)+5*bw5(i-1,j)-3*bw5(i-1,j+1)+5*bw5(i,j-1)-3*bw5(i,j+1)-3*bw5(i+1,j-1)-3*bw5(i+1,j)-3*bw5(i+1,j+1))^2; 

       g(i,j)=round(sqrt(d1+d2+d3+d4+d5+d6+d7+d8)); %梯度模取整
    end
end
for i=1:m
  for j=1:n
  if g(i,j)>t
  bw5(i,j)=255;              %将梯度值与阈值比较 ,大于T则把图像的灰度变为255,小于T则把图像的灰度变为0
  else
  bw5(i,j)=0;
    end
  end
end
%显示边缘提取后的图象
figure(5)
imshow(bw5)
title('kirsch边缘检测')

clc
clear all close all
A = imread('lena.jpg');
mask1=[-3,-3,-3;-3,0,5;-3,5,5];  % 建立方向模板
mask2=[-3,-3,5;-3,0,5;-3,-3,5];
mask3=[-3,5,5;-3,0,5;-3,-3,-3];
mask4=[-3,-3,-3;-3,0,-3;5,5,5];
mask5=[5,5,5;-3,0,-3;-3,-3,-3];
mask6=[-3,-3,-3;5,0,-3;5,5,-3];
mask7=[5,-3,-3;5,0,-3;5,-3,-3];
mask8=[5,5,-3;5,0,-3;-3,-3,-3];
B=mat2gray(A);
subplot(121);imshow(B);title('原图');
I = im2double(A);  % 将数据图像转化为双精度
d1 = imfilter(I, mask1);  % 计算8个领域的灰度变化
d2 = imfilter(I, mask2);
d3 = imfilter(I, mask3);
d4 = imfilter(I, mask4);
d5 = imfilter(I, mask5);
d6 = imfilter(I, mask6);
d7 = imfilter(I, mask7);
d8 = imfilter(I, mask8);
dd = max(abs(d1),abs(d2));  % 取差值变化最大的元素组成灰度变化矩阵
dd = max(dd,abs(d3));
dd = max(dd,abs(d4));
dd = max(dd,abs(d5));
dd = max(dd,abs(d6));
dd = max(dd,abs(d7));
dd = max(dd,abs(d8));
%grad = mat2gray(dd);  % 将灰度变化矩阵转化为灰度图像
%level = graythresh(grad);  % 计算灰度阈值
BW = im2bw(grad,0.03);  % 用阈值分割梯度图像
subplot(122); imshow(BW);title('Kirsch算子的处理结果')  % 显示分割后的图像,即边缘图像 title('Kirsch')

时间: 2024-08-01 22:50:12

Kirsch边缘检测原理的相关文章

边缘检测原理

在2-D 图像中,沿一定方向上的边缘可以用该放下剖面上的4个参数来模型化. 位置:边缘(等效的)最大灰度变化处(边缘朝向就在该变化的方向上). 斜率:边缘在其朝向上的倾斜程度(由于采样等原因,实际图像中的边缘是倾斜的). 均值:分属边缘两边(近邻)像素的灰度均值(由于噪声等原因,灰度有波动). 幅度:边缘两边灰度均值之间的差(反映了不连续或者局部突变的程度). 其中:位置最重要,它给出了相邻两区域的边界点.边缘位置处的灰度的明显变化可借助计算灰度的导数/微分来检测. 一般常借助一阶和二阶导数来检

【数字图像处理】帧差法与Kirsch边缘检测实现运动目标识别与分割

本文链接:https://blog.csdn.net/qq_18234121/article/details/82763385 作者:冻人的蓝鲸梁思成 视频分割算法可以从时域和空域两个角度考虑.时域分割算法利用视频流时域连续性,通过 相邻帧的时域变化来检测运动目标.在摄像头静止的情况下,常用的方法有帧差法和减背景法. 帧差法比较直观实用,对光照的变化干扰不敏感,但是 对目标的检测不准确,对于缓慢运动的目标甚至可 能无法提取出目标边界,对于快速运动的目标提取 出的目标区域又过大.减背景法容易得到目

Atitit 边缘检测原理attilax总结

1. 边缘检测的概念1 1.1. 边缘检测的用途1 2. 边缘检测方法分类1 3. 边缘检测的基本方法2 3.1. Roberts边缘检测算子2 3.2. rewitt边缘检测算子2 3.3. sobel边缘检测算子(较为常用)2 4. Canny边缘检测(最常用)2 4.1. 参考资料4 1. 边缘检测的概念 边缘检测是图像处理与计算机视觉中极为重要的一种分析图像的方法,至少在我做图像分析与识别时,边缘是我最喜欢的图像特征.边缘检测的目的就是找到图像中亮度变化剧烈的像素点构成的集合,表现出来往

算法解剖系列(1)-Canny边缘检测原理

Canny边缘检测算子 基本原理 须满足条件:抑制噪声:精确定位边缘. 从数学上表达了三个准则[信噪比准则(低错误率).定位精度准则.单边缘响应准则],并寻找表达式的最佳解. 属于先平滑后求导的方法. 算法实现步骤 1.使用高斯滤波平滑图像 令f(x,y)表示数据(输入源数据),G(x,y)表示二维高斯函数(卷积操作数),fs(x,y)为卷积平滑后的图像. G(x,y)=12πσ2e?(x2+y2)2σ2 fs(x,y)=f(x,y)?G(x,y) Guess过程 用坐标点(x,y)表示一个3×

Canny边缘检测原理及C#程序实现

http://blog.csdn.net/yjz_uestc/article/details/6664937 Canny边缘检测是被公认的检测效果最好的边缘检测方法,是由John F. Canny于1986年提出,算法目标是找出一个最优的边缘检测的方法,所谓最优即:1.好的检测:算法能够尽可能的标识出图像的边缘:2.好的定位:标识出的边缘要尽可能的与实际边缘相接近:3.最小响应:图像中的边缘只能标识一次,并且不能把噪声标识成边缘.同时我们也要满足3个准则:信噪比准则.定位精度准则.单边缘响应准则

Laplacian边缘检测原理

<span style="font-size:18px;color:#ff0000;"> </span> 拉普拉斯高斯算子是一种二阶导数算子,将在边缘处产生一个陡峭的零交叉, Laplacian算子是各向同性的,能对任何走向的界线和线条进行锐化,无方向性.这是拉普拉斯算子区别于其他算法的最大优点. 对一个连续函数f(i,j),它在位置(i,j)的拉普拉斯算子定义如下: 在图像边缘检测中,为了运算方便,函数的拉普拉斯高斯算子也是借助模板来实现的.其模板有一个基本要

Canny边缘检测算法原理及其VC实现详解(一)

转自:http://blog.csdn.net/likezhaobin/article/details/6892176 图象的边缘是指图象局部区域亮度变化显著的部分,该区域的灰度剖面一般可以看作是一个阶跃,既从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值.图象的边缘部分集中了图象的大部分信息,图象边缘的确定与提取对于整个图象场景的识别与理解是非常重要的,同时也是图象分割所依赖的重要特征,边缘检测主要是图象的灰度变化的度量.检测和定位,自从1959提出边缘检测以来,经过五十多年

六 OpenCV图像处理4 Canny 边缘检测

1.Canny 边缘检测原理 步骤: ·1噪声去除: 由于边缘检测很容易受到噪声影响,所以第一步是使用 5x5 的高斯滤波器 去除噪声 ·2计算图像梯度: 对平滑后的图像使用 Sobel 算子计算水平方向和竖直方向的一阶导数(图 像梯度)(Gx 和 Gy) 根据得到的这两幅梯度图(Gx 和 Gy)找到边界的梯 度和方向 梯度的方向一般总是与边界垂直.梯度方向被归为四类:垂直,水平,和 两个对角线. ·3非极大值抑制 在获得梯度的方向和大小之后,应该对整幅图像做一个扫描,去除那些非 边界上的点.对

图像边缘检测--OpenCV之cvCanny函数

图像边缘检测--OpenCV之cvCanny函数 分类: C/C++ void cvCanny( const CvArr* image, CvArr* edges, double threshold1, double threshold2, int aperture_size=3 ); image单通道输入图像.edges单通道存储边缘的输出图像threshold1第一个阈值threshold2第二个阈值aperture_sizeSobel 算子内核大小 (见 cvSobel). 函数 cvCa