数字图像处理——亚像素边缘的轮廓提取

像素

像素是图像处理中的基本单位,一个像素是图像中最小的离散化单位,具有特定的位置和颜色信息。在数字图像中,每个像素都有一个特定的坐标,通常以行和列的形式表示。每个像素的颜色信息可以通过不同的表示方式,如灰度或RGB(红绿蓝)颜色模型来表示。在灰度图像中,每个像素只包含亮度信息,而在RGB图像中,每个像素包含红、绿、蓝三个颜色通道的信息。
原图:
在这里插入图片描述
放大后可以看到像素的排列:
在这里插入图片描述
分辨率是通过图像中的像素数量来描述的,通常以水平像素数和垂直像素数表示(例如,1920x1080表示水平有1920个像素,垂直有1080个像素)。更高的分辨率通常表示图像有更多的细节。

在面阵相机中,感光元件(如CCD或CMOS传感器)捕捉到的光信号通过模数转换被转换成数字值,这些数字值被映射到图像中的像素。这个离散化的过程允许以数字形式存储和处理图像,使得计算机可以对图像进行分析、编辑和显示。

假设CMOS摄像芯片像素间距为5.2微米。当摄像机捕捉物理世界中连续的图像时,这些图像经过离散化处理,即被分成离散的像素。每个成像面上的像素点在宏观上看似连续,代表了其附近的颜色或亮度。尽管在宏观尺度上两个相邻像素之间的距离为5.2微米,但在微观尺度上,认识到它们之间可能存在更小的结构或信息,通过在两个物理像素之间引入虚拟像素,从而更细致地描述图像中的变化,这个虚拟引入的像素被称之为亚像素。

亚像素

亚像素是在数字成像领域,由于物理上已经无法在相邻像素之间增加更多实际的感光单元,通过插值算法引入虚拟像素以在图像中提高测量的精度。

插值是一种通过已知数据点来估算未知位置的方法。在图像处理中,二次或多次插值算法可以在相邻像素的位置之间插入虚拟像素,从而得到更丰富和细致的图像信息。这些虚拟像素的值是通过对相邻实际像素值的计算获得的。

常见的插值算法包括双线性插值、双三次插值等。这些算法通过考虑相邻像素之间的灰度或颜色变化,以及它们的空间关系,生成更精确的图像表示。通过引入亚像素,可以在图像中捕捉到更多的细节,提高测量的精度。
方点是物理像素,圆点为引入虚拟的亚像素:
在这里插入图片描述
亚像素精度在对相邻物理像素之间间隔进行更细致划分的程度。这一精度通常通过将相邻像素间隔分成二等分、三等分、四等分等来实现。例如,考虑一张5×5像素的图像,如果将相邻像素的间隔划分为四等分,就相当于创建了一个16×16的离散点阵。在这个点阵中,大正方形的点表示物理像素,而小点表示新生成的亚像素。

这种细分允许在更精细的层面上表示图像,为进行插值运算提供了更多的数据点。在实际应用中,现代机器视觉组件已经能够可靠估算至1/25的亚像素精度。这意味着系统能够以相当高的准确度测量图像中的细微特征,为各种应用领域,包括目标跟踪、图像识别和计算机视觉任务,提供更可靠的性能。高亚像素精度有助于系统更精确地捕捉和处理图像细节,提高整体性能水平。

基于亚像素的边缘检测

边缘检测

图像中的目标边缘是由一组相连的像素组成的,这些像素位于灰度不连续的两个区域的交界处。目标边缘是图像中基本的特征之一,通常表现为灰度的跳变。然而,由于各种噪声的存在,机器视觉系统采集到的图像中,目标边缘处的像素灰度变化通常并非理想的阶跃式跳变,而更倾向于渐进的变化方式。因此,可以使用模型来表示这种渐进变化,如图中所示。
在这里插入图片描述
在大多数情况下,基于图像自身的像素分辨率,可以找到满足机器视觉检测需求的边缘点位置。然而,在一些特殊情况下,由于传感器尺寸或成本的限制,即使相机系统的镜头与传感器匹配并且光照条件较好,采集到的图像可能很难满足对最小分辨率的需求。在这种情况下,可以采用亚像素(subpixel)边缘定位方法,以提高边缘点位置的准确度。

