by 今天不飞了
圆的物体,在实际拍摄中由于种种原因可能会变成椭圆,用圆拟合就不够准确。这里分享一篇文献中椭圆检测的方法(代码使用方法)。
我真的……为什么评论和私信还有人问我“求出来的椭圆在哪里呀?”你们到底在看什么。2.3分明写着“输出参数说明——ellipses是目标椭圆”,不知道椭圆数学表达式的就百度”
还有问“你这个代码能计算椭圆圆心吗?”,全篇都在检测椭圆,你猜呢?不懂就问可以,但毫不思考就问,是不是有点……
% 编译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 删了
如果觉得麻烦,可以在文末链接直接下载。(已编译且内置动态库)
如果不方便下载,可以评论区留下QQ或邮箱。
% 这是论文自带的图片(可替换成你自己的)
im = imread('.\pics\43.jpg');
% 论文检测椭圆的核心代码
[ellipses, ~, ~] = ellipseDetectionByArcSupportLSs(im, 120, 0.3, 0); % 输入输出后面会讲到
% 论文自带的显示结果的代码
drawEllipses(ellipses',im);
Tac:椭圆完整度,测试代码如下
(为了更人性化进行了修改,可自定义颜色,如有需要文末有下载地址)
%% 第一个参数 Tac
im = imread('.\pics\test1.png');
Tacs = [90,180,190,270,300,350];
for k = 1:6
% Tr统一用0.1
[ellipses, L, posi] = ellipseDetectionByArcSupportLSs(im, Tacs(k), 0.1, 0);
subplot(2,3,k),drawEllipses(ellipses',im,[1,0,0]); % 为了使用方便进行了修改,可自定义颜色
title(['\fontsize{14}Tac = ',num2str(Tacs(k))])
end
实验结果如下,所以当你要找的目标是比较完整时,可以将Tac调大,从而达到剔除残缺椭圆的效果;反之你的目标可能被遮挡(只露出一部分时),可以将Tac调小,以确保不漏掉任何可能。
Tr:椭圆边缘点数量比列系数(用于判断构成一个椭圆的点数是否足够,不代表具体的值)
举例说明,如下图左边的椭圆Tr值就小于右边的椭圆(设置合适的Tr,就能剔除左边保留右边)
测试代码如下
%% 第二个参数 Tr
im = imread('.\pics\test2.jpg');
Trs = [0.1,0.2,0.3,0.5,0.7,0.9];
for k = 1:6
% Tac统一用30
[ellipses, L, posi] = ellipseDetectionByArcSupportLSs(im, 30, Trs(k), 0);
subplot(2,3,k)
drawEllipses(ellipses',im,[1,0,0]); % 为了使用方便进行了修改,可自定义颜色
title(['\fontsize{14}Tr = ',num2str(Trs(k))])
end
实验结果如下,大致就是Tac取得越小,找到的椭圆越多,但“假目标”也越多。
sp:椭圆正负性,描述椭圆内外灰度情况(正-内亮外暗,负-外暗内亮),测试代码如下
%% 第三个参数sp
if 1
im = imread('.\pics\test3.png');
sp = [1,-1,0];
for k = 1:3
[ellipses, L, posi] = ellipseDetectionByArcSupportLSs(im, 30, 0.2, sp(k));
subplot(1,3,k)
drawEllipses(ellipses',im,[1,0,0]); % 为了使用方便进行了修改,可自定义颜色
title(['\fontsize{14}sp = ',num2str(sp(k))])
end
end
实验结果如下,取1只搜索比背景亮的椭圆,反之只搜索比背景暗的椭圆,取0则全部搜索。
% 这是论文自带的图片
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]); % 为了使用方便进行了修改,可自定义颜色
有时在复杂场景下,通过调节Tac,Tr,sp也不能定位到自己想要的“椭圆”时,可以对输出数据进一步筛选。
im = imread('.\pics\filt1.jpg');
minsize = [30,40,50,60];
for k = 1:4
% 找到所有椭圆
[ellipses, L, posi] = ellipseDetectionByArcSupportLSs(im, 180, 0.3, 0);
% 找到尺寸较小的
b = ellipses(:,4); % 短轴长
idx = find(b<minsize(k));
% 剔除
ellipses(idx,:) = [];
% 显示
subplot(2,2,k)
drawEllipses(ellipses',im,[1,0,0]); % 为了使用方便进行了修改,可自定义颜色
title(['\fontsize{14}minsize = ',num2str(minsize(k))])
end
实验结果如下
im = imread('.\pics\filt2.jpg');
ratio = [3,2,1.2,1.05];
for k = 1:4
% 找到所有椭圆
[ellipses, L, posi] = ellipseDetectionByArcSupportLSs(im, 180, 0.3, 0);
% 找到椭度过大的
a = ellipses(:,3);
b = ellipses(:,4);
idx = find(a./b>ratio(k));
% 剔除
ellipses(idx,:) = [];
% 显示
subplot(2,2,k)
drawEllipses(ellipses',im,[1,0,0]); % 为了使用方便进行了修改,可自定义颜色
title(['\fontsize{14}minsize = ',num2str(ratio(k))])
end
实验结果如下
im = imread('.\pics\filt3.jpg');
axs = [pi/2,0,pi/4,-pi/4];
for k = 1:4
% 找到所有椭圆
[ellipses, L, posi] = ellipseDetectionByArcSupportLSs(im, 180, 0.3, 0);
% 找到超出指定轴位范围的
ax = ellipses(:,5);
idx = find(ax<axs(k)-0.3|ax>axs(k)+0.3);
% 剔除
ellipses(idx,:) = [];
% 显示
subplot(2,2,k)
drawEllipses(ellipses',im,[1,0,0]); % 为了使用方便进行了修改,可自定义颜色
title(['\fontsize{14}ax = ',num2str(axs(k)/pi*180),'°'])
end
实验结果如下
文章浏览阅读259次。docker-machine常用命令总结_${docker_machine_name-default}
文章浏览阅读5.6k次。参考链接:https://blog.csdn.net/billbliss/article/details/43968291_c++ opencv3 fillpoly
文章浏览阅读373次,点赞8次,收藏6次。python redis 连接池使用_python redis 连接池
文章浏览阅读1.4k次。“番茄钟”介绍番茄钟,是根据一个瑞典人所写的番茄工作法理论进行开发的一款方便、实用的日程管理软件。指的是把工作任务分解成半小时左右,集中精力工作25分钟后休息5分钟,如此视作种一个“番茄”,而“番茄工作法”的流程能使下一个30分钟更有动力。使用说明1)开始界面a)开始界面的中央处有倒计时钟,分布在其下的为“工作”与“休息”的两个button,点下任一个button即可触发响应的倒..._番茄时钟微信小程序实验报告
文章浏览阅读2k次,点赞9次,收藏18次。在中,我们每次新建页面都会需要写一大部分重复代码。那么有什么办法,能够建立模版:vscode是可以进行相关配置的。_vscode创建vue文件模板
文章浏览阅读5.1k次,点赞4次,收藏5次。1. 报错描述 Nginx配置好Https后启动报错: the "ssl" parameter requires ngx_http_ssl_module in /usr/local/nginx/conf/nginx.conf2. 解决方法进入Nginx安装包执行命令配置Nginx的http和https ./configure --prefix=/usr/l..._the ssl parameter
文章浏览阅读757次。listview垂直滚动条效果 private void Form1_Load(object sender, EventArgs e) { this.listView2.HeaderStyle = System.Windows.For..._c# listview美化竖向滚动条
文章浏览阅读2.8k次。1. 接通电源线和GigE接口网线2. 打开pylon viewer软件,配置IP 打开IP configure界面,方法有以下两种:3. 配置IP将相机的静态IP地址改为与连接的适配器的IP处于同一子网中(即与连接的电脑处于同一子网) 或改为自动获取IP地址。..._basler连接
文章浏览阅读169次。最终,要确定服务器速度缓慢的具体原因,对服务器日志、网络流量和系统性能指标进行彻底分析通常很有帮助。与在同一数据中心内发送的请求相比,如果服务器距离访问它的客户端较远,长距离发送的请求可能会遇到更高的延迟。服务器硬件本身可能已经故障或资源不足,这可能包括处理器核心或线程不足、内存或存储容量不足,不能满足处理工作负载的要求。多个应用程序或用户(运行的服务太多或太多用户请求服务)可能会争夺服务器资源,从而导致响应时间变慢并降低整体性能。如果网络流量过载,就会降低服务器处理请求和响应客户端请求的能力。
文章浏览阅读6k次,点赞5次,收藏15次。首先,在成功安装Mysql的基础上,进入到cmd窗口,登录我们的mysql管理系统。登录方式:mysql -u用户名 -p密码如果出现Welcome to...等一大堆英文指示,则说明成功进入了mysql系统。因为我们不知道系统中有哪些库,所以要使用show databases 命令行,展示有那些库;1.创建数据库与删除CREATE DATABASE数据库名DEFAULT CHARSET='utf..._4、在mysql中创建一个名为shiyandata的数据库,并在数据库创建一个名为jz的数据表,
文章浏览阅读3.3k次。MⅢ总线特点 安川伺服选型与应用案例的详细描述:MⅢ总线特点 安川伺服选型与应用案例降低系统成本在MECHATROLINK-Ⅲ中,可连接62个站点,从而大幅度降低系统的配线费用与时间。与过程控制、工厂自动化领域中的连接端子和电缆配套使用,MECHATROLINK可构造高可靠、低成本、多功能的控制系统。采用MECHATROLINK可替代D/A转换器(速度、扭矩方式)和脉冲发生器(位置方式),因而可简..._安川有总线伺服吗
文章浏览阅读457次。通过本文的讲解,读者可以全面了解iOS开发的基础知识和关键流程,从创建第一个iOS程序到纯代码实现开发,涵盖了多个方面的内容。希望本文能够帮助读者更好地入门iOS开发,提升开发技能和实践经验。