ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

【图像边缘检测】基于matlab最小二乘法椭圆边缘检测【含Matlab源码146期】

【图像边缘检测】基于matlab最小二乘法椭圆边缘检测【含Matlab源码146期】 欢迎来到海神之光博客之家✅博主简介热爱科研的Matlab仿真开发者修心和技术同步精进个人主页海神之光代码获取方式海神之光Matlab王者学习之路—代码获取方式⛳️座右铭行百里者半于九十。更多Matlab图像处理仿真内容点击①Matlab图像处理进阶版②付费专栏Matlab图像处理初级版⛳️关注CSDN海神之光更多资源等你来⛄一、椭圆边缘检测简介1 经典椭圆检测方法椭圆检测算法经过多年的研究发展已经基本形成一个较完整的体系。它们大致可以分为三类即投票聚类、最优化、基于弧段的方法。投票聚类方法椭圆因为有中心位置坐标、长短轴长度、倾斜角五个参数标准霍夫变换有较强的鲁棒性但对内存要求高运算效率低不太现实。霍夫变换类算法以霍夫变换为算法基础经过不同国家研究人员多年的不懈努力研究如今已衍生出很多改进算法它们各有优劣。随机霍夫变换算法相对标准霍夫变换计算速度有较大提升但检测相互遮挡的椭圆时准确度低。2 随机hough变换椭圆检测算法随机椭圆检测结合使用了了最小二乘法和Hough变换算法。第一步预处理获得较理想的边缘图。第二步随机选取三个点取这三点为中心相同大小的邻域中所有点用最小二乘法把它们拟合成一个椭圆。如图2-3所示。第三步从边缘点中再随机选取第四个点判断此点是否在拟合出的圆上。若是则认为该椭圆是真实椭圆的可能性较大接着收集证据验证该椭圆的真实性。算法具体过程如下从第二步开始1.把边缘检测得到的点收进集合V中失败计数器f初始值设为0。设定5个阈值分别是能容忍的失败次数最大值Tf检测进行时对V中边缘点数量的要求阈值Tem随机选取的三点之间两两距离最小值Ta随机选取的第四点到可能椭圆边界距离的最大值Td以及椭圆残缺比率阈值Tr。2.np表示集合V中剩余的点的数量当np小于Tem时或当失败次数f大于Tf时停止检测算法终止否则从V中随机取四点并从V中删除这四点。3.若用来求解椭圆参数的三个点两两之间距离都大于Ta拟合出椭圆计算第四个点到该椭圆边界的距离若距离小于Td执行第4步若不满足两者之一将这四个点返回到V中失败次数加一回到第2步执行。4.设E为第3步拟合出来的椭圆初始化满足阈值Td的点的个数num。遍历V中点计算并判断它们到椭圆E的边界的距离是否小于Td若是则numnum1并将该点从V中除去直到遍历完成。5.若numTr*K其中K为椭圆E的周长那么跳转到第6步否则认为椭圆E不是真实的椭圆将第4步和第2步中删除的num4个点返回V中并跳转到第2步。6.认为椭圆E是一个真实存在的椭圆f置0并跳转到第2步。3 随机hough变换的优缺点第一由于该算法是基于最小二乘法所以一方面检测结果往往比真实椭圆小而且对噪声敏感但是另一方面当预处理效果较好时检测精度很高。第二由于该算法基于随机采样所以一方面可能会有所选点距离较近的情况造成拟合出的椭圆偏差较大但是另一方面因为随机采样的灵活性检测速度提升了。第三一方面当参数选取的较好时检测又快有准确另一方面由于该算法严格由参数TaTdTr控制而且这些参数不易取到合适值所以会出现不合适的参数不仅增加计算量而且增加误检机会的情况。最优化方法最优化类方法优点在其精度上缺点是其一次只能处理一个图形即此前要对图像信息进行分类分离。AndrewFitzgibb等人提出了直接最小二乘法椭圆拟合算法。该方法能保证拟合出来的一定是椭圆。但该方法受到孤立点和噪声点的影响。目前最优化算法多与其他算法一起结合使用。基于弧段的方法基于边界聚类的椭圆检测方法结合使用了基于弧段的方法和最小二乘法。从边界图提取圆弧再经过过滤、聚类最终用最小二乘法拟合出椭圆。该方法能有效应对多个椭圆、椭圆相互遮挡和椭圆部分缺损等复杂情况因而引起了广泛的注意。边界聚类算法流程边界聚类算法属于从下往上结构的算法。算法步骤主要分为三步分别是预处理边界聚类和直接最小二乘法拟合椭圆三个过程。流程图如下所示第四步是二值化。二值化的效果几乎完全取决于分割阈值的选取。所以自动寻找最佳分割阈值的方法就显得十分关键。找到图片二值化的一个合适的分割阈值的一种方法是按图像的灰度特性,将图像分成背景和目标两部分,背景和目标之间的类间方差最大的分割意味着错分概率最小。MATLAB 的Graythresh函数就是使用该方法来获得一个自适应阈值作为二值化的分割依据。第五步二值化后因为椭圆弧附近的非相关像素会严重影响检测结果因此为了大幅度减少非相关像素本文用形态学的腐蚀操作来得到细化的边界。边界像素连接采用Kovesi的边界连接算法以8-邻域连通准则从上至下从左至右扫描二值图像将边界像素连接为有向边界列。然后采用边界列中像素数阈值条件去除像素数较小的集合。因为若边界列像素数少于阈值数则很有可能是噪声或背景应当删除。具体步骤如下1.以8-邻域连通准则从上至下从左至右扫描二值图像按连通区域对图像中的像素点聚类。2.寻找每一个连通域中边界像素中所有的结束点和分叉点分叉点是三条以上曲线的交点并存储。3.以这些结束点和分叉点为结束标志让每一个连通域中的像素点集合分割为遇到结束点和连接点就断开的小集合。4.删除这些集合中像素数小于某一阈值的部分。线段列提取因为图像光栅化难以获得准确的切线而后续过程需要用到圆弧的切线所以要进行线段拟合即用多段折线代替原来的圆弧。具体步骤如下1.取边界像素连接成的第i条有向边界列判断是否超过边界列总数目total若不是进行步骤2若是终止算法。2.判断该边界列是否已经完成处理若为否则进行第3步若是则ii1重新进行步骤2.3.从其中第三个点开始计算第一个点到这个点(记为点j)的连线方程并依次判断第一个点和该点之间的所有点到该连线的距离若所有距离均小于某一阈值则jj1重新进行步骤3否则该有向边界列从该处断开前面部分只保留第一个点和第j个点前面j个点构成的连线用第一点和第j点之间的直线连线代替后面部分仍然记为边界列i4.判断步骤3中断开的有向边界列后面部分像素数是否小于某阈值若是则删除掉否则不处理。最后跳转到步骤1。完成这一个过程后一个连通域的的像素点构成的曲线就变成了其中部分像素点构成的一条折线。经过这个过程虽然像素信息损失了一部分但是求取圆弧切线的精度从某种意义上说提高了因为没有了光栅化效应。而且数据少了处理变得简单。再采用线段数阈值条件去除较短的线段列。若线段数数少于阈值数则很有可能是噪声或背景或者进行拟合时误差过大因此须删除。线段列旋转方向统一本文将所有线段列旋转方向统一为逆时针方向。假设图3-4中的黑点为线段列中的点箭头代表线段列的方向P1x1,y1P2(x2,y2)P3(x3,y3)为线段列中连续的三个像素像素都引入z坐标且令其为0则P1x1,y10P2(x2,y20)P3(x3,y30)空间向量圆弧聚类圆弧聚类是将属于同一椭圆但是分开的两条或多条椭圆弧进行聚类。在进行聚类前首先要判断弧段的完整度。一般用弧段的首尾端点P1P3与中点P2构成的两向量P2P1P2P3的夹角的大小来进行判断。夹角越小一般该椭圆弧越完整夹角越大一般认为椭圆弧缺损越严重。设定一个阈值当夹角小于该阈值时认为该弧段已经足够完整仅仅靠该弧段上的点就可以较准确地拟合出真实存在的椭圆因此该弧段不需要参与后面的聚类过程。如果希望该阈值自适应在划分待聚类椭圆弧和不须聚类的弧较完整弧之前先要确定该阈值。用直接最小二乘法拟合该弧所在的椭圆若较圆为了减小的误差应使阈值夹角稍微大一些如90度若该弧所在的椭圆较扁应使阈值夹角稍微小一些如60度。接下来才根据该自适应阈值进行对圆弧判断。当大于阈值时认为该弧段上的点过少不足以拟合出准确的椭圆需要找到和该弧段属于同一椭圆的弧段然后用它们所有的点一起拟合出一个椭圆。经过此判断过程椭圆弧就被分成两组。把需要参加聚类的椭圆弧按照含点数的数目由多到少进行排列下面的过程都按照数目多的弧段优先的顺序进行。对于待聚类的椭圆弧先要定义其搜索区域由于椭圆是封闭图形所以整个椭圆可以确定是在其任何一部分弧和弧两端点的切线所在的射线包围起来的区域里面属于该椭圆的其他弧以确定是在该弧对应的弦和弧两端点的切线所在的射线包围起来的区域里面。这就是我们搜索的区域。在图中a1的搜索区域也就是射线l1,l2,弦l3和图像边缘范围内的区域在这个区域里面找弧可以缩小搜寻的范围提高效率。判断一条弧是否在待聚类椭圆弧的搜索区域里面我们只需取这条弧的首末端点j3,j4是否在搜索区域。方法是分别求过这两点同时平行于待聚类椭圆弧对应弦l3的直线和切线的交点若交点分别有两个交点都在射线上且这两个端点在对应两个交点之间则该弧段在搜索区域内。图中明显a2,a3,a4在a1的搜索区域内而a5不在。如上图a中的参与拟合的点较多都落在拟合的椭圆上所以有较大可能满足约束二条件b中大多数拟合点点离拟合出的椭圆边界有一定距离有较大可能不满足约束条件二。如果希望这两个阈值改为自适应的方法是先拟合出椭圆判断椭圆大小。若椭圆较小应适当降低限制即增大距离阈值减小比例阈值若椭圆较大应适当提高限制即减小距离阈值增大比例阈值。本算法中选取的是若椭圆的短轴小于50则距离阈值为0.05,比例阈值设为0.7;否则前者取0.03,后者取0.8。再配对聚类后的弧和较完整弧或者两个较完整弧可能属于同一椭圆但是在前面的步骤它们只是被分开了并没有配对所以有必要增加再匹配过程增加检测准确度。匹配方法还是约束条件二的方法。因为该方法和原算法的去伪过程相似所以经过该方法后无需再去伪。直接最小二乘法椭圆拟合前面的很多步骤都删除了像素点较少的集合或者用少数点代替了边界列中的很多点或者是分割后再删除点数较少的集合的这些操作到椭圆拟合这一步实际上基本上去除了所有的背景和噪声甚至包括一部分有用信息。所以即使对噪声和孤立点敏感的直接最小二乘法也可以用来拟合椭圆而且因为该方法对椭圆缺损不敏感所以非常适合。⛄二、部分源代码clc;clear all;imimread(‘1.jpg’);im0rgb2gray(im);%变彩色为黑白im1medfilt2(im0,[3 3]);%中值滤波函数BW edge(im1,‘sobel’); %边缘检测边缘为1其余为0[imx,imy]size(BW);%获取矩阵行数和列数L bwlabel(BW,8);% Calculating connected componentsmxmax(max(L))% There will be mx connected components.Here U can give a value between 1 and mx for L or in a loop you can extract all connected components% If you are using the attached car image, by giving 1,23 to L you can extract the number plate completely.[r,c] find(L3);rc [r c];[sx sy]size(rc);n1ones(imx,imy);%zerosfor i1:sxx1rc(i,1);y1rc(i,2);n1(x1,y1)0;end % Storing the extracted image in an arrayfigure,imshow(n1);title(‘边缘提取’);[S]ellipsefit(c,r)aS.Phi;jdg(S.Xc,S.Yc,S.A,S.B,a,n1)%plot ellipse⛄三、运行结果⛄四、matlab版本及参考文献1 matlab版本2014a2 参考文献[1]马一千,孔庆忠,张静.最小二乘法在椭圆检测中的应用[J].南方农机. 2017,48(16)3 备注简介此部分摘自互联网仅供参考若侵权联系删除 仿真咨询1 各类智能优化算法改进及应用生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化2 机器学习和深度学习方面卷积神经网络CNN、LSTM、支持向量机SVM、最小二乘支持向量机LSSVM、极限学习机ELM、核极限学习机KELM、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断3 图像处理方面图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知4 路径规划方面旅行商问题TSP、车辆路径问题VRP、MVRP、CVRP、VRPTW等、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化5 无人机应用方面无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配6 无线传感器定位及布局方面传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化7 信号处理方面信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化8 电力系统方面微电网优化、无功优化、配电网重构、储能配置9 元胞自动机方面交通流 人群疏散 病毒扩散 晶体生长10 雷达方面卡尔曼滤波跟踪、航迹关联、航迹融合
返回列表