《我的眼睛--图灵识别》第五章:基础:形状识别

2023-11-14

《我的眼睛–图灵识别》第五章:基础:形状识别

1、图形认识

三角形

三角形是由同一平面内不在同一直线上的三条线段‘首尾’顺次连接所组成的封闭图形。
三角形按边分有不等边三角形、等腰三角和等边三角形;按角分有直角三角形、锐角三角形、钝角三角形等,其中锐角三角形和钝角三角形统称斜三角形。

周长公式:周长 = a + b + c
面积公式:面积 = 底(任意边) * 高(h) / 2

在这里插入图片描述
不等边三角形、等腰三角形和等边三角形

在这里插入图片描述
锐角三角形、直角三角形和钝角三角形

矩形(四边形)

至少有三个内角都是直角的四边形是矩形,有一个内角是直角的平行四边形是矩形,对角线相等的平行四边形是矩形。矩形是一种特殊的平行四边形,正方形是特殊的矩形。矩形也叫长方形。

周长公式:周长 = 2 * (a + b)
面积公式:面积 = a * b

在这里插入图片描述
长方形、正方形和菱形

多边形

由三条或三条以上的线段‘首尾’顺次连接所组成的平面图形叫做多边形。多边形可以分为正多边形和非正多边形、凸多边形及凹多边形。
组成多边形的线段至少有3条,三角形是最简单的多边形。组成多边形的每一条线段叫做多边形的边;相邻的两条线段的公共端点叫做多边形的顶点;连接多边形的两个不相邻顶点的线段叫做多边形的对角线。

在这里插入图片描述
正凸多边形和非正凸多边形

在这里插入图片描述
正凹多边形和非正凹多边形

圆形(椭圆形)

在一个平面内,一动点以一定点为中心,以一定长度为距离旋转一周所形成的封闭曲线叫做圆,这个定点叫做圆的圆心。
圆是一种几何图形。圆是轴对称、中心对称图形。对称轴是直径所在的直线。同时,圆又是“正无限多边形”,而“无限”只是一个概念。当多边形的边数越多时,其形状、周长、面积就都越接近于圆。所以,世界上没有真正的圆,圆实际上只是概念性的图形。
椭圆形比圆形长,比圆形扁,椭圆形是由圆形变成的长圆形。椭圆是围绕两个焦点的平面中的曲线,使得对于曲线上的每个点,到两个焦点的距离之和是恒定的。因此,它是圆的概括,其是具有两个焦点在相同位置处的特殊类型的椭圆。

圆形周长公式:周长 = 2 * 3.14 * r
圆形面积公式:面积 = (3.14 * r ) ^ 2
椭圆形周长公式:周长 = (r / R) * (r + R)
椭圆形面积公式:面积 = 3.14 * a * b

在这里插入图片描述
圆形、椭圆形和同心圆

2、多边形识别

多边形识别(Find Shape)包含三角形、多边形、矩形和圆形的识别。主要识别的核心算法思路是统计形状的顶点数量和线段数量,根据筛选规则识别得到对应的形状图形。
数据统计筛选识别规则分别为三角形:有3个顶点和3条线段组成,多边形:有 4个顶点和至少3条线段以上组成,矩形:有4个顶点和4条线段组成,圆形:有4个顶点和0条线段组成。

在这里插入图片描述
(核心算法)多边形

人眼在识别形状的时候速度是非常快的,因为线条简单。但是电脑程序要实现形状识别就需要用到很多的数学几何公式。看似简单做起来却很难,要识别二维物体的形状需要以下的几个步骤:

在这里插入图片描述
识别步骤

第1步,获取像素

使用“来源_获取图片像素()”的函数命令(封装了微软提供的LoadImage和GetBitmapBits等API函数)根据图片文件的路径进行图像数据的像素获取。(详情查阅:04基础:图片识别->像素获取)

在这里插入图片描述
(预览)图像数据

第2步,滤镜处理

二值化

