高斯平滑算法
❶ 高斯数学1十到100的公式
(1+100)×100÷2=5050。
高斯求和
德国着名数学家高斯幼年时代聪明过人,上学时,有一天老师出了一道题让同学们计算:1+2+3+4+…+99+100。
老师出完题后,全班同学都在埋头计算,小高斯却很快算出答案等于5050。原来小高斯通过细心观察发现:
1+100=2+99=3+98=…=49+52=50+51
1~100正好可以分成这样的50对数,每对数的和都相等。于是,小高斯把这道题巧算为:
(1+100)×100÷2=5050。
(1)高斯平滑算法扩展阅读:
高斯的故事:
高斯是一对普通夫妇的儿子。他的母亲是一个贫穷石匠的女儿,虽然十分聪明,但却没有接受过教育,近似于文盲。在她成为高斯父亲的第二个妻子之前,她从事女佣工作。他的父亲曾做过园丁,工头,商人的助手和一个小保险公司的评估师。当高斯三岁时便能够纠正他父亲的借债帐目的事情,已经成为一个轶事流传至今。他曾说,他能够在脑袋中进行复杂的计算。
小时候高斯家里很穷,且他父亲不认为学问有何用,但高斯依旧喜欢看书,话说在小时候,冬天吃完饭后他父亲就会要他上床睡觉,以节省燃油,但当他上床睡觉时,他会将芜菁的内部挖空,里面塞入棉布卷,当成灯来使用,以继续读书。
当高斯12岁时,已经开始怀疑元素几何学中的基础证明。当他16岁时,预测在欧氏几何之外必然会产生一门完全不同的几何学,即非欧几里德几何学。他导出了二项式定理的一般形式,将其成功的运用在无穷级数,并发展了数学分析的理论。
等差数列公式
等差数列公式an=a1+(n-1)d
前n项和公式为:Sn=na1+n(n-1)d/2
若公差d=1时:Sn=(a1+an)n/2
若m+n=p+q则:存在am+an=ap+aq
若m+n=2p则:am+an=2ap
以上n均为正整数。和Sn,首相a1,末项an,公差d,项数n。
❷ 什么是高斯算法
高斯小时候非常淘气,一次老师去开会他和同学们闹腾。老师回来后大发雷霆,命令他们全班所有人都开始算1+2+3+4+5+6+……+100的得数。全班只有高斯想出来的(1+100)+(2+99)+(3+98)……+(50+51)…………一共有50个101,所以50·101就是1加到一百的得数。后来人们把这种简便算法称作高斯算法。
就是:(首项+末项)*项数/2
❸ canny算法的算法的实现步骤
Canny边缘检测算法可以分为以下5个步骤: 应用高斯滤波来平滑图像,目的是去除噪声 找寻图像的强度梯度(intensity gradients) 应用非最大抑制(non-maximum suppression)技术来消除边误检(本来不是但检测出来是) 应用双阈值的方法来决定可能的(潜在的)边界 利用滞后技术来跟踪边界 1. 图像平滑(去噪声)
任何边缘检测算法都不可能在未经处理的原始数据上很好地工作,所以第一步是对原始数据与高斯 mask 作卷积,得到的图像与原始图像相比有些轻微的模糊(blurred)。这样,单独的一个像素噪声在经过高斯平滑的图像上变得几乎没有影响。以下为一个5X5高斯滤波器(高斯核,标准差delta=1.4),其中A为原始图像,B为平滑后的图像。
2. 寻找图像中的强度梯度
Canny算法的基本思想是找寻一幅图相中灰度强度变化最强的位置。所谓变化最强,即指梯度方向。平滑后的图像中每个像素点的梯度可以由Sobel算子(一种卷积运算)来获得(opencv中有封装好的函数,可以求图像中每个像素点的n阶导数)。首先,利用如下的核来分别求得沿水平(x)和垂直(y)方向的梯度G_X和G_Y。
K_{GX} = [-1 0 1 ; -2 0 2 ; -1 0 1], K_{GY} = {1 2 1 ; 0 0 0 ; -1 -2 -1}
之后便可利用公式来求得每一个像素点的梯度度量值(gradient magnitude,可能翻译得不准确)。
,有时为了计算简便,也会使用G_X和G_Y的无穷大范数来代替二范数。把平滑后的图像中的每一个点用G代替,可以获得如下图像。从下图可以看出,在变化剧烈的地方(边界处),将获得较大的梯度度量值G,对应的颜色为白色。然而,这些边界通常非常粗,难以标定边界的真正位置。为了做到这一点(参考非极大抑制Non-maximum suppression一节),还必须存储梯度方向,其公式如下图所示。也就是说在这一步我们会存数两块数据,一是梯度的强度信息,另一个是梯度的方向信息。
3. 非极大抑制Non-maximum suppression
这一步的目的是将模糊(blurred)的边界变得清晰(sharp)。通俗的讲,就是保留了每个像素点上梯度强度的极大值,而删掉其他的值。对于每个像素点,进行如下操作:
a) 将其梯度方向近似为以下值中的一个(0,45,90,135,180,225,270,315)(即上下左右和45度方向)
b) 比较该像素点,和其梯度方向正负方向的像素点的梯度强度
c) 如果该像素点梯度强度最大则保留,否则抑制(删除,即置为0)
为了更好的解释这个概念,看下图。
图中的数字代表了像素点的梯度强度,箭头方向代表了梯度方向。以第二排第三个像素点为例,由于梯度方向向上,则将这一点的强度(7)与其上下两个像素点的强度(5和4)比较,由于这一点强度最大,则保留。处理后效果如下图所示。
上图中,可以想象,边界处的梯度方向总是指向垂直于边界的方向,即最后会保留一条边界处最亮的一条细线。
4.双阈值(Double Thresholding)
经过非极大抑制后图像中仍然有很多噪声点。Canny算法中应用了一种叫双阈值的技术。即设定一个阈值上界和阈值下界(opencv中通常由人为指定的),图像中的像素点如果大于阈值上界则认为必然是边界(称为强边界,strong edge),小于阈值下界则认为必然不是边界,两者之间的则认为是候选项(称为弱边界,weak edge),需进行进一步处理。经过双阈值处理的图像如下图所示
上图中右侧强边界用白色表示,弱边界用灰色表示。
5.利用滞后的边界跟踪
这里就不细作解释了。大体思想是,和强边界相连的弱边界认为是边界,其他的弱边界则被抑制。
以上内容均翻译自参考文献【4】
上一个网络版本:
图像中的边缘可能会指向不同的方向,所以 Canny 算法使用 4 个 掩模(mask) 检测水平、垂直以及对角线方向的边缘。原始图像与每个 mask 所作的卷积都存储起来。对于每个点我们都标识在这个点上的最大值以及生成的边缘的方向。这样我们就从原始图像生成了图像中每个点亮度梯度图以及亮度梯度的方向。以下两个公式分别求取高斯滤波后图像的梯度幅值及其方向的表达式。这一步,也叫称为非极大抑制(Non-maximum suppression)。
3. 在图像中跟踪边缘
较高的亮度梯度比较有可能是边缘,但是没有一个确切的值来限定多大的亮度梯度是边缘多大又不是,所以 Canny 使用了滞后阈值。
滞后阈值(Hysteresis thresholding) 需要两个阈值,即高阈值与低阈值。假设图像中的重要边缘都是连续的曲线,这样我们就可以跟踪给定曲线中模糊的部分,并且避免将没有组成曲线 的噪声像素当成边缘。所以我们从一个较大的阈值开始,这将标识出我们比较确信的真实边缘,使用前面导出的方向信息,我们从这些真正的边缘开始在图像中跟踪 整个的边缘。在跟踪的时候,我们使用一个较小的阈值,这样就可以跟踪曲线的模糊部分直到我们回到起点。
一旦这个过程完成,我们就得到了一个二值图像,每点表示是否是一个边缘点。
一个获得亚像素精度边缘的改进实现是在梯度方向检测二阶方向导数的过零点,它在梯度方向的三阶方向导数满足符号条件。
滞后阈值也可以用于亚像素边缘检测。
❹ 高斯滤波的算法原理
高斯滤波实质上是一种信号的滤波器,其用途是信号的平滑处理,人们知道数字图像用于后期应用,其噪声是最大的问题,由于误差会累计传递等原因,很多图像处理教材会在很早的时候介绍Gauss滤波器,用于得到信噪比SNR较高的图像(反应真实信号)。与此相关的有Gauss-Laplace变换,其实就是为了得到较好的图像边缘,先对图像做Gauss平滑滤波,剔除噪声,然后求二阶导矢,用二阶导的过零点确定边缘,在计算时也是频域乘积=>空域卷积。
滤波器就是建立的一个数学模型,通过这个模型来将图像数据进行能量转化,能量低的就排除掉,噪声就是属于低能量部分。
若使用理想滤波器,会在图像中产生振铃现象。采用高斯滤波器的话,系统函数是平滑的,避免了振铃现象。
❺ Matlab边缘检测问题
用mesh语句似乎可以,具体也不了解你的情况,感觉怪怪的,发一段我以前些的程序,用罗伯特算子写的,把算子一改就是sobel了。两种边缘检测近似算法奉上:
clc
close all
clear all
%%%生成高斯平滑滤波模板%%%
%%%%%%%%%%%%%%%%%%%%%%%%%
hg=zeros(3,3); %设定高斯平滑滤波模板的大小为3*3
delta=0.5;
for x=1:1:3
for y=1:1:3
u=x-2;
v=y-2;
hg(x,y)=exp(-(u^2+v^2)/(2*pi*delta^2));
end
end
h=hg/sum(hg(:));
%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%读入图像%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%
f = imread('1111.tif'); % 读入图像文件
f=rgb2gray(im2double(f));
imshow(f)
title('原始图像');
[m,n]=size(f);
ftemp=zeros(m,n);
rowhigh=m-1;
colhigh=n-1;
%%%高斯滤波%%%
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];
A=h.*mod;
ftemp(x,y)=sum(A(:));
end
end
f=ftemp
figure,imshow(f)
title('通过高斯滤波器后的图像');
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%利用roberts算子进行边缘检测%%%
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sx=[-1 -2 -1;0 0 0;1 2 1];
sy=[-1 0 1;-2 0 2;-1 0 1];
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];
fsx=sx.*mod;
fsy=sy.*mod;
ftemp(x,y)=sqrt((sum(fsx(:)))^2+(sum(fsy(:)))^2);
end
end
fr=im2uint8(ftemp);
figure,imshow(fr)
title('用roberts算子边缘检测的原始图像');
%%%域值分割%%%
TH1=60; %设定阈值
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
if (fr(x,y)>=TH1)&((fr(x,y-1) <= fr(x,y)) & (fr(x,y) > fr(x,y+1)) )
fr(x,y)=200;
elseif(fr(x,y)>=TH1)&( (fr(x-1,y) <=fr(x,y)) & (fr(x,y) >fr(x+1,y)))
fr(x,y)=200;
else fr(x,y)=50;
end
end
end
figure,imshow(fr)
title('用roberts算子边缘检测并细化后的图像');
%%%%%%%%%%%%%%%%%%%%%%%%%%
利用第一种近似算法进行边缘检测%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%3*3的sobel算子%%%%%%%%
sx=[-1 -2 -1;0 0 0;1 2 1];
sy=[-1 0 1;-2 0 2;-1 0 1];
%sx=[0 1 2;-1 0 1;-2 -1 0];
%sy=[-2 -1 0;-1 0 1;0 1 2];
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];
fsx=sx.*mod;
fsy=sy.*mod;
ftemp(x,y)=abs(sum(fsx(:)))+abs(sum(fsy(:)));
end
end
fs=im2uint8(ftemp);
figure,imshow(fs)
title('用第一种近似算法进行边缘检测的原始图像');
%%%域值分割%%%
TH2=200; %设定阈值
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
if (fs(x,y)>=TH2)&((fs(x,y-1) <= fs(x,y)) & (fs(x,y) > fs(x,y+1)) )
fs(x,y)=200;
elseif(fs(x,y)>=TH2)&( (fs(x-1,y) <=fs(x,y)) & (fs(x,y) >fs(x+1,y)))
fs(x,y)=200;
else fs(x,y)=50;
end
end
end
figure,imshow(fs)
title('采用第一种近似算法进行边缘检测后的图像');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%利用第二种近似算法进行边缘检测%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%3*3的sobel算子%%%%%%%%
sx=[-1 -2 -1;0 0 0;1 2 1];
sy=[-1 0 1;-2 0 2;-1 0 1];
%sx=[0 1 2;-1 0 1;-2 -1 0];
%sy=[-2 -1 0;-1 0 1;0 1 2];
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
mod=[f(x-1,y-1) f(x-1,y) f(x-1,y+1); f(x,y-1) f(x,y) f(x,y+1);f(x+1,y-1) f(x+1,y) f(x+1,y+1)];
fsx=sx.*mod;
fsy=sy.*mod;
ftemp(x,y)=max(abs(sum(fsx(:))),abs(sum(fsy(:))));
end
end
fs=im2uint8(ftemp);
figure,imshow(fs)
title('用第二种近似算法进行边缘检测的原始图像');
%%%域值分割%%%
TH2=200; %设定阈值
for x=2:1:rowhigh-1
for y=2:1:colhigh-1
if (fs(x,y)>=TH2)&((fs(x,y-1) <= fs(x,y)) & (fs(x,y) > fs(x,y+1)) )
fs(x,y)=200;
elseif(fs(x,y)>=TH2)&( (fs(x-1,y) <=fs(x,y)) & (fs(x,y) >fs(x+1,y)))
fs(x,y)=200;
else fs(x,y)=50;
end
end
end
figure,imshow(fs)
title('采用第二种近似算法进行边缘检测后的图像');