by HPC_ZY
圆的物体,在实际拍摄中由于种种原因可能会变成椭圆,用圆拟合就不够准确。这里分享一篇文献中椭圆检测的方法(代码使用方法)。
一、文献与代码
- 下载
Arc support Line Segments Revisited An Efficient High-quality Ellipse Detection[文献下载 ] [源码下载 ] - 编译
直接复制并修改(根据自己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 删了
二、使用与实例
- 基本使用
编译完之后就可以直接使用论文提供的测试代码LCS_ellipse.m,运行前记得修改文件路径(文件名)。
主要函数有两个ellipseDetectionByArcSupportLSs.m,drawEllipses.m,也可以使用以下代码测试:
% 这是论文自带的图片
im = imread('.\pics\43.jpg');
% 论文检测椭圆的核心代码
[ellipses, ~, ~] = ellipseDetectionByArcSupportLSs(im, 120, 0.3, 0); % 输入输出后面会讲到
% 论文自带的显示结果的代码
drawEllipses(ellipses',im);
-
输入参数说明
通过三组实验说明,待续 -
输出参数说明
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]);
三、进阶使用
待续