因为准备的示例图已经是黑白的图像,所以这里暂时不需要进行二值化等图像滤镜的处理。在之后章节的复杂图像识别上会有详细的介绍。(详情查阅:07预处理:图像滤镜->彩色图像滤镜->二值化)

第3步,定位区域

获取顶点

相邻的两条线段的公共端点叫做多边形的顶点。
首先对图形的显示区域进行定位,分别使用从上往下从左往右找出左边的边界、从左往右从下往上找出下边的边界、从下往上从右往左找出右边的边界和从右往左从上往下找出上边的边界,这样就得到的图形的显示区域和对应4个方向的边界值。

在这里插入图片描述
显示区域

然后再确定顶点的数量,规则为根据设定2个顶点之间的最小距离大于一定的阈值时则认为是2个顶点(注意看圆形的边界线比较长,这里设定的阈值为15像素距离)。因为图像通过二值化处理后,存在有锯齿或一小段线条的情况会影响顶点数量的计算,此过程主要是去除计算时的干扰。最终才能得到二维图形的有效顶点数量。

在这里插入图片描述
圆形的边界线比较长

在这里插入图片描述
有效顶点

获取线段

组成多边形的每一条边叫做线段。要确定是否为线段,道理很简单,只需要计算2个顶点之间直线上的白色点数达到一定的数量后(这里设定的阈值为15像素长度),则为判定为有效线段。

在这里插入图片描述
(绿色)有效线段

获取2个顶点之间直线上的所有像素点的坐标采用的是,直线的斜截式方程:y=kx+b,其中k是直线的斜率,b是直线在y轴上的截距。该方程叫做直线的斜截式方程,简称斜截式。此斜截式类似于一次函数的表达式。

在这里插入图片描述
直线方程式

第4步,进行识别

形状特征统计

接下来,只需要根据前面获得的顶点数量和线段数量,针对不同的形状进行不同的判定条件,即可完成图形的识别。
首先,判断线段数量小于2时则为圆形。
然后,判断顶点数量等于线段数量同时等3时则为三角形,同时等4时则为矩形。

最后,判断顶点数量大于线段数量且都大于4时则为多边形。

在这里插入图片描述
三角形

在这里插入图片描述
多边形

在这里插入图片描述
矩形

在这里插入图片描述
圆形