亚像素边缘检测

处理图像的过程中,首先进行像素级边缘提取,然后利用曲面拟合来提取亚像素级别的边缘。为了抵抗噪声,对数据进行平滑处理,接着通过梯度图像中的边缘点梯度方向,找到亚像素级别的最大值,这一最大值通常位于梯度方向所在的直线上。通过曲面拟合,将拟合后的曲面与梯度方向所在的直线相交,然后求解这些交点的极值,就能得到该点的亚像素级别的表示。这一过程有助于提高对图像边缘的精确定位,特别是在面临噪声和低分辨率图像的情况下。

像素级边缘:
在这里插入图片描述
亚像素级边缘:
在这里插入图片描述

计算方法

给定一组离散值,设观测到的极值点位置为 x,其对应的值为 f(x),而其左右相邻位置的值分别为 f(x-1) 和 f(x+1)。真实的极值点位置为 x+δ,令 δ^ 为 δ 的估计值。假设 x 的邻域可以通过某个模型进行近似,比如高斯近似或抛物线近似,那么可以根据 x 的邻域信息,利用模型对极值进行估计。

高斯近似
高斯近似一维高斯函数 y = y m a x ⋅ e x p ( − ( x − μ ) 2 2 σ 2 ) y=y_{m a x}\cdot e x p(-{\frac{(x-\mu)^{2}}{2\sigma^{2}}}) y=ymaxexp(2σ2(xμ)2) y m a z = 1 2 σ π y_{m a z}={\frac{1}{\sqrt{2\sigma\pi}}} ymaz=2σπ 1 时:

在这里插入图片描述
假设x邻域可用高斯近似,用 (x,f(x))、 (x−1,f(x−1))、 (x+1,f(x+1))三点对高斯函数进行拟合,获得模型参数μ即为峰值位置, δ ^ = μ − x {\hat{\delta}}=\mu-x δ^=μx 时,将三点带入上面的高斯函数两边同时取对数求得:

δ ^ = 1 2 ln ⁡ ( f ( x − 1 ) ) − ln ⁡ ( f ( x + 1 ) ) ln ⁡ ( f ( x − 1 ) ) − 2 ln ⁡ ( f ( x ) ) + ln ⁡ ( f ( x + 1 ) ) {\hat{\delta}}={\frac{1}{2}}{\frac{\ln(f(x-1))-\ln(f(x+1))}{\ln(f(x-1))-2\ln(f(x))+\ln(f(x+1))}} δ^=21ln(f(x1))2ln(f(x))+ln(f(x+1))ln(f(x1))ln(f(x+1))

线性插值

假设在极值两侧是线性增长和线性下降的,且上升和下降的速度相同,即y=kx+b,上升侧k>0,下降侧k<0,两者绝对值相同,可以利用这个性质求解极值位置。若f(x+1)>f(x−1)则极值位于 (x,x+1)之间,可列等式:

f ( x ) − f ( x − 1 ) x − ( x − 1 ) = f ( x + δ ) − f ( x ) x + δ − x = f ( x + δ ) − f ( x + 1 ) x + 1 − ( x + δ ) {\frac{f(x)-f(x-1)}{x-(x-1)}}={\frac{f(x+\delta)-f(x)}{x+\delta-x}}={\frac{f(x+\delta)-f(x+1)}{x+1-(x+\delta)}} x(x1)f(x)f(x1)=x+δxf(x+δ)f(x)=x+1(x+δ)f(x+δ)f(x+1)

可示得:

δ ^ = 1 2 f ( x + 1 ) − f ( x − 1 ) f ( x ) − f ( x − 1 ) {\hat{\delta}}={\frac{1}{2}}{\frac{f(x+1)-f(x-1)}{f(x)-f(x-1)}} δ^=21f(x)f(x1)f(x+1)f(x1)

下图中蓝色点即为插值出来的边缘点:
在这里插入图片描述

亚像素边缘检测的注意事项

摄像机几何标定的重要性: 若未对摄像机进行几何标定,即确定摄像机的内部和外部参数,对图像进行亚像素级准确度的边缘提取将毫无意义。摄像机的畸变和偏移可能导致边缘位置的偏差,尤其是在边缘位置偏移多个像素的情况下,这对于需要高精度测量的应用来说是不可接受的。

