【图像处理】数字图像处理笔记

news2024/11/18 10:40:37

文章目录

  • 直方图处理
  • 滤波器
  • 图像复原
  • 形态学图像处理
  • 灰度形态学——多使用平坦结构元(SE)【数字图像处理P428
  • 图像分割
    • 1、canny边缘检测【数字图像处理P463】
  • 图像的表征
  • 特征描述子
  • 目标检测
  • 分类器
    • AdaBoost算法——集成学习、迭代算法

直方图处理

1、直方图均衡化

​ 由像素级累积概率密度确定对应的新像素值

2、直方图规定化(直方图匹配)

​ 寻找累计概率密度最相近的像素值作为新像素值

滤波器

1、中值滤波器处理椒盐噪声优于均值滤波

2、拉普拉斯算子-二阶微分锐化:细节增强、孤立点检测

img

3、sobel算子-一阶微分锐化:边沿提取

img

*一阶导与二阶导的异同

(1)一阶导数通常在图像中产生较粗的边缘(2)二阶导数对精细细节,如细线、孤立点和噪声有较强的响应(3)二阶导数在灰度斜坡和灰度令阶过渡处会产生双边缘响应(4)二阶导数的符号可用于确定边缘的过渡是从亮到暗还是从暗到亮。

4、自适应中值滤波-去除椒盐噪声,并且减少模糊失真【数字图像处理P210】

图像复原

1、radon变换(雷登、拉东变换)-由各个方向的投影反变换出原图【数字图像处理P235】【https://wenku.baidu.com/view/9cf5cc650812a21614791711cc7931b765ce7bbd.html】

*投影图像:图像域(x,y)->投影域(rho,theta){一次投影对应一个角度,投影域为二维,多个角度的投影域组合为三维}==一个三维->多个二维

由于rho,theta与x,y在笛卡尔坐标系中均表示直线,有对应的转换关系则->

*反投影:投影域(rho,theta)->图像域(x,y){保证角度不变,一个角度转换一个图层}==多个二维->多个三维->叠加为一个三维

多个不同角度投影图像的叠加得到最终的图像

四、哈尔(haar)小波变换----离散小波变换(DWT)

——图像分解为高频和低频信息,压缩图像并可完美重构还原

https://blog.csdn.net/baidu_27643275/article/details/84826773【小波变换入门----haar小波,1/sqrt(2)】

https://blog.csdn.net/mz5111089/article/details/78316587【Haar小波变换的推演说明,1/2】

img

形态学图像处理

1、孔洞填充

https://blog.csdn.net/du_shuang/article/details/82953444【形态学之孔洞填充】

img

X0是一幅纯黑图像只在孔洞处有一黑点

*缺点:初始点必须已知

2、凸壳——图形内任意两点的连线仍在图形内

3、细化——得到类似骨架【数字图像处理P417】

利用八个结构元对图像进行击中判定得到。类似逐步腐蚀,最后骨架是连续的。

粗化:可以先细化然后求补集得到。

4、骨架——最大圆盘法【数字图像处理P418】

由目标所有内切圆的圆心组成骨架,最终骨架多是断裂的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LsnVQjPG-1671243043180)(H:\普通软件\YoudaoNoteAddin\qqD96877021F28035B50DA58290407A25C\3cc2ec3beadc49a2abf4dec9609f77fb\新文档 2019-08-08 18.43.39_6.jpg)]

5、形态学重建——测地膨胀(标记图像膨胀后再与模板图像求交集最终得到模板图像的一部分)

a、重建开操作【数字图像处理P422】

用结构元B腐蚀原图G后得到的图像作为标记图像F,再用B膨胀F,并与G交集,迭代至F不在变化为止,便可得到G中提取到的信息。

b、填充孔洞【数字图像处理P424】

上为标记图像F,原图I的补集为模板图像,测地膨胀后得到的图求补集得H,H为填充孔洞后的图。H与I的补集的交集为所有孔洞的图像。

c、边界清除——提取边界处的不完全文字

上为标记图像F,原图I为模板图像,操作与a相同,迭代完毕得到边界处文字,与原图求差,便可去掉边界文字。

灰度形态学——多使用平坦结构元(SE)【数字图像处理P428

a、膨胀——取局部最大值

突出亮细节,总体亮度变亮

b、腐蚀——取局部最小值

突出暗细节,总体亮度变暗

