数字图象处理之二维码图像提取算法(六)

2023-11-04

整体的框图如下所示:

Hough 变换是图像空间和参数空间之间的一种变换, 利用点与线的对偶性,将原始图像空间的给定曲线变为参数空间的一个点,这样直线的检测就变为参数空间中峰值的检测

接下来来了解一下霍夫变换:


    可以证明,直角坐标系p-0中的一条直线和极坐标上的点是一一对应的,而且直角坐标系中同一条直线上的点对于极坐标p-0上的曲线必定会有一个公共交点。那么就可以将直角坐标系中直线的检测问题转变为平面上峰值的检测。

    如果直接对 PDF417 条码做 Hough 变换,条码中的前景像素点过多,计算量非常大,而且条码中的黑块也会影响直线求取的精度。 PDF417 条码是一种堆叠式条码,层内每行的像素点分布一样,层与层之间的像素点分布不同。因此,可对 PDF417条码做一次行差运算, 将像素灰度值差值不为 0 的像素点都变为黑色,否则都为白色,则条码层分界处的黑色点比层内多出许多,同时也减少了前景像素点的个数,降低了 Hough 变换的运算量

              


    由上图可以看出,行差运算后PDF417条码图像中需要计算的前景像素点大量的减少了,而且在行边界处存在一条明显的断断续续的直线。 因此,可以用Hough变换来得到直线的倾斜角度。但是,Hough 变换的运算量不仅和需要计算的前景像素点个数有关,而且和参数坐标的量化精度成正比,量化越细,计算量越大,反之,则越小,采用较大的量化间隔可以减小 Hough 变换的运算量, 但量化增大,又不能得到图像倾斜角度的精确值。为了解决这个矛盾,本文采用两级Hough变换,第一次Hough变换采用较大的量化间隔求得图像的大致倾斜角度,限定角度范围,第二次细化量化空间,求取条码图像精确的倾斜角度。

        求得角度之后就要进行条形码旋转到水平状态。

          二维图像旋转是指物体沿着某个定点转动某个角度的重定位过程,在对图像旋转之间,我们需要先设定一个旋转基准点以及旋转角度。本文的旋转基准点设定为采集到图像的中心位置,假设图像的宽度和高度分别为 W H,则基准点位置坐标为(W/2,H/2) ,旋转角度由前面的Hough 变换求得。在旋转过程中,规定逆时针方向为正,顺时针方向为负。 设定基准点为原点, 像素点P(X0,Y0)时针旋转角度 theata 后坐标变为(x1,y1),其中 alafa 为像素点P与x轴的初始夹角,p为 P 到原点的距离, theate为旋转的角度。

    旋转前后坐标点之间的关系可以用数学公式表示如下:

               

         

              

          需要采用一种方法用整数点位置的灰度值代替非整数位置点的灰度值,这种方法叫做灰度内插。这种代替将不可避免的会造成图像的失真,为了减小灰度内插带来的误差,前人提出了多种插值算法,包括最近邻插值、双线性插值和双三次插值算法等。 最邻近插值算法简单,每一个插值输出像素的值就是在输入图像中与其最邻近的抽样点的值,但是这种算法会造成比较严重的块状效应,即在边缘处出现锯齿。双三次插值是利用像素点P(x,y)周围 4× 4 个像素点的灰度值按照三次多项式进行内插,算法精确度很高, 效果好, 处理后的图像非常平滑,但运算量大,不大适合实时处理,实际中较少采用。双线性插值综合了上述两种方法的优劣,只利用P(x,y)周围4个点的灰度值进行内插,既保证了图像的质量,又兼顾了计算量,可以运用到实时图像处理中。所以,本x项目在图像旋转过程中采用的是双线性插值算法对图像进行内插。假设 P(x1,y1) 为旋转后的坐标点,其他四个点为围绕着点 的四个整数像素点,如下图:

                        

               




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

