检测爆炸物啊。
安检人员把纸条在旅客的行李箱包拉锁或者箱子边沿等部位来回蹭几下后,拿到旁边专用的仪器上检测一下,就能知道包里是否有爆炸物
边缘检测
Canny边缘检测Canny边缘检测是一种使用多种边缘检测算法检测边缘的方法。由John FCanny于1986年提出,并在论文中有详尽的描述。
1)去噪。噪声会影响边缘检测的准确度。通常采用高斯滤波去除图像中的噪声。滤波器的核越大,边缘信息对噪声的敏感度就越低。不过,核越大,边缘检测的 *** 错误也会随之增加。通常一个5 X 5的核能满足大多数情况。
2)计算梯度的幅度与方向。梯度的方向与边缘的方向是垂直的,通常就取近似值为·水平、垂直、对角线等八个不同的方向。
3)非极大值抑制,即适当地让边缘变瘦。在获得了梯度的幅度和方向后,遍历图像中的像素点,去除所有非边缘的点。具体实现上,判断当前像素点是否是周围像素点中具有相同梯度方向的最大值,如果是,则保留该点;如果不是则抑制(归零)。
4)确定边缘。用双阈值算法确定最终的边缘信息。完成之前三步骤后,图像的强边缘已经在当前获取的边缘图像内。但一些虚边缘可能也在边缘图像内,这些虚边缘可能是真实的图像产生的,也可能是由于噪声产生的(必须将其剔除)。
设置两个阈值,其中一个为高阈值maxVal,另一个为低阈值minVal。根据当前边缘像素的梯度值与这两个阈值之间的关系,判断边缘的属性。如果当前边缘像素的梯度值不小于maxVal,则将当前边缘像素标记为强边缘;如果介于maxVal与minVal之间,则标记为弱边缘(先保留);如果小于minVal,则抑制当前边缘像素。之后再判断虚边缘是否与强边缘有连接,有连接,则处理为边缘;无连接则抑制。
OpenCV提供了cv2Canny()来实现边缘检测:
dst : 为计算得到的边缘图像
image: 为8位输入图像
threshold1: 表示处理过程中的的第一个阈值
threshold2: 表示处理过程中的的第二个阈值
apertureSize: 表示Sobel算子的孔径大小。
L2gradient: 为计算图像梯度幅度的标识。其默认值是False。如果为True,则使用更精确的L2范数进行计算,否则使用L1范数。
例如:
图像卷积与边缘检测边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。
先灰度化,再用低通滤波器降噪,用高通滤波器提取边缘,最后二值化。
低通滤波器见前面我发布的图像预处理,下面讲的都是高通滤波器。
为了提取到图像的边缘,我们需要滤波器的帮助。这类滤波器以矩阵的形式存在,通常被称为卷积核,就是一些值网格,能够对图像进行修改。
对于图像的每一个像素点,计算它的邻域像素和滤波器矩阵的对应元素的乘积,然后加起来,作为该像素位置的值。这样就完成了滤波过程。这种计算被称为图像卷积。
滤波器的大小应该是奇数,这样它才有一个中心,例如3×3,5×5或者7×7。有中心了,也有了半径的称呼,例如5×5大小的核的半径就是2。
索贝尔过滤器常用于边缘检测和发现图像中的强度模式。向图像中应用索贝尔过滤器就相当于沿着 x 或 y 方向求图像的(近似)导数。
Sobel_x和 Sobel_y的运算符分别如下所示:
Laplace算子是一种各向同性算子,二阶微分算子,在只关心边缘的位置而不考虑其周围的像素灰度差值时比较合适。
Laplace算子对孤立象素的响应要比对边缘或线的响应要更强烈,因此只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。
了解更多
Canny边缘检测是一种非常流行的边缘检测算法,是John Canny在1986年提出的。它是一个多阶段的算法,即由多个步骤构成。
首先,图像降噪。我们知道梯度算子可以用于增强图像,本质上是通过增强边缘轮廓来实现的,也就是说是可以检测到边缘的。但是,它们受噪声的影响都很大。那么,我们第一步就是想到要先去除噪声,因为噪声就是灰度变化很大的地方,所以容易被识别为伪边缘。
第二步,计算图像梯度,得到可能边缘。计算图像梯度能够得到图像的边缘,因为梯度是灰度变化明显的地方,而边缘也是灰度变化明显的地方。当然这一步只能得到可能的边缘。因为灰度变化的地方可能是边缘,也可能不是边缘。这一步就有了所有可能是边缘的集合。
第三步,非极大值抑制。通常灰度变化的地方都比较集中,将局部范围内的梯度方向上,灰度变化最大的保留下来,其它的不保留,这样可以剔除掉一大部分的点。将有多个像素宽的边缘变成一个单像素宽的边缘。即胖边缘变成瘦边缘。
第四步,双阈值筛选。通过非极大值抑制后,仍然有很多的可能边缘点,进一步的设置一个双阈值,即低阈值(low),高阈值(high)。灰度变化大于high的,设置为强边缘像素,低于low的,剔除。在low和high之间的设置为弱边缘。进一步判断,如果其领域内有强边缘像素,保留,如果没有,剔除。这样做的目的是只保留强边缘轮廓的话,有些边缘可能不闭合,需要从满足low和high之间的点进行补充,使得边缘尽可能的闭合。
边缘检测1 关于边缘模式的算法
边缘指的是图像内出现的明部和暗部的边界。边缘检测则是通过图像处理检测出该浓度变化的边界。可通过以下
4 个流程检测边缘。
2 关于边缘模式的参数设置
想从倾斜边缘或多个候补中检测出任意边缘时,光靠初始值可能无法顺利进行。
此时调整设置参数,就可以稳定检测。
接下来解说常用的 2 个参数。
3 使边缘检测更加稳定的预处理滤波器
在测量区域内向指定方向扫描进行边缘检测的区段,然后测量各个区段的边缘位置。在 1个 测量区域中可测量多个边缘位置信息,因此除了整体平均、最大、最小之外,还可以检测出以个别测量结果和全部测量结果为点群的圆形和直线。
4 使边缘检测更加稳定的预处理滤波器
边缘检测中,如何抑制边缘偏差成为关键所在。作为使边缘检测稳定的高效滤波器,中值和平均化最为人们所熟知。接下来对这些预处理滤波器的特征和高效选定方法进行说明。
首先明白所谓零交叉的概念。
在求图像边缘的时候如果计算一阶导数的边缘检测器如:(a) Roberts交叉算子(b)Sobel算子(c) Prewitt算子,会导致检测的边缘点太多;一种更好的方法就是求梯度局部最大值对应的点,并认定它们是边缘点,如下图所示,若用阈值来进行边缘检测,则在a和b之间的所有点都被记为边缘点,这就是为什么计算一阶导数的边缘检测器会导致检测的边缘点太多.但通过去除一阶导数中的非局部最大值,可以检测出更精确的边缘.一阶导数的局部最大值对应着二阶导数的 零交点 这意味着在边缘点处有一阶导数的峰值,同样地,有二阶导数的零交叉点.这样,通过找图像强度的二阶导数的零交叉点就能找到边缘点。在二维空间,对应二阶导数有两种算子:拉普拉斯算子和二阶方向导数。
以一维函数f(x)(阶跃边缘) 与f'(x)及f”(x)的对应关系来理解这个概念。
2在零交叉点概念的基础上明白Canny 边缘检测器处理的图像的步骤:
step1用高斯滤波器平滑图像.
step2用一阶偏导的有限差分来计算梯度的幅值和方向.
step3对梯度幅值应用非极大值抑制.
step4用双阈值算法检测和连接边缘.
3Canny算子 *** 别之处在步骤3和步骤4中体现;
首先,步骤三中不是仅仅把图像快速变化的问题转化成求幅值阵列的局部最大值问题.为确定边缘,增加了细化幅值图像中的屋脊带,即根据3*3领域中心点的扇区值决定的梯度方向,用领域中心点幅值与梯度方向上相邻的2个元素进行比较,只保留幅值局部变化最大的点.这一过程叫非极大值抑制(Non-Maxima Suppression,NMS ),它会生成细化的边缘.
另外,步骤4中用了双阈值技术,双阈值算法对非极大值抑制图像作用双阈值t1和t2,且t2约为t1的两倍,得到两个阈值边缘图像T1[i,j]和T2[i,j].由于图像T2[i,j]是用高阈值得到的,因此它含有很少的假边缘,但T2[i,j]可能在轮廓上有间断(太多的假错误).双阈值法要在T2[i,j]中把边缘连接成轮廊,当到达轮廊的端点时,该算法就在T1[i,j]的8-邻点位置寻找可以连接到轮廊上的边缘,这样,算法将不断地在T1[i,j]中收集边缘,直到将T2[i,j]中所有的间隙连接起来为止.这一算法是阈值化的副产物,并解决了阈值选择的一些问题.
边缘检测与轮廓有什么区别1、边缘检测是图像处理和计算机视觉中的基本问题,边缘检测的目的是标识数字图像中亮度变化明显的点。图像属性中的显著变化通常反映了属性的重要事件和变化。 这些包括(i)深度上的不连续、(ii)表面方向不连续、(iii)物质属性变化和(iv)场景照明变化。 边缘检测是图像处理和计算机视觉中,尤其是特征提取中的一个研究领域。
2、轮廓提取是提取出想要得到的轮廓 轮廓可能是边缘的一部分。
边缘检测是什么意思两个具有不同灰度值的相邻区域之间总存在边缘,边缘是灰度值不连续的表现。由于边缘是图像上灰度变化最剧烈的地方,传统的边缘检测就是利用了这个特点,对图像各个像素点进行微分或求二阶微分来确定边缘像素点。
以下是一段函数是关于边缘检测的一些算法,希望对你有帮助。。
I=imread(‘D:\10jpg’); %读取图像
I1=im2double(I); %将彩图序列变成双精度
I2=rgb2gray(I1); %将彩色图变成灰色图
[thr, sorh, keep *** ]=ddencmp(‘den’,’wv’,I2);
I3=wdencmp(‘gbl’,I2,’sym4′,2,thr,sorh,keep *** ); %小波除噪
I4=medfilt2(I3,[9 9]); %中值滤波
I5=imresize(I4,08,’bicubic’); %图像大小
BW1=edge(I5,’sobel’); %sobel 图像边缘提取
BW2=edge(I5,’roberts’); %roberts 图像边缘提取
BW3=edge(I5,’prewitt’); %prewitt 图像边缘提取
BW4=edge(I5,’log’); %log 图像边缘提取
BW5=edge(I5,’canny’); %canny 图像边缘提取
h=fspecial(‘gaussian’,5); %高斯滤波
BW6=edge(I5,’zerocross’,[ ],h); %zerocross 图像边缘提取
figure;
subplot(1,3,1); %图划分为一行三幅图,第一幅图
imshow(I2); %绘图
title(‘ 原始图像’); %标注
subplot(1,3,2); %第二幅图
imshow(I3);
title(‘ 消噪后图像’);
subplot(1,3,3); %第三幅图
imshow(I4);
title(‘ 中值滤波图像’);
figure;
subplot(1,3,1);
imshow(BW1);
title(‘Sobel 算子’);
subplot(1,3,2);
imshow(BW2);
title(‘Roberts 算子’);
subplot(1,3,3);
imshow(BW3);
title(‘Prewitt 算子’);
figure;
subplot(1,3,1);
imshow(BW4);
title(‘log 算子’);
subplot(1,3,2);
imshow(BW5);
title(‘Canny 算子’);
subplot(1,3,3);
imshow(BW6);
title(‘Zerocross’);
边缘检测的检测边缘如果将边缘认为是一定数量点亮度发生变化的地方,那么边缘检测大体上就是计算这个亮度变化的导数。为简化起见,我们可以先在一维空间分析边缘检测。在这个例子中,我们的数据是一行不同点亮度的数据。例如,在下面的1维数据中我们可以直观地说在第4与第5个点之间有一个边界:
除非场景中的物体非常简单并且照明条件得到了很好的控制,否则确定一个用来判断两个相邻点之间有多大的亮度变化才算是有边界的阈值,并不是一件容易的事。实际上,这也是为什么边缘检测不是一个微不足道问题的原因之一。
检测方法
有许多用于边缘检测的方法, 他们大致可分为两类:基于搜索和基于零交叉。
基于搜索的边缘检测方法首先计算边缘强度, 通常用一阶导数表示, 例如梯度模,然后,用计算估计边缘的局部方向, 通常采用梯度的方向,并利用此方向找到局部梯度模的最大值。
基于零交叉的方法找到由图像得到的二阶导数的零交叉点来 *** 边缘。 通常用拉普拉斯算子或非线性微分方程的零交叉点。
滤波做为边缘检测的预处理通常是必要的,通常采用高斯滤波。
已发表的边缘检测方法应用计算边界强度的度量,这与平滑滤波有本质的不同。 正如许多边缘检测方法依赖于图像梯度的计算,他们用不同种类的滤波器来估计x-方向和y-方向的梯度。
计算一阶导数
许多边缘检测操作都是基于亮度的一阶导数——这样就得到了原始数据亮度的梯度。使用这个信息我们能够在图像的亮度梯度中搜寻峰值。如果 I(x) 表示点 x 的亮度,I′(x) 表示点 x 的一阶导数(亮度梯度),这样我们就会发现:
对于更高性能的图像处理来说,一阶导数能够通过带有掩码的原始数据(1维)卷积计算得到。
计算二阶导数
其它一些边缘检测操作是基于亮度的二阶导数。这实质上是亮度梯度的变化率。在理想的连续变化情况下,在二阶导数中检测过零点将得到梯度中的局部最大值。另一方面,二阶导数中的峰值检测是边线检测,只要图像操作使用一个合适的尺度表示。如上所述,边线是双重边缘,这样我们就可以在边线的一边看到一个亮度梯度,而在另一边看到相反的梯度。这样如果图像中有边线出现的话我们就能在亮度梯度上看到非常大的变化。为了找到这些边线,我们可以在图像亮度的二阶导数中寻找过零点。如果 I(x) 表示点 x 的亮度,I′′(x) 表示点 x 亮度的二阶导数,那么:
同样许多算法也使用卷积掩码快速处理图像数据:
步骤:
①滤波:边缘检测算法主要是基于图像强度的一阶和二阶导数,但导数的计算对噪声很敏感,因此必须使用滤波器来改善与噪声有关的边缘检测器的性能。需要指出,大多数滤波器在降低噪声的同时也导致了边缘强度的损失,因此,增强边缘和降低噪声之间需要折中。
②增强:增强边缘的基础是确定图像各点邻域强度的变化值。增强算法可以将邻域(或局部)强度值有显著变化的点突显出来。边缘增强一般是通过计算梯度幅值来完成的。
③检测:在图像中有许多点的梯度幅值比较大,而这些点在特定的应用领域中并不都是边缘,所以应该用某种方法来确定哪些点是边缘点。最简单的边缘检测判据是梯度幅值阈值判据。