边缘检测 - Scharr 滤波器 一. Scharr 滤波器简介我们一般称 Scharr 为滤波器,而不是算子,它在OpenCV中主要是配合Sobel算子的运算而存在。当Sobel算子的内核大小为 3 时,可能产生比较明显的误差(Sobel算子只是球去了导数的近似值而已)。未解决这一问题,OpenCV提供了Scharr函数,但函数仅作用于大小为 3 的内核。该函数的运算与Sobel函数一样快,但结果却更加精确。二. Scha...
边缘检测 - Laplacian算子 一. Laplacian算子简介Laplacian算子是 n 维欧几里德空间中的一个二阶微分算子。二阶导数可以用来进行检测边缘。因为图像是“二维”,需要在两个方向进行求导。使用Laplacian算子将会使求导过程变得简单。Laplacian算子的定义为:需要说明的是,由于Laplacian算子使用了图像梯度,它内部的代码其实是调用了Sobel算子。二. Laplacian() 函数介绍...
边缘检测 - Sobel算子 一. Sobel算子简介Sobel算子是一个主要用于边缘检测的离散微分算子(discrete differentiation operator)。它结合了高斯平滑和微分求导,用来计算图像灰度函数的近似梯度。二. Sobel算子的计算过程分别在 x 和 y 两个方向求导。① 水平变化:将图像与一个奇数大小的内核Gx进行卷积。② 垂直变化:将图像与一个奇数大小的内核Gy进行卷积。在图...
边缘检测 - Canny算子 一. Canny 算法简介Canny边缘检测算子是 John F.Canny 于 1986 年开发出来的一个多级边缘检测算法。更为重要的是,Canny 创立了边缘检测计算理论(Computational theory ofedge detection),解释了这项技术是如何工作的。Canny边缘检测算法以Canny的名字命名,被很多人推崇为当今最优的边缘检测的算法。二. Canny 边缘检测的...
边缘检测 简介 边缘检测的一般步骤:【第一步】滤波边缘检测的算法主要是基于图像强度的一阶导数和二阶导数,但导数通常对噪声很敏感,因此必须采用滤波器来改善与噪声有关的边缘检测器的性能。常见的滤波有高斯滤波。【第二步】增强确定图像各点领域强度的变化值,增强算法可以将图像灰度点领域强度值有显著变化的点凸显出来,在编程的时候,可以通过计算梯度幅值来确定。【第三步】检测经过增强的图像,往往邻域中有很...
点多边形测试 点多边形测试测试一个点是否在给定的多边形内部、边缘或外部。API介绍double pointPolygonTest (InputArray contour, // 输入的轮廓Point2f pt, // 测试点bool measureDist)第三个参数 measureDist:当 measureDist 设置为 true 时,返回实际距离值。若返回值为正,表示点在多边形内...
使用多边形将轮廓包围 API介绍返回外部矩形边界:boundingRect() 函数此函数计算并返回指定点集最外面的矩形边界。Rect boundingRect( InputArray points )其唯一的一个参数为输入的二维点集,可以试 vector 或 Mat 类型。寻找最小包围矩形:minAreaRect() 函数此函数用于对给定的 2D 点集,寻找可旋转的最小面积的包围矩形。Rotat...
凸包 (Convex Hull) 凸包的定义在一个多边形边缘或内部,任意两个点的连线都包含在多变形边界或者内部。正式定义:包含点集合 S 中所有点的最小凸多边形称为凸包。凸包是一个计算几何中常见的概念。给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边形,它是能包含点集中所有点的。理解图形形状或轮廓的一种比较有用的方法便是计算一个物体的凸包,然后计算其图缺陷(convexity defects),。很多复杂物...
轮廓发现 轮廓发现轮廓发现是基于图像边缘提取的寻找对象轮廓的方法。由于基于边缘提取,所以边缘提取的阈值选定会影响最终轮廓发现的结果。API介绍findContours() 发现轮廓void findContours(InputOutputArray image,OutputArrayOfArrays contours,OutputArray hierarchy,int mod...
模板匹配 参考资料:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/histograms/template_matching/template_matching.html?highlight=%E6%A8%A1%E6%9D%BF%E5%8C%B9%E9%85%8D模板匹配介绍模板匹配是一项在一幅图像中寻找与另一幅模...
直方图绘制(折线图) 基本概念对于图像梯度、像素值、像素角度等一切图像的属性值,都可以通过统计建立直方图。基于图像像素灰度直方图比较常见。直方图常见属性:dims 表示维度,对灰度图像来说只有一个通道值,dims=1;bins 表示在维度中子区域大小划分,划分256个级别则 bins=256;range 表示值得范围,灰度值范围为 [0~255] 之间;API说明把多通道图像分为多个单通道图像...
直方图均衡化(Histogram) 图像的直方图直方图是图像中像素强度分布的图形表达方式。它统计了每一个强度值所具有的像素个数。直方图均衡化直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法。说得更清楚一些, 以上面的直方图为例, 你可以看到像素主要集中在中间的一些强度值上. 直方图均衡化要做的就是 拉伸 这个范围. 见下面左图: 绿圈圈出了 少有像素分布其上的 强度值. 对其应用均衡化后, 得到了中...
像素重映射 原理把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。简单来说,就是把一个图像中一个位置的像素放置到另一个图片指定位置的过程。假设我们有一个图像 I , 我们想满足下面的条件作重映射:h(x,y) = (I.cols - x, y )图像会按照 x 轴方向发生水平翻转: API介绍:remapremap(InputArray src, ...
(卷积)边缘像素处理 卷积边界问题:图像进行卷积操作时,图像的边界像素并不能被卷积操作到,原因在于边界像素没有完全跟 kernel 重叠,例如当33滤波时有1个像素的边缘没有被处理,55滤波时有2个像素的边缘没有被处理。边缘问题解决方法:在卷积操作开始之前,先增加边缘像素,比如3*3滤波时,在图像四周各填充1个像素的边缘,这样就确保图像的边缘能被处理,在卷积处理之后再去掉这些边缘。常用方法有:BORDE...
自定义线性滤波 卷积简介卷积是图像处理中的一个操作,是 kernel 在图像的每个像素上的操作(kernel 本质上是一个固定大小的矩阵数组,其中心点称为锚点)把 kernel 放到像素数组之上,求锚点周围覆盖的像素乘积之和(包括锚点),用来替换锚点覆盖下像素点值,该过程称为卷积处理常用算子Robert 算子(Robert X 算子 和 Robert Y 算子) Sobel 算子(Sobel ...
图像阈值(threshold) 阈值是什么?最简单的图像分割的方法。应用举例:从一副图像中利用阈值分割出我们需要的物体部分(当然这里的物体可以是一部分或者整体)。这样的图像分割方法是基于图像中物体与背景之间的灰度差异,而且此分割属于像素级的分割。为了从一副图像中提取出我们需要的部分,应该用图像中的每一个像素点的灰度值与选取的阈值进行比较,并作出相应的判断。(注意:阈值的选取依赖于具体的问题。即:物体在不同的图像中有可能会...
图像金字塔 一、概念图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低,且来源于同一张原始图的图像集合。其通过梯次向下采样获得,直到达到某个终止条件才停止采样。我们将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。- 在图像处理中常常会调整图像大小,最常见的就是放大(zoom in)和缩小(zoom out)。这里的向下与向上采样,是对图像的尺寸而言的(和金字塔的方向相反),向上...
提取水平与垂直线 原理与方法:图像形态学操作的时候,可以自定义结构元素,通过该结构元素,可以使输入图像敏感的部分改变而不敏感的部分保留输出。通过使用两个最基本的形态学操作 -腐蚀和膨胀,使用不同的结构元素实现对输入图像的操作,最终得到想要的结果。提取步骤:输入色彩图像 -imread转换为灰度图像 -cvtColor转换为二值图像 -adaptiveThreshold定义结构元素开操作(腐蚀+膨胀...
形态学操作(开操作,闭操作,形态学梯度,顶帽,黑帽) 一、开操作 Open算法说明:对图像进行 先腐蚀后膨胀 的操作dst = open(src, element) = dilate(erode(dst, element))应用:假设图片对象前景色为白色,背景色为黑色,通过开操作,可以去掉小范围的对象元素。同样,也可以用于有效的消除亮点(白点)噪音。效果示例:二、闭操作 Close算法说明:对图像进行 先膨胀后腐蚀 的操...