听风吹等浪起
佛系学习,适当摆烂…
展开
-
基于数字图像处理方法的迷宫问题图解 : 基于骨架提取、四邻域
问题是,这条红色的线是人为标记出来的能通的路线,对计算机来看,黑色和红色的线没有任何差异,所以之前的想法压根不起作用。对应于数字图像的表达,就是从远离主干的分支端点出发,如果4邻域中只有一个可以通的道路,那么这个点在分支上。闪电划过,有一道连接了天空和大地,就是迷宫的解,其余的分支就是迷宫中对应的死路。类似这个闪电图,假设图中最粗的主干(迷宫解的路线)是最先形成的,其余的细小的分支是慢慢从主干上形成的。因此,只要在端点的4邻域中,找到可以走的道路,那么一定就是分支,也就是要移除的路线。原创 2023-02-19 13:10:14 · 1261 阅读 · 2 评论 -
图像运算 - 图像像素点的加减异或操作
图像是由像素组成的,而像素是由灰度值表现,灰度值由具体的正整数表现(0代表黑色,255代表白色)。因此,对于正整数可以进行一系列的数学运算,加减乘除等等,通过这些运算可以达到截取,合并图像等效果。原创 2024-03-12 13:52:40 · 149 阅读 · 0 评论 -
几何变换 - 图像的缩放、翻转、仿射变换、透视等
图像的几何变换是指改变图像的几何结构,大小、形状等等,让图像呈现出具备缩放、翻转、映射和透视的效果图像的几何变换都比较复杂,计算也很复杂。例如仿射变换,像素点的位置和灰度值都需要变换。数字图像处理中利用后向传播的方法,将像素点变换后的位置通过逆运算映射回原图的位置,然后取该位置的像素点。这是为了防止两个像素点映射到同一位置,而不知道如何定义该点像素灰度值的问题几何变换灰度变换。原创 2024-03-11 11:18:03 · 364 阅读 · 0 评论 -
图像检测 - 模板匹配 - 多模板匹配图像检测
OpenCV 中多模板匹配教程原创 2024-03-06 13:31:16 · 119 阅读 · 0 评论 -
图像检测 - 模板匹配 - 单模板匹配图像检测
匹配过程中只用到一个模板场景叫单模板匹配。原创 2024-03-04 14:30:16 · 192 阅读 · 0 评论 -
图像检测 - 模板匹配方法(算法详解)
数字图像处理中的模板匹配方法详解原创 2024-03-04 13:37:51 · 356 阅读 · 0 评论 -
图像分割 - 利用K-means聚类方法实现图像分割
传统的数字图像处理算法中,针对于图像分割部分,除了阈值处理、区域生长啊等等之类的,还有很经典的聚类算法图像分割是指将图像划分为多个片段。这是因为对于不同的图像任务,我们往往不care整个图片,只对感兴趣的区域处理,这就是图像分割的意义。聚类算法的思想很简单,就是将相似属性的像素点分配到一起。原创 2024-04-06 16:11:45 · 260 阅读 · 0 评论 -
图像分割 - 凸包(图像的轮廓)
利用 opencv 找到几何图形的凸包原创 2024-03-02 19:17:54 · 101 阅读 · 0 评论 -
图像分割 - 轮廓拟合(最小外接矩形和圆形)
拟合:用一条光滑的曲线将平面上的点连接起来轮廓拟合:将凹凸不平的轮廓用平整的几何图形体现出来本章将介绍如何用或者将下面的图像轮廓拟合。原创 2024-03-01 12:19:01 · 240 阅读 · 0 评论 -
图像分割 - 查找图像的轮廓(cv2.findContours函数)
基于opencv的轮廓检测原创 2024-02-29 11:11:47 · 237 阅读 · 0 评论 -
特征提取 - 骨架、中轴和距离变换
骨架的定义:就是目标的前景像素点集合内部最大的内切圆盘,将所有的内切圆盘的圆心连起来就是骨架一个骨架的区域就是这个区域中与区域边界 等距的集合,形态学 - 骨架和形态学 - 细化第二个参数计算距离的方法,常用的有下面几种第三个参数为 maskSize:距离变换掩码矩阵的大小当选择使用街区距离时,掩码尺寸选择3×3还是5×5对计算结果都没有影响,因此为了加快函数运算速度,默认选择掩码尺寸为3×3。原创 2022-11-29 17:57:34 · 2820 阅读 · 1 评论 -
图像分割 - 分水岭算法
图像是由x,y表示的,如果将灰度值也考虑进去的话,那么一幅图像需要一个三维的空间去表示。这样就可以把x,y轴比作大地,将灰度值的z轴比作地面上的坡度。因为图像的灰度值是不均匀的,那么也意味着这个地面也是坑坑洼洼的。那么试想一下,下雨的时候,由于地面是不平坦的,雨水会顺着高的地面流向地处。必然会导致有的地方堆满了水,有的地方由于地势较陡,没有雨水分水岭算法就是利用这种“地形学”,或者说灰度值的不均匀对图像进行分割。属于区域极小值的点水滴所在位置的点,如果把水滴放在任意位置,水滴必然流向某个极小值。原创 2022-11-24 11:26:23 · 6423 阅读 · 0 评论 -
图像分割 - 区域生长
分割的目的是将图像分为多个区域常用的分割方法基于两个属性:不同区域间的灰度不连续性质(Canny边缘检测等等)、相同区域灰度的相似特征(阈值处理、区域生长等等)区域生长就是基于同一区域的灰度相似特性展开的,通过预先设定的生长准则,将像素种子生长到更大区域的过程。基本的方法是,对于一组预设的点(这里称为种子),通过和其周围邻域灰度值比较,满足相同特性的(灰度值差异较小)像素点添加到新的种子,进而增长区域区域生长的步骤为:1. 先定义一组种子。原创 2022-11-23 11:24:34 · 2287 阅读 · 0 评论 -
图像分割 - 阈值处理 - 自适应阈值
自适应阈值也是可变阈值,采用的方法是图像中不同区域使用不同的阈值每个区域的阈值是通过计算像素点邻域按照特定的算法得到的因为在图像处理中,噪声和非均匀光照等等因素会影响阈值处理算法。所以,有时候基于全局的阈值处理算法效果可能就会差强人意。而自适应阈值处理,优势就在于能更好的处理明暗分布不均的图像opencv库提供了 adaptiveThreshold 函数。原创 2022-11-21 17:15:18 · 1569 阅读 · 0 评论 -
图像分割 - 阈值处理 - 多阈值处理(OTSU)
之前介绍的都是全局单个阈值对图像的分割。固定阈值法,阈值是人工根据灰度直方图的波谷进行设置的。全局阈值法,根据不停的迭代两个区域间的平均灰度进行分割。OUST最大类间方差法,是根据两个子区域不同类之间的最大方差分割。事实上,OTSU大津法可以扩展到任意数量的阈值P1是第一个区域的像素概率,及落在第一个区域的像素点 / 总像素点个数P2 、 P3 是落在第二、第三区域的概率。因此满足 P1+P2+P3 = 1mG 是整幅图像的平均灰度 , m1、m2、m3 是三个区域各自的平均灰度。原创 2022-11-17 19:42:23 · 6373 阅读 · 3 评论 -
图像分割 - 阈值处理 - 最大类间方差法(OTSU)
OTSU 大津法,也是最大类间方差算法OTSU 算法的思想通过不同的阈值K,将图像的分为两个区域,一个是灰度值 0原创 2022-11-17 11:56:18 · 1751 阅读 · 0 评论 -
图像分割 - 阈值处理 - 全局阈值处理
当目标和背景像素的灰度分布非常不同的时候,可以对整个图像使用全局阈值在大多数的应用中,图像之间通常存在足够的变化,全局阈值是一种合适的办法。所以,需要一种对图像做阈值估计的算法。为了获取合适的阈值,可以利用直方图进行迭代计算:随机设置一个阈值的初始值 T用 T 分割图像,这将会产生两个像素区域。一个是灰度值 T 所有像素组成的子区域 G2对G1、G2 两个子区域分别计算平均灰度值m1、m2。原创 2022-11-16 15:14:53 · 3101 阅读 · 4 评论 -
图像分割 - 阈值处理 - 固定阈值法
图像分割就是将图像分成不同的区域,每个区域满足相似的条件。通常,都是将图像分为两个区域:前景区域和背景区域。前景就是人们感兴趣的位置,例如一副Lena图像,我们只对这副图像的人物感兴趣,将它们分为一类,这里不注重对人物的细节,只看重大体的轮廓背景就是不感兴趣的位置,Lena人物旁边的物体全都是可有可无的,那么这里就认为这些都是背景区域。注意:背景区域里面的细节就表现为强的噪声通常将前景设置为255,背景设置为0,这样一副图像就只有255和0两个灰度值,那么这就是一副二值图像。原创 2022-11-15 11:03:38 · 1758 阅读 · 0 评论 -
图像分割 - Hough变换圆环检测
Hough 变换除了能用来检测直线外,也能用来检测圆环检测圆环的原理和直线类似,在检测圆环的过程中,需要考虑的参数有圆心和半径(x,y,r)opencv 封装的圆环检测采用的是两轮筛选的方法第一轮筛选会找出可能是圆的圆心坐标第二轮筛选会计算这些圆心坐标可能的对应半径长度image 检测的图像,这里是灰度图method 检测方法,opencv 4.0 及以前的版本提供了 HOUGH_GRADIENT作为唯一的方法dp 累加器,通常使用1。原创 2022-11-15 09:49:11 · 1465 阅读 · 1 评论 -
图像分割 - Hough变换直线检测
上述的变换是可行的,但是有个缺点是,当笛卡尔空间是垂直的直线是,对应参数空间的k是无穷大的,且截距b无法取值。例如:笛卡尔空间(x0 = 1,y0 = 2),那么在笛卡尔空间由无数条直线相交于同一点的方程是:y = k(x - 1) + 2 = k*x + 2-k(这里2-k是b)因此在参数空间是: 2-k = -x * k + y ------> b = -x * k + y----带入(1,2)-----> b = -k + 2。笛卡尔空间直线的k、b,就是参数空间点的坐标(k,b)原创 2022-11-14 16:16:04 · 1776 阅读 · 1 评论 -
图像分割 - Canny边缘检测
Canny 边缘检测基于以下三个目标:低错误率。所有边缘都应该被找到,不应该有虚假响应边缘点应该更好的被定位。检测到的边缘和真实边缘之间的距离应该最小单个边缘点响应。对于真实的边缘点,检测子应该只返回一个点,Canny边缘检测算法的步骤:Canny 是基于一阶微分的首先用高斯滤波平滑图像。计算梯度幅值图像和方向角度图像对梯度图像应用非极大值抑制使用双阈值处理和连通性分析来检测连接边缘首先,检测边缘前要平滑图像减少噪声的影响。原创 2022-11-08 09:05:50 · 1084 阅读 · 0 评论 -
图像分割 - 线检测
复杂度更高的是线检测由于二阶导数有更强的滤波器响应,并且比一阶导数有更细的线。但是二阶导数对噪声点会格外敏感,并且会产生双边缘响应灰度值恒定的区域必须为零灰度台阶或者斜坡开始处和结束处必须不为零灰度斜坡上的点必须为零二阶导数符号的变化可以判断边缘的过渡是从亮到暗还是暗到亮二阶导数:符号从 + 变到 - ,说明图像是从 暗区域 变到 亮区域最后就是,根据滤波器的权重设置,可以检测不同角度的线。这里:x轴为垂直向下,逆时针方向旋转的角度代表正角度。原创 2022-11-07 08:43:17 · 1464 阅读 · 0 评论 -
图像分割 - 孤立点的检测
因为,一阶导数通常会产生粗边缘。二阶导数对精细细节(细线、孤立点、噪声)有更强的响应。所以,检测孤立点应该以二阶导数为基础,而二阶导数的差分计算为:这个差分计算可以通过一个 系数和为零 的kernel去完成于是,如果滤波器的响应超过一个规定的阈值,那我们就认为在kernel的中心找到了一个点。将找到的点记作1,其他的点看作0,于是就得到了一副二值图像直观上看,这个概念是孤立点的灰度完全不同于其周围像素的灰度孤立点是那些灰度差超过某个阈值T,被认为是孤立点的像素点1111-8111。原创 2022-11-05 10:00:02 · 1113 阅读 · 0 评论 -
灰度级形态学 - 纹理分割
如图:这幅图上有两个纹理区域,右侧大斑点组成的区域和左侧小斑点组成的区域。我们的目标是根据纹理的内容找到两个区域的边界,在这图的情况下,边界由斑点的大小和空间分布决定将图像分为不同区域的处理称为分割介绍一下实现的思路:1. 因为灰度级的闭运算会删去暗点,如果改变kernel 的size 的话,就可以将左边小的斑点删去。2. 然后将闭运算的结果进行开运算将大斑点周围的亮区域删除。原创 2022-11-02 15:35:12 · 796 阅读 · 0 评论 -
灰度级形态学 - 顶帽变换和底帽变换
顶帽变换和底帽变换就是图像的加减和开闭运算的结合顶帽变换的公式为:原图 - 原图的开运算这里结合开运算的几何图形解释来介绍顶帽变换。因为开运算是结构元从下往上推动的过程,所以会删除图像灰度值相对周围高的亮点,而其他的区域影响是不大的。那么原图 - 原图的开运算的话,就是保留灰度值较高的亮点,顶帽运算相当于把开运算删除的亮点补回来了。并且,可以发现,open运算的图像灰度值均原创 2022-11-02 08:42:02 · 3032 阅读 · 0 评论 -
灰度级形态学 - 形态学平滑和形态学梯度
而结构元的作用是删除这些点的比例或者说个数,如果结构元较大的话,那么在开运算中,结构元从下往上推的时候,就会提前的被卡住,所以被删除亮点的个数就会更多。这里开闭运算会平滑图像,因为边缘也是像素点突变的位置,或者也可以认为是一种特殊的噪声。所以就会被结构元卡住,从而上面的灰度或者下面的灰度都会被截断。原图、加了椒盐噪声的图像、open运算处理、close处理、open-close处理、close-open处理。之前介绍过,开运算会删除灰度图像中的亮点,闭运算会删除灰度图像中的暗点。原创 2022-11-01 22:34:55 · 545 阅读 · 0 评论 -
灰度级形态学 - 灰度开运算和灰度闭运算
灰度级的开运算和闭运算和二值图像的处理一样,只不过一个作用于灰度图,一个作用于二值图像灰度级的开运算公式为:先对图像做腐蚀,然后对腐蚀的结果做膨胀运算灰度级的闭运算公式为:先对图像做膨胀,然后对膨胀的结果做腐蚀运算这里通过图像函数的表达来理解灰度级的开闭运算之前介绍过二值图像开运算的几何解释,就是用结构元来前景像素的内部滑动,能到达的位置就是开运算的结果这里灰度级的也可以做这样的理解,就是用结构元从底部向上推,能推到的位置就是开运算的处理结果。原创 2022-10-31 16:21:48 · 1988 阅读 · 0 评论 -
灰度级形态学 - 灰度膨胀和灰度腐蚀
灰度级形态学将形态学在二值图像的处理中扩展到灰度图像灰度腐蚀:得到kernel 处理子区域的最小值因此:灰度腐蚀后的图像整体偏暗,并且亮特征减少灰度膨胀:得到kernel 处理子区域的最大值同二值图像 膨胀运算一样,需要将结构元先反射,绕原点选择180。但通常使用的结构元都是对称的,因此可以不用考虑反射的问题因此:灰度膨胀后的图像整体偏亮,并且暗特征减少灰度腐蚀就是统计排序滤波器里面的最小值滤波器灰度膨胀就是统计排序滤波器里面的最大值滤波器。原创 2022-10-30 11:02:24 · 1701 阅读 · 2 评论 -
形态学 - 骨架
骨架的定义很简单:就是目标的前景像素点集合内部最大的内切圆盘,将所有的内切圆盘的圆心连起来就是骨架这里的S(A) 就是骨架,Sk(A) 是骨架的子集第二个公式的意思就是,将前景像素做K次腐蚀,每次腐蚀完的时候,将腐蚀图做开运算(因为开运算是原图的子集)。将腐蚀前的图片 - 开运算后的图像 做骨架的子集每次K腐蚀一次就得到一个子集,K停止的条件是腐蚀之后,A为空集最后将所有的子集相加这里我们还是对二值图像处理。原创 2022-10-30 09:08:34 · 1216 阅读 · 0 评论 -
形态学 - 细化
定义为 B 对前景像素集合 A 的细化定义为 B 对前景像素集合 A 的 击中-击不中 变换结构元 B 常用的有八个,如下图所示细化的步骤为:1. 用结构元B1 对 A 做 击中-击不中 变换,然后用原图减去变换的结果A12. 将上步的结果A1,用B2 做 击中-击不中 变换,然后用A1减去B2变换的结果得到A23 . 将八个结构元循环迭代 记作一次细化的迭代4. 如果两次细化的迭代结果相同,则认为细化完成;否则,重复前面三步骤。原创 2022-10-29 18:21:47 · 1209 阅读 · 0 评论 -
形态学 - 凸壳
凸壳的定义是:图像前景像素点任意两点的直线都在集合的最小的集合这里我们处理的图像依旧是二值图像这里 i 取四次操作,对图像分别做上、下、左、右的扩充代表击中-击不中变换处理的过程为:用结构元B对图像做击中-击不中变换,当两次处理的结果相同的时候,操作停止。因为这里需要四个不同的结构元做上下左右的变换,所以每次处理的结果是凸壳的子集注:四次都是对原图做变换最后将四次处理并在一块就行了最后需要注意的是,因为凸壳会增长到超出保证凸性的最小区域,减少这种过增长最好的方法就是,原创 2022-10-28 19:19:44 · 1636 阅读 · 0 评论 -
形态学 - 提取连通分量
从二值图像中提取连通分量是许多自动图像分析应用的核心假设A是一个或者许多连通分量组成的前景像素集合,X0是与A所在图像I大小相同的图像,但存在A中每个连通分量的一个已知的起始点。我们的目标是从X0开始,找到I中所有的连通分量A。原创 2022-10-28 09:08:31 · 2380 阅读 · 0 评论 -
形态学-孔洞填充
然后,为了将膨胀的结果限制在孔洞内部,需要和原图(图a)的补集(图b)相交(图e),因为如果不控制膨胀的结果的话,那么膨胀会填充整个区域,而膨胀结果和原图的补集相交,会使结果限制到我们感兴趣的区域内部,也就是孔洞。3. floodFill 会对原图像进行操作,所以事先需要拷贝图像,将漫水的种子设为(0,0)也就是图像的左上角,填充的颜色为255。这里我们将除了 前景像素点和孔洞 的位置都填充为前景像素点,然后通过求反就可以得到所有的孔洞的位置。先设置一个填充的起始点,需要在孔洞的内部。原创 2022-10-07 15:58:00 · 2967 阅读 · 1 评论 -
形态学 - 边界提取
前景像素点的边界可以通过如下方式得到:首先将原图A腐蚀得到腐蚀图B,然后将原图A减去腐蚀图B得到差集为腐蚀,公式的意思是,用结构元B对A的腐蚀使用 3 * 3 的正方形结构元往往会得到像素1 宽度边界,而使用 5 * 5 大小的正方形结构元往往会得到 2 宽度的边界。这是因为 3 * 3的正方形结构元腐蚀 会使图像边界缩小一格。如图:opencv 库里面的形态学梯度是:原图的膨胀图 - 原图的腐蚀图因为膨胀会使目标扩大,腐蚀会使目标减少,所以差值产生的边界宽度会比较大。原创 2022-10-27 10:36:03 · 1529 阅读 · 0 评论 -
形态学 - 击中-击不中变换
HMT全称是Hit miss transformation --- 击中 击不中变换,这里我们只对二值图像做处理二值图像是图像的灰度值只有两个值的图像,也就是非黑即白的图像,所以常用0表示黑,255表示白来表示二值图像通过结构元B1 对前景目标(灰度值为1255的点)做腐蚀操作通过结构元B2 对背景目标(灰度值为0的点)做腐蚀操作。因为我们只对二值图像做处理,只包含了前景+背景,所以背景目标也可以认为是前景目标的补集最后将前两步骤的图像求公共的集合,即交集。原创 2022-10-27 09:58:52 · 3018 阅读 · 1 评论 -
形态学 - 开运算和闭运算
膨胀和腐蚀操作都会有一个通病,就是会改变原目标的大小开运算:先对目标腐蚀在膨胀开运算能够平滑物体的轮廓、断开狭窄的狭颈、消除细长的突出物等等开运算的一些理解:先腐蚀在膨胀,可以保证目标大致的形状不变改变的部分,是由于腐蚀操作可能会让某些目标消失,这样该目标就不能通过膨胀还原所以开运算后的图像是 原图的子集根据几何解释,所以对同一幅图像重复开运算结果是相同的闭运算:先膨胀在腐蚀闭运算能够弥合狭窄的断裂和细长的沟壑、消除小孔、填补轮廓中的缝隙等等闭运算:先膨胀在腐蚀。原创 2022-10-26 22:53:22 · 5986 阅读 · 0 评论 -
形态学 - 膨胀和腐蚀
形态学是生物学的一个分支,主要研究动植物的形态和结构。这里,我们应用形态学简化图像的数据,取出不重要的结构,仅仅保持图像的基本形状特性形态学的基础是集合论。将感兴趣的区域称为前景像素点,不感兴趣的部分称为背景像素点。通过定义的结构元SE(structural element) 对前景像素点操作,从而达到处理图像的效果。结构元类似之前的滤波器模板,不同的是结构元需要定义原点。原点对应像素点的输出,原点可以在SE的内部或者外部。当结构元对称且未指定原点的时候,原点位于对称中心处。原创 2022-10-25 09:44:04 · 1615 阅读 · 0 评论 -
空间滤波 - 钝化掩蔽和高提升滤波
从原图减去一副钝化(平滑后)的图像,是20实际30年代以来印刷和出版业一直用来锐化图像的过程。这个过程称为钝化掩蔽,它由三个步骤组成模糊原图像从原图像减去模糊后的图像(产生的差为模板)将模板与原图像相加假设表示模糊后的图像,则模板为:然后将加权的模板与原图像相加:这里 k 为权值且 k >= 0。原创 2022-10-24 16:59:30 · 1756 阅读 · 0 评论 -
空间滤波 - 锐化处理 - 二阶差分算法(拉普拉斯)
因此二阶差分会突出图像中的急剧灰度过渡,并不强调灰度值缓慢变换的区域,所以往往会产生具有灰色边缘线和其他不连续性的图像,且往往二阶导数的图像都是偏暗的。但是数字图像中的边缘在灰度上通常类似于斜坡过度,而一阶差分的定义是在灰度斜坡的一阶导数必须是非零的,所以图像的一阶差分会导致较宽的边缘。为了突出图像,往往将拉普拉斯图像和原图像相加,既可以恢复背景特征,又可以保留二阶导数的锐化效果。差分的模板需要保证模板的和为0,为了保证对灰度恒定变换的区域输出为0。一阶差分算法可以有效的提取目标的边缘。原创 2022-10-23 21:07:19 · 2279 阅读 · 0 评论 -
空间滤波 - 锐化处理 - 一阶差分算法(Sobel、Scharr算子)
空间滤波的另一种用途是图像的锐化,锐化的作用是突出灰度中的过渡区域图像的模糊在空间域当中可以通过平滑(平均)邻域中的像素实现,类似于积分运算图像的锐化在空间域当中可以通过锐化(差值)邻域中的像素实现,类似于微分运算因为差值会计算出两个像素灰度值的差异,而在灰度值变换平坦的区域差值几乎为零。所以,锐化滤波的作用是削弱图像灰度值变换缓慢的区域,同时增强灰度值存在明显差异的区域,这些区域往往是边缘或者噪声。原创 2022-10-23 13:55:02 · 3082 阅读 · 0 评论