守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 2281|回复: 1
打印 上一主题 下一主题

[图像分析] 求不规则形状内像素点

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52691
    钢镚
    1422

    开源英雄守望者

    跳转到指定楼层
    楼主
    发表于 2015-1-20 10:45:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    原文地址:http://www.blogbus.com/linxinboy-logs/261546856.html

    上次写了个求凸状的图形内像素点,本来以为求任意形状 包括凹状的图形内的像素点比较麻烦。 后来仔细想了一下,其实很简单。

    比如这张图:



    如何求黑色线条内部的点呢?

    很简单。

    首先 我们定义一个节点类

    1. public class PointInt  
    2.   
    3. public var x:int;  
    4.   
    5. public var y:int;  
    6.   
    7. public var left:Boolean = false;;  
    8.   
    9. public var right:Boolean = false;;  
    10.   
    11. public var up:Boolean = false;;  
    12.   
    13. public var down:Boolean = false;;  
    14.   
    15. public var block:Boolean = false;  
    16.   
    17. public function get fullConnected():Boolean  
    18. {  
    19.     return left && right && up && down;  
    20. }  
    21.   
    22. public function PointInt(x:int = 0, y:int = 0, block:Boolean = false)  
    23. {  
    24.     this.x = x;  
    25.     this.y = y;  
    26.     this.block = block;  
    27. }  
    复制代码


    其中 x y 为节点位置 上下左右 分别标记当前节点是否  有找到它上下左右的节点 比如 (0,0)节点 如果找到右边的节点(1,0)则(0,0)的right标记为true, (1,0)的left标记为true. block表示是否是黑色线条区域,即边界。

    然后 我们找到边界区域的最大最小 x, y值 minX, maxX minY maxY

    我们做一个一个矩形 左上点为 (minX - 1, minY - 1) 右上点为 (maxX + 2, maxY + 2)

    如图



    所以 此块区域内的第一行节点 肯定是处于线条外部(如果 min http:// X - 1

    我们把第一行的节点全部push到一个list中去。

    然后遍历这个list 中的节点 如果它不是fullConnected 即它没有找到它上下左右的所有节点 则寻找它没有找到的节点 , push进list

    直到list中的所有节点都为fullConnected.

    这个过程可以如下看到: 点击以后开始运行



    你可一看到 边缘外部像素 好像注水一样逐渐注入 最后整个矩形非外部的像素即为边缘内部像素。

    最后的结果:



    源码: 不给。


    本文来自:http://blog.csdn.net/linxinboy/article/details/19938969


    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
    收藏收藏 分享分享 支持支持 反对反对 微信
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52691
    钢镚
    1422

    开源英雄守望者

    沙发
     楼主| 发表于 2015-1-20 10:48:50 | 只看该作者
    求不规则图形内像素点(凸状)


    最近想到一个问题: 如何取得不规则图像内的像素点。
    查了一下,资料比较少, 故自己写了一个, 笔记一下。
    关于凸装图形,比较简单。


    如图 凸状图形最多和一条垂直线有 2 个交点,将直线分为3 段,则 第一段为区域外部, 第二段为区域内部, 第三段为外部。
    对于凹状图形 复杂些 因为于直线的交点有不定个数,所以我们需要去检查每一段到底是出于外还是内。


    我的想法是在没一段内容上取这一点,将它和图形中点 (minX + maxX)/2, (minY + maxY)/2 的直线段, 查看此线段是否和图形边缘有交点。如果有则在图形外,如果没有则在图形内。不过这只能在图形不是极度不规则的情况下。
    比如下图就无法实现。


    红色为中点,很显然,上述方法不通。 暂未想到比较好的解决办法。
    最后显示一下 代码结果:



    如图 如果凹状图形在垂直方向 于直线只有两个交点 代码也是可以的, 但是如果水平方向凹陷就不行了。



    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    守望者AIR技术交流社区(www.airmyth.com)
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2024-4-19 10:43 , Processed in 0.051905 second(s), 35 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表