数字图象处理之二维码图像提取算法(六) 的相关文章

  • 图像处理——滤波器的比较

    滤波器 方框滤波 boxFilter 均值滤波 blur 高斯滤波 GaussianBlur 中值滤波 medianBlur 线性滤波器 线性滤波器经常用于剔除输入信号中不想要的频率或者从许多频率中选择一个想要的频率 常见的有 低通 高通
  • linux命令 chmod 755的含义 及drwxr-xr-x 的含义

    linux drwxr xr x 第一位表示文件类型 d是目录文件 l是链接文件 是普通文件 p是管道 第2 4位表示这个文件的属主拥有的权限 r是读 w是写 x是执行 第5 7位表示和这个文件属主所在同一个组的用户所具有的权限 第8 10
  • docker 安装node

    docker 安装node 1 使用docker安装node 使用docker安装 docker pull node 拉取镜像 docker run id name c node node 创建容器 可以看到已经装好了 启动node doc
  • Linux系统编程-C++ I/O库

    文章目录 一 总述 二 输出缓冲 三 文件输入输出 四 string流 五 输入输出格式 总述 1 控制布尔值的格式 2 指定整型值的进制 3 在输出中指出进制 4 控制浮点数格式 4 1 指定打印精度 5 输出空白 六 未格式化的输入输出
  • java 数组中存储26个英文字母_利用数组打印26个英文字母

    可以考虑下面两种程序 1 public class Letter public static void main String args for char c a c lt z c System out print c 2 class AB
  • 如何实现一个定时器?看这一篇就够了

    本文主要介绍定时器作用 实现定时器数据结构选取 并详细介绍了跳表 红黑树 时间轮实现定时器的思路和方法 定时器作用 定时器在各种场景都需要用到 比如游戏的Buff实现 Redis中的过期任务 Linux中的定时任务等等 顾名思义 定时器的主
  • Qt常用部件介绍

    这里先给大家介绍 Designer 界面设计器 中例举的常用部件 以便对 Qt 的部件有一定认识 其具体用法后面再作介绍 布局管理组 Layouts 空间间隔组 弹簧 Spacers 按钮组 buttons 项目视图组 Item Views
  • 设计模式深入浅出--21.命令模式简单实例及其在JDK中的应用

    命令模式 定义 将 请求 封装成对象 以便使用不同的请求 命令模式解决了应用程序中对象的职责以及它们之间的通信方式 类型 行为型 适用场景 请求调用者和请求接收者需要解耦 使得调用者和接收者不直接交互 需要抽象出等待执行的行为 优点 降低解