VB6核心代码:




    '识别
    Public Function 形状比对(图像数据() As Byte, 顶点距离 As Long, 线段长度 As Long) As String
    Dim w As Long, h As Long,As Long,As Long
    Dim x As Long, y As Long, 顶点() As 坐标结构, i As Long, Point As Long, bo As Boolean= UBound(图像数据, 2)= UBound(图像数据, 3)
        i = 0
        '按顺序 找出4个边界上的顶点,根据阈值筛选是否为2个点
        '找出左边所有顶点
        For w = 0 ToPoint = 0
            bo = False
            For h = 0 ToIf 图像数据(2, w, h) = 255 Then
                    If bo = False Then    '找到白色点
                        bo = True    '记录开关
                        ReDim Preserve 顶点(i) As 坐标结构    '第1个点
                        顶点(i).x = w
                        顶点(i).y = h
                        i = i + 1
                    End If
                    Point = Point + 1    '记录白色点数
                ElseIf 图像数据(2, w, h) = 0 And bo = True Then
                    If Point > 顶点距离 Then    '筛选是否为第2个点
                        ReDim Preserve 顶点(i) As 坐标结构
                        顶点(i).x = w
                        顶点(i).y = h
                        i = i + 1
                    End If
                    Exit For
                End If
            Next
            If bo = True Then Exit For
        Next
            If i = 0 Then 形状比对 = "":  Exit Function
        '找出下边所有顶点
        For h =To 0 Step -1
            Point = 0
            bo = False
            For w = 0 ToIf 图像数据(2, w, h) = 255 Then
                    If bo = False Then    '找到白色点
                        bo = True    '记录开关
                        If 顶点(i - 1).x <> w And 顶点(i - 1).y <> h Then    '排除重叠顶点
                            ReDim Preserve 顶点(i) As 坐标结构    '覆盖前面的点记录
                            顶点(i).x = w
                            顶点(i).y = h
                            i = i + 1
                        End If
                    End If
                    Point = Point + 1    '记录白色点数
                ElseIf 图像数据(2, w, h) = 0 And bo = True Then
                    If Point > 顶点距离 Then    '筛选是否为第2个点
                        ReDim Preserve 顶点(i) As 坐标结构
                        顶点(i).x = w
                        顶点(i).y = h
                        i = i + 1
                    End If
                    Exit For
                End If
            Next
            If bo = True Then Exit For
        Next
        '找出右边所有顶点
        For w =To 0 Step -1
            Point = 0
            bo = False
            For h =To 0 Step -1
                If 图像数据(2, w, h) = 255 Then
                    If bo = False Then    '找到白色点
                        bo = True    '记录开关
                        If 顶点(i - 1).x <> w And 顶点(i - 1).y <> h Then    '排除重叠顶点
                            ReDim Preserve 顶点(i) As 坐标结构    '覆盖前面的点记录
                            顶点(i).x = w
                            顶点(i).y = h
                            i = i + 1
                        End If
                    End If
                    Point = Point + 1    '记录白色点数
                ElseIf 图像数据(2, w, h) = 0 And bo = True Then
                    If Point > 顶点距离 Then    '筛选是否为第2个点
                        ReDim Preserve 顶点(i) As 坐标结构
                        顶点(i).x = w
                        顶点(i).y = h
                        i = i + 1
                    End If
                    Exit For
                End If
            Next
            If bo = True Then Exit For
        Next
        '找出上边所有顶点
        For h = 0 ToPoint = 0
            bo = False
            For w =To 0 Step -1
                If 图像数据(2, w, h) = 255 Then
                    If bo = False Then    '找到白色点
                        bo = True    '记录开关
                        If 顶点(i - 1).x <> w And 顶点(i - 1).y <> h Then    '排除重叠顶点
                            ReDim Preserve 顶点(i) As 坐标结构    '覆盖前面的点记录
                            顶点(i).x = w
                            顶点(i).y = h
                            i = i + 1
                        End If
                    End If
                    Point = Point + 1    '记录白色点数
                ElseIf 图像数据(2, w, h) = 0 And bo = True Then
                    '最后的点不为记录,因为返回到了起点
                    Exit For
                End If
            Next
            If bo = True Then Exit For
        Next
        '按顺序 计算 当前点和下一个点的 直线上 的点数是否满足一定的阈值,为线段
        Dim n As Long, m As Long, k As Long, 线段数量 As Long, 顶点数量 As Long
        Dim xx() As Long, yy() As Long
        n = UBound(顶点)
        顶点数量 = n + 1
        线段数量 = 0
        For i = 0 To n
            If i = n Then
                Call 取直线上所有坐标(顶点(i).x, 顶点(i).y, 顶点(0).x, 顶点(0).y, xx, yy)
            Else
                Call 取直线上所有坐标(顶点(i).x, 顶点(i).y, 顶点(i + 1).x, 顶点(i + 1).y, xx, yy)
            End If
            m = UBound(xx)
            Point = 0
            For k = 0 To m
                If 图像数据(2, xx(k), yy(k)) = 255 Then
                    Point = Point + 1
                End If
            Next
            If Point > 线段长度 Then
                线段数量 = 线段数量 + 1
            End If
        Next
        '判断线段数量 和 顶点数量  最终得到 形状识别
        If 线段数量 > 2 Then
            If 顶点数量 > 线段数量 Then
                形状比对 = "多边形"
            Else
                If 顶点数量 = 线段数量 Then
                    If 线段数量 = 3 Then
                        形状比对 = "三角形"
                    ElseIf 线段数量 = 4 Then
                        形状比对 = "矩形(四边形)"
                    Else
                        形状比对 = "多边形"
                    End If
                End If
            End If
        Else
            形状比对 = "圆形(椭圆形)"
        End If
    End Function