c、开运算——先腐蚀后膨胀

去除亮特征,不影响暗细节

d、闭运算——先膨胀后腐蚀

削弱暗特征,不影响亮细节

e、(白)顶帽变换——图像减去其开操作

用于矫正不均匀的光照。

f、(黑)底帽变换——闭操作减去图像

同e。e运用于暗背景上的亮物体,f运用于亮背景上的黑物体。

*二值图像有的全有,这里不一一列举

图像分割

1、canny边缘检测【数字图像处理P463】

a、高斯滤波器平滑图像

b、计算梯度幅值图像和角度图像(sobel算子、Prewitt等)

c、非最大值抑制——去除粗边沿

1)将当前像素的梯度强度与沿正负梯度方向上的两个像素的梯度强度进行比较。

  1. 如果当前像素的梯度强度与另外两个像素的梯度强度相比最大,则该像素点保留为边缘点,否则该像素点将被抑制,即置位0。

在两个相邻像素之间使用线性插值来得到要比较的两个像素梯度强度(上述的两个梯度强度)

P 1 = E + ( N E − E ) ∗ t a n B = ( 1 − t a n B ) E + t a n B ∗ N E P1=E+(NE-E)*tanB=(1-tanB)E+tanB*NE P1=E+(NEE)tanB=(1tanB)E+tanBNE

d、双阈值检测——去除由噪声产生的边缘

如果边缘像素的梯度值高于高阈值,则将其标记为强边缘像素;必定为边缘

如果边缘像素的梯度值小于高阈值并且大于低阈值,则将其标记为弱边缘像素;边缘待定

如果边缘像素的梯度值小于低阈值,则会被抑制。必定不是边缘

e、抑制孤立低阈值点——连接边缘

查看弱边缘像素及其8个邻域像素,只要其中一个为强边缘像素,则该弱边缘点就保留为真实的边缘

2、边缘连接与检测——解决边缘断裂问题【数字图像处理P468】

a、局部处理的边缘连接【468】

将领域内梯度幅值相近、梯度角度相近的两点认为是同一边界连接起来。简单常用

b、用多边形近似连接边缘???【470】

也算较为常用

c、利用霍夫变换的全局处理连接断裂【475】

多用于查找图像中的直线。

找到拟合直线中的所有点后,判定所有非连续点的距离是否小于阈值,若小则连接两点,达到补全缝隙的目的。

3、利用边缘改进的全局阈值处理——利用边缘图像计算阈值:用于关注点在边沿的情况【数字图像处理P484】

首先对图F利用sobel或拉普拉斯获得边缘图;使用阈值分割保留强边缘的二值图像G;G*F=H只保留原图边缘信息;利用H的直方图计算Otsu阈值T;使用T对F进行全局分割。

4、移动平均确定阈值——本质属于局部阈值(用于文档扫描)【数字图像处理P491】

对点A,阈值T=bM,M是A前n点(包含A)灰度的平均值,b为常数可设为0.5。A则根据T进行二值化。

多用于感兴趣的物体尺寸与整个图像尺寸相比较小的情况。

5、多阈值处理——类比Otsu【数字图像处理P487】

类间方差公式变为

只是多了最后一项。两个阈值k1、k2的迭代方法:先定义k1,k2从k1+1增加到255计算类间方差;然后k1加1,循环往复。取类间方差最大对应的k1,k2,如果有多组最大值,则取k的平均。

6、分水岭算法——边界提取【数字图像处理P500】

https://blog.csdn.net/ChangWei_wenzhou/article/details/83583230【分水岭算法的个人理解】

图像的表征

1、图像的各阶矩——零阶矩、一阶矩、二阶矩、(三阶矩)【数字图像处理P542】

零阶矩求面积、一阶矩确定重心、二阶矩确定主方向、二阶矩和三阶矩(其实是归一化后的中心矩,前面的都是原点矩)可以推导出七个不变矩【https://blog.csdn.net/yang6464158/article/details/42459595空间矩算子特征矩一阶矩二阶矩中心矩重心目标方向】

二阶中心距意味着方差,归一化后可用于判定曲线弯曲程度。【https://blog.csdn.net/libing_zeng/article/details/74905378零阶矩、一阶矩、二阶矩、三阶矩】

一个图像可以用不变矩的值来代表,达到图像类别的识别

