椭圆检测(Ellipse Detection)算法

by HPC_ZY

圆的物体,在实际拍摄中由于种种原因可能会变成椭圆,用圆拟合就不够准确。这里分享一篇文献中椭圆检测的方法(代码使用方法)。

一、文献与代码

  1. 下载
    Arc support Line Segments Revisited An Efficient High-quality Ellipse Detection[文献下载 ] [源码下载 ]
  2. 编译
    直接复制并修改(根据自己OpenCV和MATLAB路径版本等)
    这里假设你的文件都在D盘,OpenCV使用2.4.9版本,那么编译方式如下
% 编译C++源码供MATLAB调用
mex generateEllipseCandidates.cpp...			
    -ID:\opencv2\build\include...				% 请使用你的OpenCV路径
    -ID:\opencv2\build\include\opencv...		% 请使用你的OpenCV路径
    -ID:\opencv2\build\include\opencv2...		% 请使用你的OpenCV路径
    -LD:\opencv2\build\x64\vc11\lib...			% 请使用你的OpenCV路径
    -ID:\MATLAB\extern\include...				% 请使用你的MATLAB路径
    -LD:\MATLAB\extern\lib\win64\microsoft...	% 请使用你的MATLAB路径
    -lopencv_core249...							% 请使用你的OpenCV版本
    -lopencv_highgui249...						% 请使用你的OpenCV版本
    -lopencv_imgproc249...						% 请使用你的OpenCV版本
    -llibmwlapack.lib  
% 注意:替换的时候,不要把前面的 -I,-L,-l 删了

二、使用与实例

  1. 基本使用
    编译完之后就可以直接使用论文提供的测试代码LCS_ellipse.m,运行前记得修改文件路径(文件名)。
    主要函数有两个ellipseDetectionByArcSupportLSs.mdrawEllipses.m,也可以使用以下代码测试:
% 这是论文自带的图片
im = imread('.\pics\43.jpg'); 

% 论文检测椭圆的核心代码
[ellipses, ~, ~] = ellipseDetectionByArcSupportLSs(im, 120, 0.3, 0); % 输入输出后面会讲到

% 论文自带的显示结果的代码
drawEllipses(ellipses',im);
  1. 输入参数说明
    通过三组实验说明,待续

  2. 输出参数说明
    ellipses:优化后的目标椭圆
    E:优化后的边缘(仅椭圆目标)
    candidates:初始检测出的所有疑似椭圆目标(即优化前)

% 这是论文自带的图片
im = imread('.\pics\43.jpg'); 

% 论文检测椭圆的核心代码
[ellipses, E, candidates] = ellipseDetectionByArcSupportLSs(im, 120, 0.3, 0); 

% 显示结果
figure,imshow(im)
drawEllipses(ellipses',im,[1,0,0]);
figure,imshow(E)
drawEllipses(candidates',im,[0,1,0]);

在这里插入图片描述

三、进阶使用

待续

四、其他

  1. 持续更新,会在本周内完成
  2. 其他一些椭圆检测的参考文献
    A Fast and Robust Ellipse-Detection Method Based on Sorted Merging pdf
    A Fast Ellipse Detector Using Projective Invariant Pruning pdf
    A NEW EFFICIENT ELLIPSE DETECTION METHOD pdf
    Edge curvature and convexity based ellipse detection method
  3. 欢迎讨论

猜你喜欢

转载自blog.csdn.net/xsz591541060/article/details/107813895