数字图像处理基础-用通俗语言进行超详细的总结
目录
图像感知与获取
韦伯定理
马赫带效应
图像获取
图像的采样和量化
图像内插(重采样)
图像的表示与描述
像素间的关系
exercise:4-邻域连通区域标记
本文章讲解数字图像处理的基础,大部分内容来源于课堂笔记中
图像感知与获取
人眼解剖图

屈光系统:光线由一种介质进入另一种不同折射率的介质时,会发生前进方向的改变,在眼光学中成“屈光”,屈光系统由角膜、房水、晶状体、玻璃体构成
感光系统:视网膜
视觉形成过程:物体(发射,反射)--->人眼屈光媒质--->感光细胞(视锥细胞、视杆细胞)--->感光细胞外节的光敏色素吸收光子后分解放出的能量形成膜电位发出信号--->通过突触传递给双极细胞和水平细胞,它们将信号作进一步处理后,传递给神经节细胞---->大脑皮层--->识别并产生视觉
视杆细胞:视网膜表面,负责黑白视觉,对光线的敏感程度非常敏感,主要用于暗视觉,左右人的夜视能力;对色彩没有感觉
视锥细胞:视网膜中央凹中间部分,对颜色高度敏感,具有三种类型:红色、绿色、蓝色感光细胞。常见色盲原因:其中一种视锥细胞发育出现问题
人眼聚焦:睫状体中的纤维根据目标远近,会压扁或加厚晶状体,从而改变焦距
韦伯定理
韦伯定理指出:差别阈限和标准刺激的强度成正比,并且差别阈限和标准刺激的比例是一个常数
以视觉为例,如果你在一个相对暗的房间中看到了两个光源,其中一个比另一个更亮,那么你可能会轻松地注意到它们之间的差别。但如果你在一个非常明亮的环境中,两个光源的强度差异需要更大才能被感知到相同的程度。这就是韦伯定律的体现:感知到的差别阈限与刺激强度成比例
然而,对于不同的感知系统、不同的感官以及不同的实验条件,韦伯比可能会略有变化。韦伯比大说明感知系统相对较不敏感,需要更大的刺激变化才能产生可察觉的差异。相反,韦伯比小说明感知系统相对较敏感,较小的刺激变化就足以引起可察觉的差异
马赫带效应
马赫带是一种主观的边缘对比效应。当观察两块亮度不同的区域时,边界处亮度对比加强,使轮廓表现得特别明显


马赫带效应的出现是人类的视觉系统造成的。生理学对马赫带效应的解释是:人类的视觉系统有增强边缘对比度的机制
图像获取
图像获取指的是将物体成像的过程,由“照射”源和形成图像的“场景”元素对光能的反射或吸收而产生的
图像获取主要有三种方式:使用单个传感器获取图像、使用条带传感器获取图像、使用传感器阵列获取图像
阵列传感器CCD

图像的采样和量化
图像采样是指从连续的图像中获取离散的样本或数据点的过程。想象一张图像是由无数个像素组成的,像素是图像中最小的单元。采样即是在图像中选取部分像素以表示整个图像。采样过程决定了图像的分辨率。高分辨率图像具有更多的像素,可以呈现更多的细节;低分辨率图像则只包含少量像素,细节较少

图像量化是指将采样得到的图像数据转换为离散的数值表示的过程。数字图像中的每个像素需要用数字来表示。这个过程就是量化。常见的是将图像的亮度范围映射为数字值。例如,如果是灰度图像,可能使用 0 到 255 之间的整数来表示像素的灰度级别。0代表黑色,255代表白色

通俗地说,采样就像是用相机拍照,而量化则是将照片上的颜色和亮度转换成数字。采样决定了图像的清晰度和细节程度,量化则决定了图像的色彩和亮度等方面的表现
动态范围:描述了一张图片中最暗的地方到最亮的地方的亮度差异。想象一下你站在一个夏日的海滩上,太阳光照在沙滩上,海水里可能有一些阴影。动态范围就是指能在同一张照片中捕捉到这个阳光下明亮的沙滩和海水中较暗的阴影的能力
比如8比特的灰度图像,下述k=8

