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

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(使用前将#替换为@)

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

  • 《我的眼睛--图灵识别》第十章:实战演练:文字类识别

    我的眼睛 图灵识别 第十章 实战演练 文字类识别 1 标准数字 标准数字 Standard Numbers 是指10个数字使用的都是同属一种字体 它们的数字没有发生变形 没有扭曲 没有错位 存在有些变色但影响不大 字与字之间的间隔距离一样
  • 双目测量原理详解

    双目测距公式解析 看双目测距的时候一个公式就给难住了 网上各种解析很多更是弄得云山雾绕 写下自己的一点理解 自认为非常合理 就是这个公式 点P在成像平面上的两个点Pl Pr的坐标分别是 所谓视差 就是指左右图像上的相同特征点在x坐标上的差值
  • 基于深度学习的图像分类任务实现(二)卷积神经网络分类器&基于Residual Bolck的卷积神经网络分类器

    文章目录 1 代码编写思路 2 卷积神经网络分类器 2 1基本原理 2 2 代码实现 2 3 运行结果 3 基于Residual Bolck的卷积神经网络分类器 3 1基本原理 3 2代码实现 3 3模型结构可视化 3 4运行结果 实现多种
  • 园区消防系统组成

    园区消防系统是一个关键的安全设施 它由多个组成部分构成 以确保园区内的火灾风险得到有效控制和管理 这些组成部分包括火灾报警系统 消防水系统 自动喷水灭火系统 消防通道和紧急出口等 首先 火灾报警系统是园区消防系统的核心组成部分之一 它通过安
  • 图像识别之表格识别-百度PaddleOCR问题修改版

    百度PaddleOCR表格识别模块 本人根据PaddleOCR release 2 6修改了源码 解决了一些列识别和报错 其具体效果如下 源码地址 https pan baidu com s 1vwmoL7J4LzRlglHyUI1bUw
  • opencv进阶学习笔记12:轮廓发现和对象测量

    基础版笔记目录 python3 opencv学习笔记汇总目录 适合基础入门学习 进阶版笔记目录链接 python opencv进阶版学习笔记目录 适合有一定基础 轮廓发现 1轮廓发现介绍 基础版讲解 opencv学习笔记20 图像轮廓 2轮
  • 【图像处理】阈值分割

    图像阈值分割 一 简介 阈值分割常用在灰度图像中 将灰度值以一定的阈值进行分割 分为0或者255 使图像的像素值只有0或者255 非黑即白 由于不同物体的像素值不同 根据设置的阈值 将图像中的物体以像素级分割出来 有利于图像的进一步处理 使
  • 基于Tensorflow+VGG+DBN本地化批量图像识别系统(深度学习+Python)含全部工程源码+视频演示+图片数据集

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

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

    车牌识别系统 算法参考 http www zengqiang club blog 34 GUI参考 https blog csdn net wzh191920 article details 79589506 基于opencv的模板识别来实
  • 基于卷积的图像分类识别(二):ZFNet

    本专栏介绍基于深度学习进行图像识别的经典和前沿模型 将持续更新 包括不仅限于 AlexNet ZFNet VGG GoogLeNet ResNet DenseNet SENet MobileNet ShuffleNet Eifficient
  • opencv——训练自己的小狗分类器

    opencv python图像识别 训练自己的分类器 opencv支持训练自己的分类器 闲话少说 训练步骤 准备样本图像数据 样本数据预处理 正反样本数据生成正反txt vec文件 训练 测试结果 注意以下几点 首先应该注意样本数据量 预处
  • StrongSORT(deepsort强化版)学习体会

    少废话 先做备忘录 StrongSORT deepsort强化版 浅实战 代码解析 参考 https blog csdn net weixin 50862344 article details 127070391 https github
  • 十行Python代码搞定图片中的物体检测

    Word is useless show me the pic MR Lu 先看下原图 图片表述的是一男一女在散步 后面有一辆车 现在来看下我们通过十行代码实现的效果 我们可以看到 在这幅图中其实有三个 person 被识别出来 包括后面非
  • CnOCR 使用教程

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

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

    识别答题卡 import cv2 import numpy as np def showImg img name img cv2 imshow img name img cv2 waitKey cv2 destroyAllWindows d
  • Windows下命令行及Java+Tesseract-OCR对图像进行(字母+数字+中文)识别,亲测可行

    Windows下Java Tesseract OCR对图像进行字符识别 亲测可行 1 下载tesseract ocr 中文语言包并安装 2 命令行对图片进行识别及效果图 3 Java调用Tesseart OCR 3 1 效果图 3 2 源码
  • 指针式仪表的自动读数与识别

    指针式仪表的自动读数与识别 前言 概述 步骤概括 1 仪表图像预处理 2 刻度线提取 2 1轮廓查找 2 2面积筛选 长宽比 距离 2 3刻度线轮廓拟合直线 3 指针轮廓提取 3 1 霍夫直线检测原理 4 结果 5 Pyqt5 5 1功能
  • 多类别属性预测深度架构GlideNet

    将属性 如颜色 形状 状态 动作 附加到对象类别是一个重要的计算机视觉问题 属性预测最近取得了令人振奋的进展 通常被表述为一个多标签分类问题 然而 在以下方面仍然存在重大挑战 1 预测多个对象类别上的大量属性 2 建模属性的类别依赖性 3

随机推荐

  • 《暗时间》阅读笔记一

    推荐阅读原著 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 图形认识 三角形 三角形是由同一平面内不在同一直线上的三条线段 首尾 顺次连接所组成的封闭图形 三角形按边分有不等边三角形 等腰三角和等边三角形 按角分有直角三角形 锐角三角形 钝角三角形等