随机推荐

  • 数据表格(QTableWidget)

    一 简介 QTableWidget是QT对话框设计中常用的显示数据表格的控件 QTableWidget单元格数据是QTableWidgetItem对象来实现的 整个表格都需要用逐个单元格对象QTableWidgetItem构建起来 二 详解
  • Presto 与 Hive 语法学习

    Presto 与 Hive 语法学习 文章目录 Presto 与 Hive 语法学习 1 Presto语法 1 1 数据类型 布尔值 整数 浮点 固定精度 字符串 日期和时间 结构 网络地址 UUID HyperLogLog KHyperL
  • muduo1——编程风格:面向对象的编程和基于对象的编程(上)

    muduo库其实不是面向对象的编程 而是基于对象的编程 那么在进入正式的muduo源码分析之前 先来看看这两种编程风格 一 面向对象编程风格 通过对一个线程类的封装来进行讲解 Thread是一个抽象类不能实例化对象 TestThread是派
  • Hp DL380服务器瘫痪如何恢复服务器数据(多图)

    服务器数据恢复故障简介 需要进行数据恢复的是一台HP DL380服务器 三块300GSAS硬盘组成raid阵列 磁盘故障导致整个RAID组瘫痪 其中一块硬盘状态灯为红色 数据库存储在D分区 备份存储在E分区 存储故障 造成D分区不可识别 E
  • Python 关键字global全局变量详解

    变量作用域 一般在函数体外定义的变量成为全局变量 在函数内部定义的变量称为局部变量 全局变量所有作用域都可用 局部变量只能在本函数可用 变量的使用顺序是 局部变量 gt 全局变量 也就是说 优先使用局部变量 那么问题来了 如果想在函数内使用
  • LabVIEW心率监测装置

    LabVIEW大作业 LabVIEW心率采集装置 本设计为我的LabVIEW课程大作业 利用proteus实验仿真软件设计一个了基于stc12c5a单片机的心率采集系统 并在PC机上的Windows环境下利用LabVIEW软件实现心率数据的
  • 开开心心带你学习MySQL数据库之节尾篇下

    真的勇士 那就是看清生活的真相之后 依然热爱生活 罗曼 罗兰 JDBC编程的基本工作 准备工作 1 下载 mysql驱动包 maven 中央仓库 2 导入到项目中复制到项目目录下 标志为 library 编写代码 1 创建数据源 描述数据库
  • (.htaccess文件和.user.ini文件)[SUCTF 2019]CheckIn1

    打开靶机 提交一个一句话木马文件 图片马 显示上传成功 但是使用蚁剑连接返回为空 再使用 htaccess文件绕过 参考博主原文链接 https blog csdn net m0 64444909 article details 12489
  • 设置ImageButton的点击效果

    我要设置一个ImageButton的点击效果 普通状态背景透明 按下状态有一个背景图 src是一个图片 如下所示
  • 解决.net中使用gmail.com邮箱进行Smtp发送信件时失败的问题

    我经常使用免费的gmail com邮箱 因为它容量较大 但我们在使用 net编程实现邮件发送时 常会出现我们意想不到的错误 最常见的就是 1 The operation has timed out 2 出现类似提示 The SMTP ser
  • QT编写的数字键盘

    https download csdn net download qq 20189555 88001237
  • MySQL数据同步到 Redis 缓存的几种方法

    本文主要介绍了浅谈MySQL数据同步到 Redis 缓存的几种方法 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着微点阅读小编来一起学习学习吧 1 Mysql查完数据 再同步写入到Redis
  • 网络安全这玩意儿真不建议一般人学...

    前言 作为一名5年网安工程师老菜鸟来说 我实在想不通 开发岗位那么多 为什么要来学网安 在这里怕是要给准备入坑的同学泼盆冷水了 网络安全这东西真不建议一般人学 基础确实很简单 是个人稍微认点真都能懂 这就是好多人说的网络安全简单 易懂 好学
  • iostat命令详解&指标分析

    Iostat iostat命令用于监视系统CPU和I O设备负载 常用方法 iostat x 1 12 检测系统的io状态 每一秒刷新一次 一共刷新12次 x该选项显示和io相关的扩展数据 还可以使用 k或者 m选项以按照kb或MB显示单位
  • FastDFS单机版环境搭建

    1 搭建环境 ubuntu 2 gcc g 编译器 ubuntu平台在线安装指令 1 apt get install gcc 2 apt get install g 3 apt get install build essential 4 a
  • 1.阅读《疯狂Java讲义》

    从2000年至今 Java语言一直是应用最广的开发语言 并拥有最广泛的开发人群 如今 java已经不再简单地是一门语言 它更像一个完整的体系 一个系统的开发平台 更甚至 它被延伸成一种开源精神 如何学习java 程序的作用是 解决问题 如果
  • C/C++命名规范-C语言基础

    这一篇文章想要介绍的是编写代码的时候业界比较常用的一些命名规范 以及个人平时的一些命名规范 涉及 驼峰命名法 下划线命名法 帕斯卡命名法 匈牙利命名法 的介绍和见解 属于C语言基础篇 持续更新 刚刚开始学习编程的时候 我的第一个老师便强调过
  • APP UI结构-首页功能点大集锦,很干很详细

    APP UI结构的系列的文章有一段时间没有更新了 因为最近在学一些新东西和看一些新书籍 适当的给自己充电也是为了更好的输出 言归正传 今天想跟大家聊的是和首页相关的一些内容 可能有些内容最近有的小伙伴已经更新过了 相信大家也看见了 比如导航
  • fisco bcos应用开发(一) springboot报错 Error reading resource

    问题描述 解决办法 原因 因为导出的项目没有sm这个文件夹 他去找去了 肯定找不到啊 这个问题当时卡了我一天 希望兄弟们能快速的解决 解决了来给我点赞 没解决算求了
  • 数字图象处理之二维码图像提取算法(六)

    整体的框图如下所示 Hough 变换是图像空间和参数空间之间的一种变换 利用点与线的对偶性 将原始图像空间的给定曲线变为参数空间的一个点 这样直线的检测就变为参数空间中峰值的检测 接下来来了解一下霍夫变换 可以证明 直角坐标系p 0中的一条