MATLAB:定位手掌最大内切圆
来源:互联网 发布:网络口碑营销公司 编辑:程序博客网 时间:2024/04/27 23:18
最近要做的一件事就是:对于一份给定的手掌图,要定位可寻的最大内切圆。做了近12个小时,才终于解决了这个问题,下面记录一下过程。
1、图片在MATLAB里是个矩阵,如何在矩阵作圆:
function [] = DrawCircle( Image, Centre, Radius )figure, imshow(Image), hold on;t = 0:0.01:2*pi;x = round(Radius*cos(t) + Centre(1));y = round(Radius*sin(t) + Centre(2));%fill(x, y, 'w');plot(x, y, '-r','LineWidth', 1);plot(Centre(1), Centre(2), '*r');end
2、如何实现内切圆心的定位:
% GA algorithmoptionsOrigin = gaoptimset('Generations', 50,... 'PopInitRange',[0;min(Width,Length)],... 'PopulationSize',ceil(min(Width,Length)/10));[x, fval] = ga(@fitnessfcn, 3, optionsOrigin);Centre = [x(1), x(2)];Radius = fval;str = sprintf('\nCentre = %f, Radius = %f', Centre, Radius);disp(str);
3、如何实现内切圆圆半径的确定;
function [ Result ] = CalRadius( Centre, Radius)global BinaryImager = floor(linspace(Radius, 0, ceil(log(Radius+1)+1)));N = length(r);t = 0:0.01:2*pi;n = length(t);for i = 1:1:N disp(r(i)); x = floor(Centre(1) + r(i)*sin(t)); y = floor(Centre(2) + r(i)*cos(t)); BlackPointFound = false; for j = 1:1:n if BinaryImage(y(j), x(j))==0 BlackPointFound = true; break; else continue; end end if false == BlackPointFound Result = r(i); return; endendResult=0;end4、运行结果检验
5、结果思考
速度慢:智能算法没进一步精确
圆半径精度不足:采的迭代算法不够细致,但过于细致会使速度下降
额外参考
- MATLAB:定位手掌最大内切圆
- 趣题:内切圆与最大内接矩形
- poj 3525 求凸多边形的最大内切圆
- POJ 3525(计算几何+凸多边形最大内切圆)
- matlab实现MSER(最大极值稳定区域)来进行文本定位
- matlab实现MSER(最大极值稳定区域)来进行文本定位
- POJ 3525 Most Distant Point from the Sea (半平面交+二分求最大内切圆)
- MATLAB实现三边定位
- MATLAB硬币定位
- 【ZOJ3919 2016年浙大2月月赛E】【简单计算几何 贪心】Ellipse 椭圆内切圆外切平行四边形最大最小面积
- 手掌上的银行
- 手指手掌脱皮治疗
- 三角形内切圆的半径
- 内切圆 UVA 11524 - InCircle
- 三角形内切圆与外接圆
- 三角形外接圆与内切圆
- 手掌与拳头检测
- opencv跟踪手掌 代码
- K-means文本聚类系列
- 第97章、短信监听(从零开始学Android)
- HTTP协议之基本认证
- libpopt的使用(译)
- POJ 2112 Optimal Milking (网络流+二分)
- MATLAB:定位手掌最大内切圆
- jobdu 28 堆栈的使用
- 转载过来的一些嵌入式资料
- Uninstall Safari with WindowsUninstaller.Org Removal Tips
- UISearchBar
- 从一次立项会议上学到的东西
- IOS开发:自动化打包
- 问题记录
- c语言中return与exit的区别