未完待续……

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《我的眼睛--图灵识别》第五章:基础:形状识别 的相关文章

  • 基于matlab深度学习的水果图像识别算法

    基于matlab深度学习的水果图像识别算法 欢迎大家一起学习 本文采用的是matlab平台 网上大部分用的是python语言 因为毕业设计要求 我采用的是matlab 也算是自己查阅了很多资料吧 matlab里面有一个软件设计工具 APP
  • 深度学习之学习(3-3)YOLOV2

    参见 目标检测论文阅读 YOLOv2 知乎 二 更快更准 YOLOv2 2 1 简介 2017年 作者 Joseph Redmon 和 Ali Farhadi 在 YOLOv1 的基础上 进行了大量改进 提出了 YOLOv2 和 YOLO9
  • 毕设:基于CNN卷积神经网络的猫狗识别、狗品种识别(Tensorflow、Keras、Kaggle竞赛)

    基于卷积神经网络的图像识别算法及其应用研究 毕业快一年了 拿出来分享给大家 我和网上唯一的区别就是 我能够同时实现两个方案 猫狗识别和狗品种识别 我当时也是网上各种查 花了2 3个月的时间 一个萝卜一个坑走过来的 深度学习真的是深似海呀 不
  • python爬虫验证码识别 (手把手教会你验证码识别)opencv图像处理 图片处理 验证码处理 降噪 简单易懂验证码处理

    前言 验证码是个烦人的小家伙 当然有很多打码平台 可以轻松解决 但可以自己来 干嘛靠别人 有技术不学是傻儿童 今天主要讲opencv来解决验证码 抱着怀里教你 让你向前迈一大步 详细讲 慢慢看 简单易懂 一 流程 大致分为以下步骤 图片灰度
  • python实现手势识别

    python实现手势识别 入门 使用open cv实现简单的手势识别 刚刚接触python不久 看到了很多有意思的项目 尤其时关于计算机视觉的 网上搜到了一些关于手势处理的实验 我在这儿简单的实现一下 PS 和那些大佬比起来真的是差远了 毕
  • 机器视觉图像分析领域,单目测量和双目测量有什么区别和用途?

    单目测量和双目测量在许多应用场景中都有广泛的应用 以下是一些典型的应用场景 单目测量应用场景 1 无人机定位与导航 单目摄像头可以用于无人机的视觉定位与导航 通过捕捉地面特征点 实现无人机的姿态估计和位置定位 2 机器人视觉导航 在轻量级的
  • 基于Tensorflow+VGG+DBN本地化批量图像识别系统(深度学习+Python)含全部工程源码+视频演示+图片数据集

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 1 Python 环境 2 Tensorflow 环境 3 wxPython 环境 4 PIL 环境 模块实现 1 数据预处理 2 模型简化处理 3 用户界面设计 4 翻译模块调用
  • 计算机视觉系列-2-图像分类

    给定一张输入图像 图像分类的任务是判断该图像属于哪类 如果是多任务分类 可以用于分类该图像包含哪个类别 深度学习作为机器学习中非常重要的分支 在图像领域中应用非常广泛 在图像分类任务中 通常采用卷积层 CNN 提取特征 加上全连接层进行分类
  • opencv——训练自己的小狗分类器

    opencv python图像识别 训练自己的分类器 opencv支持训练自己的分类器 闲话少说 训练步骤 准备样本图像数据 样本数据预处理 正反样本数据生成正反txt vec文件 训练 测试结果 注意以下几点 首先应该注意样本数据量 预处
  • 基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译——深度学习算法应用(含Python、ipynb工程源码)+数据集(三)

    目录 前言 总体设计 系统整体结构图 系统流程图 运行环境 模块实现 1 数据预处理 2 数据增强 3 模型构建 4 模型训练及保存 1 模型训练 2 模型保存 5 模型评估 相关其它博客 工程源代码下载 其它资料下载 前言 本项目依赖于K
  • CnOCR 使用教程

    目录 一 简介 二 使用教程 三 效果展示 一 简介 CnOCR 是 Python 3 下的文字识别 Optical Character Recognition 简称OCR 工具包 支持简体中文 繁体中文 部分模型 英文和数字的常见字符识别
  • 消防图像火灾探测器原理

    消防图像火灾探测器是一种基于图像处理技术的先进火灾探测设备 它的工作原理是通过对火灾图像进行分析和识别 实现对火灾的早期探测和报警 这种火灾探测器采用了先进的计算机视觉技术 可以实时监测火灾发生的地点 并在火灾发生之初就能够及时发出警报 从
  • yolo 车辆测距+车辆识别+单目测距(双目测距)

    基于yolo目标检测算法实现的车前道路中的车辆和行人检测 并且可以估测出目标与本车之间的距离 一 视频展示 yolo车距1 订阅专栏获得源码 提供完整代码 无需看下文 二 单目测距原理 图中有一个车辆 且车辆在地面上 其接地点Q必定在地面上
  • 《我的眼睛--图灵识别》第五章:基础:形状识别

    我的眼睛 图灵识别 第五章 基础 形状识别 1 图形认识 三角形 三角形是由同一平面内不在同一直线上的三条线段 首尾 顺次连接所组成的封闭图形 三角形按边分有不等边三角形 等腰三角和等边三角形 按角分有直角三角形 锐角三角形 钝角三角形等
  • java 验证码识别demo

    pom依赖坐标
  • 正点原子I.MX6ULL开发板车牌识别项目实战 1

    1 项目总体概述 下图为 车牌识别项目 的系统框图 借助这个框图 简要介绍项目的总体思路和所需要做的准备工作 1 1 总体思路 通过摄像头采集图像信息 并将图像信息传递开发板 这里使用的是OpenCv 开发板收到图像信息之后 通过定时器 周
  • 车险保单在线OCR识别,字段很全,可以可以

    快瞳科技 车险保单识别 在线测试后发现 保险公司名称 保单号或者合同号 总保费 保险期间 业务类型 车型保单类型 保单名称 被保人信息 被保险人 被保人姓名 被保人证件号码 被保人电话号码 被保人联系地址 车辆信息 车牌 车辆种类 车辆使用
  • 【从小项目学图片处理】#1 答题卡识别

    说明 项目皆参考于网上 代码也有大部分参考原文 仅用于学习和练习图像处理操作 项目原文 Bubble sheet multiple choice scanner and test grader using OMR Python and Op
  • 基于Fruits-360数据集构建CNN进行水果识别实验

    基于Fruits 360数据集的水果识别项目 前段时间导师要求做一个神经网络可视化的项目 要将水果数据集进行训练得到模型 用于TensorSpace可视化 前前后后捣鼓了很久 现在回过头总结一下整个项目过程 写下这篇博客记录遇到的问题 有任
  • 惊艳了!升级版的 APDrawing,秒让人脸照变线条肖像画

    作者 高卫华 出品 AI科技大本营 随着深度学习的发展 GAN模型在图像风格转换的应用越来越多 其中不少都实现了很好的效果 此前 reddit上的一个技术博主AtreveteTeTe基于GAN模型混合将普通的人像照片卡通化 并通过First