图像透视失真的影响: 由于摄像机不垂直于被测物体,可能产生图像透视失真。通过进行摄像机标定,明确摄像机内外参数,可以将图像中的测量结果转换为世界坐标上的测量结果,从而校正透视失真引入的影响。

随着对精度要求的不断提高,提高硬件分辨率是一种直接的方法,但这往往伴随着昂贵的代价。亚像素技术的应用成为解决这一问题的关键方法,因为它能够在相同或更高级别的硬件水平下实现更高的精度。该技术通过进行摄像机几何标定以及处理透视失真等步骤,弥补硬件分辨率不足的缺陷,使得在相同硬件水平下也能获得更高的测量和配准精度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/585689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MongoDB Certified Associate Developer 认证考试心得

介绍 前段时间通过了 MongoDB Associate Developer 考试&#xff0c;也记下了一些心得&#xff0c;结果忘记发出来了&#xff0c;现在重新整理下。通过考试后证书是这样的: MongoDB 目前有两个认证证书 1. MongoDB Associate Developer 认证掌握使用MongoDB 来构建现代应用…

苹果电脑Dock栏优化软件 mac功能亮点

hyperdock mac是一款Dock优化软件&#xff0c;hyperdock支持使用窗口自动排列功能&#xff0c;您可以直接通过将窗口拖拉至屏幕上方来快速最大化至全屏&#xff0c;又或者拖动到左右来进行左分屏和右分屏。而且Dock优化软件还有一个特色便是对Dock的强大管理哪里能力&#xff0…

《C++PrimerPlus》第13章 类继承

13.1 一个简单的基类 基类和派生类示例&#xff08;球会会员管理&#xff09; 头文件tabtenn1.h #ifndef __TABTENN1_H__ #define __TABTENN1_H__#include <iostream> #include <string>using namespace std;class TableTennisPlayer {private:string firstname;…

RS-485 RS-232 RS-422 区别和理解

RS-485&#xff0c;RS-232&#xff0c;RS-422区别和理解 目录概述需求&#xff1a; 设计思路实现思路分析1.概述2.区别 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a b…

【MySQL】数据库之存储过程(“SQL语句的脚本“)

目录 一、什么是存储过程&#xff1f; 二、存储过程的作用 三、如何创建、调用、查看、删除、修改存储过程 四、存储过程的参数&#xff08;输入参数&#xff0c;输出参数&#xff0c;输入输出参数&#xff09; 第一种&#xff1a;输入参数 第二种&#xff1a;输出参数 …

利用 IntelliJ IDEA 整合 GitHub 实现项目版本控制与协作管理

目录 前言1 设置GitHub登录账号2 将项目分享到GitHub3 IntelliJ IDEA 中导入Github项目4 往GitHub推送代码4.1 Commit Change&#xff08;提交到本地库&#xff09;4.2 Git -> Repository -> Push&#xff08;推送到远程库&#xff09; 5 拉取远程库代码到本地6 克隆远程…

Android MVC 写法

前言 Model&#xff1a;负责数据逻辑 View&#xff1a;负责视图逻辑 Controller&#xff1a;负责业务逻辑 持有关系&#xff1a; 1、View 持有 Controller 2、Controller 持有 Model 3、Model 持有 View 辅助工具&#xff1a;ViewBinding 执行流程&#xff1a;View >…

Ubuntu22.04系统安装软件、显卡驱动、cuda、cudnn、pytorch

Ubuntu22.04系统安装软件、显卡驱动、cuda、cudnn、pytorch 安装 Nvidia 显卡驱动安装 CUDA安装 cuDNN安装 VSCode安装 Anaconda 并更换源在虚拟环境中安装 GPU 版本的 PyTorchReference 这篇博文主要介绍的是 Ubuntu22.04 系统中软件、显卡驱动、cuda、cudnn、pytorch 等软件和…

STM32CubeMX教程8 TIM 通用定时器 - 输出比较

目录 1、准备材料 2、实验目标 3、实验流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.1、时钟树配置 3.1.2、外设参数配置 3.1.3、外设中断配置 3.2、生成代码 3.2.1、外设初始化函数调用流程 3.2.2、外设中断函数调用流程 3.2.3、添加其他必要代码 4、常用函数 5…