2、主成分分析重构图像——降维【数字图像处理P547】

该页描述了协方差矩阵各个元素的意义:两个元素间的相关性和单个元素的方差。

特征描述子

  • HOG(梯度方向直方图)特征检测

计算每个像素的梯度图,使用sober算子卷积即可——取88像素作为一个cell,对cell内的像素梯度信息计算其直方图,如角度划分为9个,将cell内所有像素梯度方向为该角度的梯度值累加得到该角度的值,即横坐标为9个梯度的角度,纵坐标为该梯度方向梯度的累加值——然后将这9个累加值排列为一维向量,作为该cell的特征—取去22的cell作为一个black,black为滑窗,步长为一个cell,将4个cell的特征首尾相接串联成136的向量,进行归一化*,即为每个black的特征——滑动全图后,将左右black的特征串联得到的向量即为整幅图片的hog特征——输入SVM进行分类

  • 马氏距离

将各个特征进行归一化,属于标准化后的欧氏距离,方便比较

  • haar(-like)特征

https://blog.csdn.net/u013403054/article/details/78461083【目标检测算法-特征提取之(一)Haar特征】

haar模板单个特征值计算:模板内白色区域像素和-黑色区域像素和

使用最小像素大小的模板(如x1模板为1,2)以步长为1扫描全图,然后单独整数放大模板某一边扫描全图,直到模板与原图一样大。最终得到了该图的x1系列特征。换一个模板则可以得到另一系列特征。

目标检测

  • HOG+SVM或者Haar+AdaBoost检测

都只是分类器,要实现目标检测(如人脸检测):检测框长宽比依据人脸设置,然后按一定比例放大或缩小得到多个尺寸的检测框,将检查框不断滑动,步长固定,逐个识别检测框中的图片是否为人脸。类似RCNN

  • 选择性搜索(Selective Search)——RCNN使用

运用区域生长的方法:将图像分割为多个小块,根据每个小块的特征(纹理等)进行区域的合并,合并的同时得到对应的外界矩形。最终得到一幅图的所有候选框。

  • 传统滑动窗口检测(Sliding Window)

使用设定好的大小尺寸不同的窗口,以设定步长在图中滑动,每个窗口都进行类别检测,扫描全图后便得到最有可能存在目标的框。

缺点:窗口过多,逐个检测,运算量过大;得到的目标框也是固定的,无法适应任意形状的物体。

分类器

AdaBoost算法——集成学习、迭代算法

https://www.cnblogs.com/davidwang456/articles/8927029.html【手把手教你实现一个 AdaBoost】

https://www.cnblogs.com/zyly/p/9410563.html#_label4【第九节、人脸检测之Haar分类器——涉及到AdaBoost级联分类器】

  1. 多个弱分类器(accuracy=0.6~0.8)组合为一个强分类器

  2. 步骤:

    1. 选择最优弱分离器f1。将所有样本的同一个特征(只有一个值)由大到小排序,遍历所有阈值(最大特征与最小特征值之间,阈值为相邻两个特征的一半。如1,2取1.5),以最小分类误差对应的阈值作为该次最优弱分离器。输入:所有样本的某一个特征+标签。中间量:分类误差sigma。输出:最优弱分离器。
    2. 计算分离器权值 α 1 \alpha_1 α1,更新样本权值D。
    3. 同a计算下一个最优弱分离器。循环ab得到设定个数的最优分离器。
    4. 最终的强分离器为 α 1 ∗ f 1 + … … + α n ∗ f n \alpha_1*f_1+……+\alpha_n*f_n α1f1+……+αnfn
  3. 2.a是弱分类器的训练方法。2是强分类器的步骤。即强分类器步骤中包含弱分离器的构造。

  4. 与haar结合进行人脸识别

    1. 强分类器构造:(默认haar特征有78 460个)

      1. 构造78 460个最优分离器,选择分类误差最小的T个特征。

      2. 按2中所述构造T个强分类器

      3. 将T个强分类器进行级联得到最终的分类模型

        1. 级联:将多个强分类器连接成决策树形状。
  • 概率霍夫变换

1、随机选取前景点进行霍夫变换

2、若有点达到最小投票数,则拟合该直线L,并记下此时的点A

