MATLAB在图像处理中的应用

图像处理概念、算法和MATLAB

POLY2MASK和ROIPOLY–第2部分

我熟悉确定点是否在多边形内的两种基本方法。首先是计算绕组编号,表示闭合曲线环绕点的次数。此技术由MATLAB函数使用inpolygon.

在计算像素网格上所有点的多边形内点时,交叉测试是比较常用的方法。你沿着一条光线从图像的一边走到另一边,计算光线穿过多边形边缘的次数。

x1=[30 80 60 30];y1=[30 50 90 30];ray_x=[20 90];ray_y=[70];点数_x=[30 60 80];点y=[70];绘图(x1,y1)保持绘图(x射线,y射线,“r”)绘图(点x、点y、,“标记”,“o”,“MarkerSize”,4,“颜色”,“k”,...“MarkerFaceColor”,“k”,“线型”,“没有”)文本(30,70,“A”,“VerticalAlignment”,“底部”)文本(70,“B”,“VerticalAlignment”,“底部”)文本(80,70,“C”,“VerticalAlignment”,“底部”)轴心持有头衔(“多边形1”)

在点A,光线未穿过多边形边;A在多边形外部。在点B,光线已穿过多边形边一次;B在内部。在点C,光线已穿过多边形边两次;C在外部。

当然,多边形可能比三角形复杂得多。这里有两个凸的、非简单的多边形。

子地块(2,1,1)地块([30 70 30],[30 70 30])保持情节([80],[60 60],“r”)举行头衔(《多边形2》)子地块(2,1,2)地块([30 70 70 40 60 30],...[30 30 55 35 35 60 60 30])保持绘图([20 80],[45 45],“r”)地块(50,45,“标记”,“o”,“MarkerSize”,4,“MarkerFaceColor”,“k”)案文(50,45,“D”,“VerticalAlignment”,“底部”ylim([25 75])保持头衔(“多边形3”)

在多边形2中,光线穿过多边形两次,然后再穿过多边形两次。多边形3更有趣。点D是在多边形内还是在多边形外?答案是惯例问题。常用的惯例是框类规则。如果存在偶数个交叉点,则点位于多边形外部。如果存在奇数,则点位于多边形内部。根据此规则,点D位于多边形外部。

交叉测试和奇偶规则很容易理解。挑战在于避免在特殊情况下被绊倒。麻烦的情况包括光线与顶点相交、边相交和重合边。另一种情况是光线与边重合。下面是一些图示。(请注意,在多边形7中,多边形左侧有两条重合边。)

子地块(2,2,1)图([2030],[302030]);持有绘图([10 50],[30 30],“r”)举行头衔(“多边形4”)、ylim([10 50])子plot(2,2,2) plot([20 30 40 50 60 20], [30 10 20 10 30 30]);持有Plot ([10 70], [10 10],“r”)举行头衔(“多边形5”),ylim([0 40])子地块(2,2,3)地块([20 50 20 50 20],[20 20 60 60 20]);保留绘图([10 60],[40 40],“r”)举行头衔(“多边形6”)、ylim([10 70])子地块(2,2,4)地块([20 60 60 20 20 50 20 20 20],...[20 20 50 50 20 35 50 20]); 持有情节([70],[35]35,“r”)举行头衔(“多边形7”), ylim (60 [10])

在关于这个主题的下一篇文章中,我将介绍图像处理工具箱函数使用的特定算法polymaskROIPLY.

这是第1部分这一主题。




与MATLAB®7.3一起发布

|
  • 打印
  • 发送电子邮件

评论

如需留言,请点击在这里登录到您的MathWorks帐户或创建新帐户。