matlab练习程序(寻找凸包,Graham扫描法)
2015-11-18 15:56
155 查看
Dsp Tian
matlab练习程序(寻找凸包,Graham扫描法)
我不太清楚这个凸包在图像处理中到底会怎样的运用,因为这个好像更多的是计算几何或是图形学里面的东西。不过作为一个算法,我感觉还是有必要研究一下的。我主要的参考资料是《算法导论》的33.3和这个博客。代码在这里,我只写了主要过程,过分细节的判断就省略了。这里是逆时针寻找:
main.m
clear all; close all; clc; img=ones(256,256); imshow(img); [x y]=ginput(); x=round(x); y=round(y); n=length(x); p=[]; for i=1:n img(y(i)-1:y(i)+1,x(i)-1:x(i)+1)=0; p=[p;x(i) y(i)]; %待判断凸包的点集 end imshow(img); %%下面计算凸包 [t index]=max(p(:,2)); %找到y最大的点的索引,这里没考虑当有多个这样的点的情况 tmp_p=p(index,:); %找到y最大的点 tmp_heng=[tmp_p(1)+30,tmp_p(2)]; %设一个和y最大的点平行的点 for i=1:n %这里没判断夹角相同的情况,当夹角相同,可以判断当前点和p0点的距离。 jiao(i)=multi_jiao(tmp_heng,p(i,:),tmp_p); %求每个点和y最大的点的夹角,自己和自己夹角NAN end jiao=jiao'; p=[p jiao]; p=sortrows(p,3); %按第三列排序,第三列是夹角度数 re{1}=p(n,1:2); %re相当于栈 re{2}=p(1,1:2); re{3}=p(2,1:2); top=3; %指向栈顶的指针 for i=3:n-1 while multi(p(i,1:2),re{top-1},re{top})>=0 %如果为正 top=top-1; end top=top+1; re{top}=p(i,1:2); end %下面是把找到的凸包上的点连线 for i=2:top img=drawline(img,re{i-1}(1),re{i-1}(2),re{i}(1),re{i}(2)); end img=drawline(img,re{1}(1),re{1}(2),re{top}(1),re{top}(2)); figure; imshow(img)
multi_jiao.m 向量的夹角,0-180度
function re=multi_jiao(p1,p2,p0) %判断<p10,p20>夹角,为排序做准备 x=1; y=2; vec1=p1-p0; vec2=p2-p0; re=acos(dot(vec1,vec2)/(norm(vec1)*norm(vec2)))*180/pi; end
multi.m 叉积,判断返回值的符号
function re=multi(p1,p2,p0) %p10,p20叉积,获取正负,为正则栈顶的值不为凸包上的点,为负则为凸包上的点 x=1; y=2; re=(p1(x)-p0(x))*(p2(y)-p0(y))-(p1(y)-p0(y))*(p2(x)-p0(x)); end
drawline.m 画线函数,matlab好像没有,自己动手,丰衣足食
function img=drawline(img,x1,y1,x2,y2) %因为图像坐标和数学函数坐标y轴朝向相反,所以这里所有y变量取相反数 y1=-y1; y2=-y2; k=(y2-y1)/(x2-x1); b=y1-k*x1; mi=min(x1,x2); ma=max(x1,x2); for i=mi:ma img(-round(i*k+b),i)=0; end mi=min(y1,y2); ma=max(y1,y2); for i=mi:ma img(-i,round((i-b)/k))=0; end end
下面是一个结果,matlab最大的好处就是直观的看到算法结果:
好文要顶 关注我 收藏该文
Dsp Tian
关注 - 5
粉丝 - 557
+加关注
0
0
(请您对文章做出评价)
« 上一篇:matlab练习程序(图像放大/缩小,双立方插值)
» 下一篇:matlab练习程序(模板匹配)
posted on 2012-12-10 22:39 Dsp Tian 阅读(2294) 评论(0) 编辑 收藏
刷新评论刷新页面返回顶部
注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。
【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【推荐】融云即时通讯云-专注为 App 开发者提供IM云服务
【福利】极光推送-富媒体+大数据驱动精准推送,完全免费开放啦
最新IT新闻:
· 马明哲详解互联网金融3.0时代
· 史玉柱免掉巨人网络133名干部
· 刘强东:京东淘宝模式谁最终胜出已很明白
· 关于Facebook的未来,31岁的扎克伯格还有三条锦囊妙计
· 阿里斥双11退货率达63%?货还没收到怎么退!
» 更多新闻...
最新知识库文章:
· 被误解的MVC和被神化的MVVM
· 再谈设计和编码
· 什么时候应该避免写代码注释?
· 持续集成是什么?
· 人,技术与流程
» 更多知识库文章...
公告
昵称:Dsp Tian园龄:4年1个月
粉丝:557
关注:5
+加关注
导航
博客园首页
新随笔
联系
订阅
管理
| ||||||
日 | 一 | 二 | 三 | 四 | 五 | 六 |
---|---|---|---|---|---|---|
25 | 26 | 27 | 28 | 29 | 30 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | 1 | 2 | 3 | 4 | 5 |
统计
随笔 - 351文章 - 0
评论 - 333
引用 - 0
Powered by: 博客园 Copyright © Dsp Tian
相关文章推荐
- matlab代码注释技巧
- matlab:读取mp4文件,并把逐帧保存成图片文件,文件名的编号随帧数变化
- MATLAB 基本小函数用法
- Matlab环境下使用Libsvm
- matlab 复制图片到另一个文件夹 并且重命名
- 灰度共生矩阵GLCM及其matlab实现
- matlab:clear,close,clc
- Matlab函数bwmorph简介
- Matlab 实现对码功能
- 每天一点matlab——图像与图形的区别
- matlab图像处理为什么要归一化和如…
- 图像增强(MATLAB)
- 图像增强剂matlab实现
- 常用的一些图像处理Matlab源代码
- matlab图像处理为什么要归一化和如…
- matlab常用函数与常用指令大全
- MATLAB相应一些函数机及其作用
- matlab图像预处理代码综合
- matlab图像提取
- matlab简单结构