3、由该点开始向直线两端搜索剩余前景点中在该直线上的点,对于点线距离较小,且相邻点间距离较小的点,连接为线段。(是一直搜索到图像边缘,找出L上的所有点,即一条L可以得到多个线段)(可以看做:做与L平行的两条线,去除两线间的点)

    • 个别情况,通过霍夫提取大致直线(滤除噪点),由直线周围的点使用最小二乘拟合更加精确的线。
  • Harris角点检测

https://www.cnblogs.com/jiahenhe2/p/7930802.html【Harris角点检测原理详解】

原理:以一个划窗判定滑动前后对应各点的离散程度,即点像素值差值平方和E,各个方向的E都大才行。

具体实施:求出每个点的x和y方向的梯度Ix、Iy,由梯度计算出他们的自相关矩阵M,M的特征值lamda1、2则反映了其在x,y方向的离散程度,lamda越大则认为该方向像素方差越大,即梯度值越大,变化越剧烈,因此lamda1、2都很大,则认为是角点。使用R=det M+k(traceM)^2来评估lamda1与2是否同时大

  • 点线距离计算公式

https://blog.csdn.net/love_phoebe/article/details/81112531【点到线段的距离 计算几何】

  • ZCA白化处理(PCA的进一步处理)
    https://blog.csdn.net/u014061630/article/details/80677071【机器学习中的白化处理】

    • 去除数据中冗余的信息;如图像中的相邻像素具有很强的相关性,则其具有较多的冗余信息。

    • 训练前可作为预处理,减少训练所需数据量。

    • 步骤:

      • PCA降维得到映射矩阵U转置,U是特征向量组成,UX得到新坐标系下的坐标X1;

      • 对坐标进行标准差归一化X2=X1/std(X1),使得各维度坐标范围一致;

      • 再映射回原空间,映射矩阵为U,得到最终的结果。

      • 注:U还是U转置不必计较,只知道他们是转置(逆)关系即可。

        • 归一化/标准化:原数据-均值/标准差。使数据满足正态分布,均值为0,标准差为1。这里因为只需要设定范围,则没有减均值。

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

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

相关文章

ARM处理器概论

目录 一、ARM处理器概述 1.ARM的含义 2.ARM公司 3.主流的两种处理器 RISC处理器(精简指令集) CISC处理器(复杂指令集) 4.SOC 二、ARM指令集概述 1.指令与指令集 指令 指令集 2.ARM指令集 ARM指令集 Thumb指令集 3.编…

vuex----的辅助函数mapState, mapActions, mapMutations用法和混入

Vuex的辅助函数mapState, mapActions, mapMutations用法和混入 爱学习的渣渣关注IP属地: 江苏 2022.03.28 00:14:13字数 287阅读 469 一.使用mapState来获取state里的值 第一步先解构 1.最简单的使用数组的形式来获取模块中state中的值 2.用对象的形式来获取模块中的state的…

面试官:Spring refresh过程是怎样的?

小熊学Java网站:https://javaxiaobear.gitee.io/,每周持续更新干货,建议收藏! 1. Spring refresh 流程 refresh 是 AbstractApplicationContext 中的核心方法,负责初始化 ApplicationContext 容器,容器必须…

【算法】七月算法打卡

# 2022-07-11 深拷贝 const copyObject (obj {}) > {let newObj nullif (typeof (obj) object && obj ! null) {newObj obj instanceof Array ? [] : {}// 进入下一层进行递归for (let i in obj) newObj[i] copyObject(obj[i])} else {newObj obj}return …

手机(Android)刷NetHunter安装指南,无需ssh执行kali命令, NetHunter支持的无线网卡列表!

一、安装NetHunter 前提:确保手机已经root,已装上magisk。如果没有root,可用尝试magisk root 后执行此文 1、下载Nethunter:Get Kali | Kali Linux 然后push 到sdcard 里, 2、打开magisk,选择刚刚下好的…

krpt.dll丢失怎么安装?怎么修复快一点

krpt.dll丢失怎么安装?其实你只要记住一点,只要是dll文件丢失,那么就不外乎那几种修复方法,自己下载丢失的文件安装,或者使用dll修复工具,这些方法都是可以修复的。下面我们详细的说一说。 目录 一.krpt.…

性能优化-内存泄漏、内存溢出、cpu占用高、死锁、栈溢出、FullGC频繁检测手段-总结与分享

介绍 什么是内存泄漏 含义:内层泄露是程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费。(换言之,GC回收不了这些不再被使用的对象,这些对象的生命周期太长) 危害&#xff…