随机推荐

  • 《暗时间》阅读笔记一

    推荐阅读原著 https book douban com subject 6709809 https book douban com subject 6709809
  • Bert: Pre-training of Deep Bidirectional Transformers for Language Understanding

    Abstract 我们介绍了一种语言表达模型称为BERT 也就是Transformer的双边编码表示 与当前语言表达模型不同 Peters et al 2018a Radford et al 2018 BERT设计通过考虑所有层左右上下文对
  • Erlang in Mac OSX

    download the source package from the erlang website http www erlang org download html and unzip it tar zxvf otp src R14B
  • 第十届蓝桥杯省赛C++B组 迷宫

    试题 E 迷宫 本题总分 15 分 问题描述 下图给出了一个迷宫的平面图 其中标记为 1 的为障碍 标记为 0 的为可 以通行的地方 010000 000100 001001 110000 迷宫的入口为左上角 出口为右下角 在迷宫中 只能从
  • 攻防世界weak_auth知识详解

    1 进入环境 当我们点进去的时候 出来一个网页 让我们输入username和password 先随便输入一下 然后弹出是说让我们用admin作为username登入 那我们就按照它的要求吧 进行修改 这次它只是提醒了密码错误 我们的重心开始
  • Es_算分函数使用详情

    算分函数查询 相关性计算 当我们利用match查询时 文档结果会根据与搜索词条的关联度打分 score 返回结果时按照分值降序排列 例如 我们搜索 虹桥如家 结果如下 score 17 850193 source name 虹桥如家酒店真不
  • 递归遍历树节点

    考虑这样一种场景 从一个object找到id对应的对象 obj如下结构 调用 fn obj 121 返回 对应object id 121 child const obj id 0 child id 1 child id 12 child i
  • Failed to read the 'localStorage' property from 'Window' 的解决办法

    参考链接 https stackoverflow com questions 30481516 iframe in chrome error failted to read localstorage from window access d
  • 【PHP小皮】使用教程

    博主介绍 主攻JAVA 因不可逆的原因 被迫学PHP 刚人门多多关照 文章目录 前言 一 官网下载小皮 二 使用步骤 1 打开小皮页面 2 使用步骤如下 总结 前言 随着快爱情的发展 php也不是那么的繁琐 下载集成工具小皮就可以省去很多时
  • 史上最全的maven的pom.xml文件详解

    本文转自 https www cnblogs com hafiz p 5360195 html 原作者 阿豪聊干货
  • Flask后端笔记(二)request、bort、响应、session、钩子

    Flask后端笔记 获取请求参数 上传文件 with的使用 bort函数与自定义异常处理 abort函数 自定义异常处理 返回的响应数据 元组 make response json模块的使用 使用jsonify返回json数据 重定向 设置
  • 最新的单机Lustre文件系统的安装

    1 单机Lustre的搭建 主机名 IP地址 内存 添加的共享磁盘大小 Centos7 9 test机 192 168 10 30 24 1G 20G 1 安装E2fsprogs包 下载OSS服务器所需要的包 E2fsprogs包只是在Ex
  • 该linux文件目录的owner权限

    sudo chown R admusr 要改的用户名 admusr path
  • “过早优化是万恶之源”这句话的源头

    来自于一篇大神的论文 而且原意没有一句话那么简单 Premature optimization is the root of all evil Programmers waste enormous amounts of time think
  • python 下载安装

    在下载Python之前我们要明确我们的开发环境的操作系统 这里我们选择Windows Python下载步骤 Python安装步骤 测试安装是否成功 注意 如果输入python后 没有出现如图效果 而是显示 python 不是内部或外部命令
  • .NET Core 获取自定义配置文件信息(多种方式)

    引用 Microsoft AspNetCore App 元包或将包引用添加到 Microsoft Extensions Options ConfigurationExtensions 包 简而言之 直接可以用 Appsetting json
  • ES分布式搜索引擎

    初始化RestClient 引入依赖 因为SpringBoot默认的ES版本是7 6 2 所以我们需要覆盖默认的ES版本
  • Linux用nohup后台运行python程序及停止

    在Ubuntu上用python flask写了一个后端代码 每次运行要CMD先远程连上服务器 然后python xxx py启动 这样操作会让cmd窗口被占用 没办法进行其他操作 ls cd这种 如果把窗口关了 程序就停止了 看了网上的例子
  • CTFSHOW【萌新计划】Writeup

    CTFSHOW 萌新计划 web1 萌新计划 web2 萌新计划 web3 萌新计划 web4 萌新计划 web5 萌新计划 web6 萌新计划 web7 萌新计划 web8 萌新计划 web9 萌新计划 web10 萌新计划 web11
  • 《我的眼睛--图灵识别》第五章:基础:形状识别

    我的眼睛 图灵识别 第五章 基础 形状识别 1 图形认识 三角形 三角形是由同一平面内不在同一直线上的三条线段 首尾 顺次连接所组成的封闭图形 三角形按边分有不等边三角形 等腰三角和等边三角形 按角分有直角三角形 锐角三角形 钝角三角形等