饱和度:图像中颜色的强度或纯度。高饱和度表示颜色非常鲜艳、明亮,而低饱和度则使颜色看起来更灰淡或淡淡的。想象一下一个色彩斑斓的花园照片,高饱和度可能使得花朵的颜色非常生动,而低饱和度则可能导致花色看起来更为柔和和淡雅
对比度:图像中亮和暗之间的差异程度。高对比度的图像中,明暗之间的差异非常明显,而低对比度的图像则使得明暗过渡更为平缓。想象一下一张黑白照片,高对比度可能导致清晰的黑白分界线,而低对比度则可能使得灰度变化更为平缓
均匀量化:将数据范围均匀地划分为若干个区间,然后将每个区间映射到一个离散值
非均匀量化:可以根据数据的分布情况不均匀地划分区间。这样可以更灵活地对图像进行量化,使得对图像中某些区域的细节更加敏感
空间分辨率:是指遥感图像上能够详细区分的最小单元的尺寸或大小,是用来表征影像分辨地面目标细节的指标
灰度分辨率:涉及到图像中可见的不同灰度层次或颜色层次的数量,比如8位灰度深度意味着256个不同的灰度级别

图像内插(重采样)
下采样/缩小图片:行列删除
上采样/放大图片:创建新的像素位置,对新位置上的像素赋值
针对图像内插,下面介绍三种不同的插值方法:
最近邻插值:把原图中最近邻的灰度赋给每个新像素

这种方法的优缺点很明显,优点就是实现简单、速度快,缺点就是容易产生马赛克效应
双线性插值:其核心思想是在两个方向分别进行一次线性插值


大致原理:分别在Q12Q22、Q11Q21的连线上,通过最邻近插值按比例算出R2、R1的f值,然后再在R1R2的连线上同理算出P的f值
优点: 比最近邻插值效果好,没有明显的块效应
缺点: 计算量比最近邻插值大,使图像细节退化
双三次插值使用16个邻近像素的灰度值进行插值计算,采用二次多项式的插值方法。这样可以更好地保留图像的细节,并减少缩放操作引入的伪影和失真

图像的表示与描述
图像一般用二维矩阵表示,矩阵元素 f (m, n)表示图像在第 m 行 第 n 列的像素值,称为像素

坐标索引
为了编程方便起见,在图像的描述中,我们以矩阵坐标系来定义图像的坐标

对于灰度图像,图像中每个像素信息由一个量化的灰度级描述,没有色彩信息,灰度图像的灰度级常为8bits,即0--255,0位纯黑,255位纯白
还有一种图像叫做二值图像或者是黑白图像,其只有两种像素值,要么纯黑,要么纯白

可以通过对灰度图像二值化变成黑白图像,变成黑白图像的图片,可通过分析图像连通区域估计一些东西的数量(比如统计下面米粒的数量)

像素间的关系
像素与像素之间的关系:
邻接:通常,如果像素在水平、垂直或对角线方向上相邻叫邻接
连接:通常指的是一组相邻的像素,它们在某种意义上被视为一个整体
连通:一组像素被称为连通,如果在这组像素之间存在一条路径,使得路径上的相邻像素之间也是相邻的。连通性通常用于描述图像中区域的完整性
通路:指的是连接两个像素的路径,这个路径可以通过相邻的像素进行跳跃,也可以是一条像素的序列
像素与集合之间也有上述的邻接、连接、连通关系
像素间的距离有多种定义:
欧式距离DE

曼哈顿距离D4(城区距离)

切比雪夫距离D8(棋盘格距离)

4-邻域(N4(p)) p为像素点的名称

对角邻域/D-邻域(ND(p))

8-邻域(N8(p)):为4-邻域和D-邻域的相加
令V是用于定义邻接的灰度值集合
4-邻接:q在p的4-邻域N4(p)中,且它们都在V中取值,q在N4(p)中意味着p也在N4(q)中
8-邻接:同上,只不过是8-邻域
m-邻接/混合邻接:
1.两个像素p和q在V中取值
2.满足下列条件之一:
•q在N4(p)中,即两个像素p和q是4-邻接;
•q在ND(p)中,且N4(p)和N4(q)在V的意义下是空集,即N4(p)∩N4(r)不包含V中取值的像素