Linux学习03-Linux基础命令1

1 开始执行命令 command [-options] parameter1 parameter2 一行命令中第一个输入的部分绝对是命令或者可执行文件。 例如 ls命令列出目录的文件,需要列出隐藏文件则加 -al。 ls -al ls ls -a -l 2 基础命令操作 显示日期与时间的命令:date 显示日…

Ubuntu22.04系统中二进制包安装公有云k8s

目录公有云版k8s的架构是怎样的公有云中创建k8s实例的过程如下二进制法创建k8s的一般过程Kubernetes的重要性check nodes每台服务器执行基线配置CA rootetcd HA cluster根据CA根证书创建etcd的专有CA证书将etcd注册成为systemd服务配置各master节点的etcd.confansible配置各个m…

东北大学2023分布式操作系统考试重点

Note:以下10个点为老师画的重点 1.分布式系统目标 第一章 分布式系统概论,第二节 2.RPC过程 第四章 分布式通信管理, 第二节 客户过程以普通方式调用相应的客户存根客户存根建立消息并激活内核陷阱内核将消息发送到远程内核远程内核将消息…

计算机毕设Python+Vue写字楼物业管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

C++ Reference: Standard C++ Library reference: Containers: map: map: operator[]

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/operator[]/ 公有成员函数 <map> std::map::operator[] C98 mapped_type& operator[] (const key_type& k); C11 mapped_type& operator[] (const key_type& k); mapped_type& …

SQL基础——数据更新

数据更新前言思维导图数据的插入&#xff08;INSERT语句的使用方法&#xff09;什么是INSERTINSERT语句的基本语法语法4.1 INSERT语句代码示例4.2 创建 ProductIns表的CREATE TABLE语句代码示例4.3 向表中插入一行数据代码示例4.4 INSERT插入多行数据列清单的省略代码示例4.5 省…

chatGPT的49种应用场景,及各开发语言对接chatGPT参考指南

前沿 可能有人在问我&#xff0c;勇哥为什么chatGPT都被微信下架了&#xff0c;你还要写相关的chatGPT的文章呢&#xff1f;其实我们先不论微信下架的原因&#xff0c;单说chatGPT的达芬奇模型给勇哥带来的科技感早就超越了一切&#xff0c;所以勇哥依旧决定连续熬两个夜为大家…

【与达梦同行】达梦驱动图谱

达梦驱动图谱 摘要 达梦提供了大部分主流开发语言的驱动接口&#xff0c;在我用使用过的国产数据库中对客户端驱动的支持应该算是非常不错的。本文主要介绍达梦的驱动开发&#xff0c;通过实际操作&#xff0c;从环境搭建到实践验证&#xff0c;介绍了达梦各种语言驱动的详细使…

博途S7-1500T 使用工艺对象驱动液压轴(含SimaHydTO库)

利用工艺对象控制液压轴位置含PLC控制和仿真程序文档资料下载地址如下: https://support.industry.siemens.com/cs/document/109756217/simatic-s7-1500(t)-lsimahydto-for-hydraulic-applications-and-hydraulic-presses?dti=0&dl=en&lc=zh-CNhttps://support.indu…

圣诞树-python绘制雪夜圣诞树并封装为小程序

绘制雪夜圣诞树并封装为小程序 使用turtle绘制一颗雪夜圣诞树&#xff0c;然后封装成exe小程序送给你的朋友吧&#xff01; PS&#xff1a;只能在windows运行。 转载注明本文链接和作者 先看效果图&#xff1a; 绘制雪夜圣诞树 由于代码有三百多行&#xff0c;我放在下面的两…

一文彻底搞懂cookie、session、token

1.Cookie Cookie是客户端保存用户信息的一种机制&#xff0c;用来记录用户的一些信息&#xff0c;实际上Cookie是服务器在本地机器上存储的一小段文本&#xff0c;并随着每次请求发送到服务器。 Cookie技术通过请求和响应报文中写入Cookie信息来控制客户端的状态。 Cookie会…

28.项目搭建网关

项目搭建网关 一、项目架构 二、创建模块&#xff0c;引入依赖&#xff0c;创建启动类&#xff0c;添加application.yml配置文件 2.1依赖 <dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-…

【AI with ML】第 9 章 :了解序列和时间序列数据

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…