轮廓检测与处理

轮廓检测 先将图像转换成二值 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图 ret, thresh cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 变为二值&#xff0c;大于127置为255&#xff0c;小于100置为0.使用cv2.findContours(thresh, cv2.RETR_TREE, cv2.…

jvm实战之-常用jvm命令的使用

各命令的使用 JMAP 1、查看内存信息&#xff0c;对象实例数、对象占有大小 jmap -histo 进程号>./log.txt2、查看堆的配置信息和使用情况 jmap - heap 进程号3、将堆的快照信息dump下来&#xff0c;使用java自带的jvisualvm.exe打开分析 jmap -dump:formatb,filedump.h…

Elasticsearch:升级索引以使用 ELSER 最新的模型

在此 notebook 中&#xff0c;我们将看到有关如何使用 Reindex API 将索引升级到 ELSER 模型 .elser_model_2 的示例。 注意&#xff1a;或者&#xff0c;你也可以通过 update_by_query 来更新索引以使用 ELSER。 在本笔记本中&#xff0c;我们将看到使用 Reindex API 的示例。…

二叉树之堆的应用

目录 堆排序 思路详解 Ⅰ 建堆 Ⅱ 利用堆的删除思想来进行排序 功能接口 向上调整算法 向下调整算法 主函数 运行结果展示 TOP - K问题 思路详解 Ⅰ 用数据集合中前K个元素来建堆 Ⅱ 用剩余的N-K个元素依次与堆顶元素来比较&#xff0c;不满足则替换堆顶元素 功…

算法刷题:最大异或对(Trie树扩展)、食物链(并查集扩展)

目录 引言一、最大异或对&#xff08;Trie树扩展&#xff09;1.题目描述2.解题思路3.代码实现4.测试 二、食物链&#xff08;并查集扩展&#xff09;1.题目描述2.解题思路3.代码实现4.测试 引言 这两个扩展题能够让我们更加的熟悉Trie树和并查集的使用&#xff0c;这两道题可以…

MySQL:子查询

子查询 子查询是嵌套在较大查询中的 SQL 查询&#xff0c;也称内部查询或内部选择&#xff0c;包含子查询的语句也称为外部查询或外部选择。简单来说&#xff0c;子查询就是指将一个 select 查询&#xff08;子查询&#xff09;的结果作为另一个 SQL 语句&#xff08;主查询&a…

Leetcode的AC指南 —— 哈希法/双指针:15. 三数之和

摘要&#xff1a; Leetcode的AC指南 —— 15. 三数之和。题目介绍&#xff1a;给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且…

Android—— MIPI屏调试

一、实现步骤 1、在kernel/arch/arm/boot/dts/lcd-box.dtsi文件中打开&dsi0节点&#xff0c;关闭其他显示面板接口&#xff08;&edp_panel、&lvds_panel&#xff09; --- a/kernel/arch/arm/boot/dts/lcd-box.dtsib/kernel/arch/arm/boot/dts/lcd-box.dtsi-5,14 …

水库大坝安全监测设计与施工经验

随着我国的科技水平不断上升&#xff0c;带动了我国的水电建设向更高层次发展。目前&#xff0c;我国的水电站大坝已有上百座&#xff0c;并且大坝安全检测仪器质量与先进技术不断更新发展&#xff0c;如今水电站大坝数据信息采集与观测资料分析&#xff0c;能够有效提高水库大…

Linux系统安装MySQL

Linux系统安装MySQL 第一步&#xff1a;下载YUM wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm第二步&#xff1a;安装MySQL的YUM 仓库 rpm -ivh mysql57-community-release-el7-11.noarch.rpm第三步&#xff1a;查看MySQL版本 yum repolist …

ESP32:整合存储配网信息和MQTT笔记

文章目录 1.给LED和KEY的所用IO增加配置项1.1 增加配置文件1.2 修改相应的c源码 2. 把mqtt\tcp的工程整合到一起2.1 在何处调用 mqtt_app_start() 3. 测试MQTT4. 完整的工程源码 有一段时间没有玩ESP32&#xff0c;很多知识点都忘记了。今天测试一下MQTT&#xff0c;做个笔记。…