像素间的通路:是指连接两个像素的路径,这个路径可以通过相邻的像素进行跳跃,也可以是一条像素的序列,根据邻接方式不同有4-通路和8-通路
像素间的连通:S表示图像中像素一个子集,如果S中的两个像素p、q之间存在一个完全由S中像素组成的通路,则p和q在S中是连通的,也分为4-连通和8-连通
令R表示图像中像素的一个子集。若R是一个连通集,称R为图像的一个区域
若 Ri和 Rj形成一个连通集时,称 Ri和 Rj为邻接区域
边界:也称为区域的轮廓,是该区域的一个子集,但在其邻域中有不属于该区域的像素,它将该区域与其他区域分开。必须指定所用连接类型才能确定一个像素是否属于边界

比如,上图,如果定义连接类型为8-连接则圈住的1为于赋1值区域的边界,如果定义为4-连接,那么它的4-邻域没有赋1值区域以外的像素,那么它就不是边界了
exercise:4-邻域连通区域标记
4-邻域连通区域标记是图像处理中的一项基本任务,常用于标记图像中具有相同像素值且相邻的区域。下面是一个简单的Python代码示例,使用深度优先搜索(DFS)进行4-邻域连通区域标记:
def dfs(image, row, col, label, visited, connectivity=4):# 4-邻域的相邻像素坐标增量neighbors = [(-1, 0), (0, -1), (0, 1), (1, 0)] if connectivity == 4 else [(-1, 0), (0, -1), (0, 1), (1, 0), (-1, -1), (-1, 1), (1, -1), (1, 1)]# 标记当前像素image[row][col] = labelvisited[row][col] = True# 遍历相邻像素for dr, dc in neighbors:new_row, new_col = row + dr, col + dc# 检查相邻像素是否在图像范围内且未被访问if 0 <= new_row < len(image) and 0 <= new_col < len(image[0]) and not visited[new_row][new_col] and image[new_row][new_col] == 1:dfs(image, new_row, new_col, label, visited, connectivity)def label_connected_regions(image, connectivity=4):rows, cols = len(image), len(image[0])visited = [[False for _ in range(cols)] for _ in range(rows)]label = 0for i in range(rows):for j in range(cols):if not visited[i][j] and image[i][j] == 1:label += 1dfs(image, i, j, label, visited, connectivity)return image# 示例用法
image = [[1, 0, 1, 0],[1, 0, 1, 0],[0, 0, 1, 1],[1, 0, 0, 0]
]result = label_connected_regions(image, connectivity=4)
print(result)
![]()
相关文章:
数字图像处理基础-用通俗语言进行超详细的总结
目录 图像感知与获取 韦伯定理 马赫带效应 图像获取 图像的采样和量化 图像内插(重采样) 图像的表示与描述 像素间的关系 exercise:4-邻域连通区域标记 本文章讲解数字图像处理的基础,大部分内容来源于课堂笔记中 图像感…...
3.3.1详解linux内核链表list_head及其接口应用
文章目录 1 list定义2 list接口2.1 list初始化方法1:定义并初始化链表方法2:先定义再初始化链表2.2 list_add2.3 list_del2.4 list_replace2.5 list_move2.6 list_splice3 list遍历3.1 list_entry3.2 list_first_entry3.3 list_last_entry3.4 list_first_entry_or_null3.5 li…...
发挥云计算潜力:Amazon Lightsail 与 Amazon EC2 的综述
文章作者:Libai 欢迎来到云计算世界,这里有无数的机会和无限的应用程序增长。 在当今的数字时代,企业可能会发现管理基础架构和扩展应用程序具有挑战性。 传统的本地解决方案需要大量的硬件、软件和维护前期投资。 要满足不断增长的需求&…...
【深度学习】卷积神经网络(CNN)
一、引子————边界检测 我们来看一个最简单的例子:“边界检测(edge detection)”,假设我们有这样的一张图片,大小88: 图片中的数字代表该位置的像素值,我们知道,像素值越大&#…...
科普:多领域分布式协同仿真
分布式协同仿真是一种在分布式计算环境中进行协同工作的仿真方法。使用该方法进行协同仿真时,仿真任务将被分发到多个计算节点上,并且这些节点可以同时工作以模拟完整的系统行为。分布式协同仿真已被广泛应用于工程、科学和军事领域,以便更好…...
openstack(2)
目录 块存储服务 安装并配置控制节点 安装并配置一个存储节点 验证操作 封装镜像 上传镜像 块存储服务 安装并配置控制节点 创建数据库 [rootcontroller ~]# mysql -u root -pshg12345 MariaDB [(none)]> CREATE DATABASE cinder; MariaDB [(none)]> GRANT ALL PR…...
Jmeter 压测保姆级入门教程
1、Jmeter本地安装 1.1、下载安装 软件下载地址: https://mirrors.tuna.tsinghua.edu.cn/apache/jmeter/binaries/ 选择一个压缩包下载即可 然后解压缩后进入bin目录直接执行命令jmeter即可启动 1.2 修改语言 默认是英文的,修改中文,点击…...
springboot2.1升级到2.7 actuator丢失部分metrics端点
项目场景: 项目需要升级springboot从2.1升级至2.7 问题描述 发现之前的metrics后面的jvm相关的端口丢了 原因分析: 找到这样一篇博文https://blog.csdn.net/CL_YD/article/details/120309094,这篇博文意思是对的,但是写的不太好…...
梦开始的地方——Adobe Premiere Pro
今天,我们来说说一款老生常谈的相信也是很多人都经常迫切需要的软件。Adobe Premiere Pro,简称Pr,是由Adobe公司开发的一款视频编辑软件。 Premiere Pro是视频编辑爱好者和专业人士必不可少的视频编辑工具。它可以提升您的创作能力和创作自由…...
Nginx同时支持Http和Https的配置详解
当配置Nginx同时支持HTTP和HTTPS时,需要进行以下步骤: 安装和配置SSL证书: 获得SSL证书:从可信任的证书颁发机构(CA)或使用自签名证书创建SSL证书。 将证书和私钥保存到服务器:将SSL证书和私钥…...
3.2 Windows驱动开发:内核CR3切换读写内存
CR3是一种控制寄存器,它是CPU中的一个专用寄存器,用于存储当前进程的页目录表的物理地址。在x86体系结构中,虚拟地址的翻译过程需要借助页表来完成。页表是由页目录表和页表组成的,页目录表存储了页表的物理地址,而页表…...
基于springBoot+Vue的停车管理系统
开发环境 IDEA JDK1.8 MySQL8.0Node 系统简介 本项目为前后端分离项目,前端使用vue,后端使用SpringBoot开发,主要的功能有用户管理,停车场管理,充值收费,用户可以注册登录系统,自主充值和预…...
ES开启安全认证
elasticsearch开启安全认证步骤 1.创建证书 进入到es主目录下执行 ./bin/elasticsearch-certutil ca Elasticsearch开启安全认证详细步骤 第一个证书名称默认,直接回车 第二个输入密码,直接回车 完成后会生成一个文件:elastic-stack-ca.p12…...
CS5511规格书|CS5511方案应用说明|DP转双路LVDS/eDP芯片方案
概述:CS5511是一个将DP/eDP输入转换为LVDS信号的桥接芯片,此外,CS5511可以用作在DP/eDP输入到DP/eDP输出场景中桥接芯片。CS5511的高级接收器支持VEDA DisplayPort(DP)1.3和嵌入式DisplayPort(eDP…...
JAVA小游戏“飞翔的小鸟”
第一步是创建项目 项目名自拟 第二步创建个包名 来规范class 再创建一个包 来存储照片 如下: package game; import java.awt.*; import javax.swing.*; import javax.imageio.ImageIO;public class Bird {Image image;int x,y;int width,height;int size;doubl…...
1410. HTML 实体解析器 --力扣 --JAVA
题目 「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们对应的字符实体包括: 双引号:字符实体为 " ,对应的字符是 &qu…...
【开源】基于Vue.js的海南旅游景点推荐系统的设计和实现
项目编号: S 023 ,文末获取源码。 \color{red}{项目编号:S023,文末获取源码。} 项目编号:S023,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户端2.2 管理员端 三、系统展示四…...
机器学习【01】相关环境的安装
学习实例 参考资料:联邦学习实战{杨强}https://book.douban.com/subject/35436587/ 项目地址:https://github.com/FederatedAI/Practicing-Federated-Learning/tree/main/chapter03_Python_image_classification 一、环境准备 GPU安装CUDA、cuDNN pytho…...
微服务实战系列之签名Sign
前言 昨日恰逢“小雪”节气,今日寒风如约而至。清晨的马路上,除了洋洋洒洒的落叶,就是熙熙攘攘的上班族。眼看着,暖冬愈明显了,叶子来不及泛黄就告别了树。变化总是在不经意中发生,容不得半刻糊涂。 上集博…...
家用小型洗衣机哪款性价比高?口碑最好迷你洗衣机排行榜
由于我们的内衣、内裤和袜子等等贴身小件衣物的清洁频率比一般的衣物要高。而且,如果我们人工手洗的话,不仅会大大浪费了我们的时间,而且还不能进行对这些贴身的以为进行深层消毒和除菌。这种情况下,就得需要一台专门用于清洗内衣…...
vscode@python语言插件组合@语言服务器插件功能异常排查
文章目录abstractastral系列产品python插件功能配置和异常排查pylancetyabstract vscode中python基础插件和增强插件: Python - Visual Studio Marketplace 支持 Python 语言,并提供 IntelliSense (Pylance)、调试 (Python Debugger)、代码检查、格式化、重构、单元…...
ABAP 与七伤拳
我每次在项目里看到某些 ABAP 写法,脑子里都会蹦出《倚天屠龙记》里的七伤拳。原因不神秘,这门功夫最扎人的地方,不只是威力大,而是练功和出拳的代价会先落回自己身上。公开资料里对七伤拳的描述很一致,它被概括为一门先伤己后伤人的拳法,内力不够、根基不稳时,强行修炼…...
从开发到发布:为你的VS+Qt桌面应用打造完整的国际化工作流(含.ts文件生成、翻译、.qm调用全链路)
从开发到发布:为你的VSQt桌面应用打造完整的国际化工作流 在全球化市场环境下,为桌面应用提供多语言支持已成为产品竞争力的关键要素。对于使用Visual Studio和Qt框架开发的应用程序而言,构建一个从代码编写到最终发布的完整国际化工作流&…...
神经系统与深度学习介绍 学习笔记day1
人工智能基础人工智能是计算机科学的一个分支,主要研究、开发用于模拟、延伸和扩展 人类智能的理论、方法、技术及应用系统等.和很多其他学科不同,人工智能这个 学科的诞生有着明确的标志性事件,就是1956年的达特茅斯(…...
ROS2数据回放分析新选择:用Foxglove Studio离线解析.db3 bag文件(附MCAP转换教程)
ROS2数据离线分析实战:Foxglove Studio高效解析与可视化技巧 机器人开发过程中,数据回放与分析环节往往占据大量时间。当算法在真实环境中运行出现异常时,工程师需要反复查看传感器数据、定位轨迹和系统状态,传统方法要么依赖实时…...
【告别for循环】Java Stream 流式编程精通:从入门到源码级的性能优化
告别冗长的 for 循环,拥抱函数式编程的优雅与高效 前言 自 Java 8 问世以来,Stream API 便成为了 Java 开发者手中一把锋利的利器。它让我们能够以声明式的方式处理集合数据,写出更加简洁、可读、可维护的代码。然而,在实际项目中…...
C语言中的宏定义(#define)
预处理器支持文本宏替换和类函数文本宏替换。 不带参数的宏 形式:#define identifier replacement-list  这是不带参数的宏,也叫 “对象式宏”,作用是做简单的文本替换。 例如: #include <stdio.h>#define INS…...
R语言列表与数据框:数据处理核心技巧
1. R语言中的列表与数据框:从基础到实战作为一名长期使用R进行数据分析的从业者,我深刻理解列表(list)和数据框(data.frame)这两个数据结构在实际工作中的重要性。它们不仅是R语言的核心容器类型,更是数据整理、清洗和分析的基础工具。本文将…...
TensorRT-LLM加速Gemma模型推理:FP8量化与XQA优化实战
1. NVIDIA TensorRT-LLM 加速 Google Gemma 模型推理详解Google 最新推出的 Gemma 系列开源模型,凭借其轻量级设计和卓越性能,正在成为开发者社区的热门选择。作为 Google DeepMind 基于 Gemini 技术打造的新一代模型,Gemma-2B 和 Gemma-7B 两…...
如何在Linux系统上轻松读取Microsoft Access数据库:MDB Tools完整指南
如何在Linux系统上轻松读取Microsoft Access数据库:MDB Tools完整指南 【免费下载链接】mdbtools MDB Tools - Read Access databases on *nix 项目地址: https://gitcode.com/gh_mirrors/md/mdbtools 你是否曾经需要在Linux或macOS系统上处理Microsoft Acce…...
