记录一下图像处理的基础知识

记录一下自己学习的图像处理的基础知识。

一、图像的文件格式以及常用的图像空间

1、文件格式

常见的图像文件格式有 jpg, png, bmp, gif

(1)jpg:有损压缩算法,大幅减小文件大小,便于存储和传输,兼容性强;但是会压缩画质,背景不可透明。

(2)png:无损压缩算法,能够比较好的保留原始图像质量,可以保存透明背景;但是文件较大,不利于传输。

(3)bmp:不进行压缩或使用简单的RLE压缩,不会损失图像质量;文件很大,需要占用大量的存储空间,兼容性有限,背景不可透明。

(4)gif:支持动画效果,兼容性强;但是只能支持256种颜色,研所会损失图像质量。

2、图像空间

RGB:红绿蓝三个颜色通道,是最常用的空间特征。

(255,255,255):白色

(0,0,0):黑色

(255,0,0):纯红色

(255,255,0):纯黄色

HSV:色度(使用360度来表示颜色,如下图)、饱和度(颜色接近光谱色的程度)、明度(颜色的明亮程度)

三个值分别的取值范围为:

H:0~360度

S:0~1

V:0~1

        需要注意的是,我们使用ps软件打开图片看到的HSV的取值范围和使用opencv转换的HSV的取值范围是不同的,因为opencv中的图像通常存储在cv::Mat容器中,像素的数据类型是uchar(无符号8位整数),范围在0~255,因此对HSV的值进行了转换。

opencv读取的HSV的取值范围为:

H:0~179

S:0~255

V:0~255

对应关系为:

H_opencv = H / 2.0

S_opencv = S * 255 

V_opencv = V * 255

二、图像预处理

1、图像增强:去噪、锐化

(1)去噪:可以使用图像平滑的方式来达到去噪的作用。

        这里主要记录了空间域图像平滑技术,对图像进行平滑处理的时候,需要一个滤波器,对每个像素点一定范围内的像素点进行计算。滤波又分为线性滤波和非线性滤波。

   滤波类型定义
   线性滤波基于线性运算,将图像中的每一个像素与周围的像素按照一定的权重进行加权求和来生成新的像素值(原理和卷积核是一样的)
   非线性滤波基于非线性运算,比如说中值滤波,将一个像素点和周围的像素点放在一起,取中值作为新的像素点

        两种滤波性质的方法如下:

    滤波类型方法
   线性滤波

均值滤波:固定滤波器窗口大小,计算该窗口内所有像素点的均值作为新的像素点

高斯滤波:卷积核基于高斯函数产生,距离中心像素越近的像素点权重越大,去除噪音的同时能够保留图像的边缘和细节信息。

Sobel滤波:主要用于检测图像的边缘,主要通过计算中心像素与其临近像素在水平上或者垂直上的差值来确定边缘的强度。

   非线性滤波

中值滤波:将一个像素点和周围的像素点放在一起,取中值作为新的像素点。

双边滤波:考虑像素的空间距离和灰度距离,与中心像素灰度值较大的相邻像素,权重低;与中心像素灰度值接近且空间位置靠近的像素,权重高。

形态学滤波:膨胀和腐蚀。对于每个像素,如果结构元素覆盖的区域内所有像素都满足一定条件(如像素值都为 1),则保留该像素,否则将其删除。膨胀则是腐蚀的相反操作,对于每个像素,如果结构元素覆盖的区域内有任何一个像素满足条件,则将该像素设置为满足条件的值。

(2)锐化:通过增强梯度来达到锐化的目的

        1)梯度:图像的梯度是一个矢量,用于描述图像中像素值的变化速度。在二维图像中,通常将水平方向上和垂直方向上的像素值变化分别表示为两个分量:水平梯度和垂直梯度。

        2)计算方式

               a) 一阶差分:分别在水平和垂直的方向上计算中心像素值与左右两边或者是上下两边像素值的差值。

               b)梯度算子:Roberts算子、Prewitt 算子、Sobel 算子等。

                      Roberts算子:基于交叉差分的梯度算法,采用对角线方向相邻两像素之差近似梯    度来检测边缘,对具有陡峭边缘且含噪声少的图像效果较好,但对噪声敏感,定位精度相对较低,计算简单,速度快,可用于一些简单的图像识别、文字图像初步处理。

                      dx = \begin{bmatrix} -1 & 0\\ 0 & 1 \end{bmatrix},  dy = \begin{bmatrix} 0 & -1\\ 1 & 0 \end{bmatrix}

                     Prewitt 算子:利用3x3邻域内的灰度差来计算梯度,然后将两个方向的梯度幅值相加得到该点的边缘强度。

                      水平方向上的卷积核为:

\begin{bmatrix} -1 & 0 & 1\\ -1 & 0 & 1 \\ -1 & 0 & 1 \end{bmatrix}

                      垂直上的卷积核为:

\begin{bmatrix} -1 & -1 & -1\\ 0 & 0 & 0\\ 1 & 1 & 1 \end{bmatrix}

                     Sobel 算子:在上面以及叙述过,这里记录一下Sobel 算子的卷积核:

                      水平方向上的卷积核为:

\begin{bmatrix} -1 & 0 & 1\\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix}

                      垂直方向上的卷积核为:

\begin{bmatrix} -1 & -2 & -1\\ 0 & 0 & 0\\ 1 & 2 & 1 \end{bmatrix}

                    

        3)物理应用

             a)边缘检测:一般来说,物体的边缘通常对应着像素值快速变化,因此可以通过梯度的方式来确定图中的边缘位置。

             b)纹理分析:纹理丰富的区域,像素值变化频繁,梯度值也会相应较大且分布较为复杂。通过分析梯度的统计特性,如均值、方差、直方图等,可以对图像的纹理特征进行描述和分类,从而实现纹理分析和识别。

             c)图像锐化:通过增强图像的梯度信息,来时图像中的边缘和细节更加突出。

        4)示例:一般使用梯度的应用过程如下(以使用图像分割为例)

             a)图像预处理:首先,使用滤波对图像去噪

             b)计算梯度:对每个像素计算水平、垂直或斜梯度

             c)阈值化:设定一个背景阈值,当梯度小于这个阈值,判定为背景,当梯度大于这个阈值,判定为前景。

             d)分割结果:根据阈值化后的结果,将每个像素分配到相应的物体类别中,从而实现图像分割。

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

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

相关文章

算法-各位数相加,直至和为个位数

给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。 示例 1: 输入: num 38 输出: 2 解释: 各位相加的过程为: 38 --> 3 8 --> 11 11 --> 1 1 --> 2 由于 2 是一位数,所以返回 2。…

Openwrt 下移植 源码安装Cmake

Openwrt 下源码编译安装Cmake cmake介绍源码下载安装configure问题/usr/bin/ld: cannot find -ldlCould NOT find OpenSSL运行CMake Error: Could not find CMAKE_ROOT !!!Openwrt opkg不支持cmake安装,本文尝试在目标板上基于cmake源码编译安装cmake, 并将遇到的问题和解决方…

使用Python,networkx构造有向图及无向图以及图合并等api

使用Python,networkx构造有向图及无向图以及图合并等api 源码图的构造、节点及边的添加等有向图及无向图及多重图 参考 方法名方法作用subgraph(G, nbunch)返回包含nbunch节点的子图union(G, H[, rename])合并G和H图disjoint_union(G, H)合并G和H图cartesian_produc…

【Java回顾】Day3 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举

学习资料 菜鸟教程 https://www.runoob.com/java/java-interfaces.html 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举 继承 创建分等级层次的类,子类继承父类的特征、行为、方法 class 父类{ } class 子类 extends 父类{ super(); }一些性质 Java 不支持…

2025年AI和AR谁才是智能眼镜的未来

在2025年,智能眼镜市场正迎来一场技术革新的浪潮,其中AI和AR技术的竞争尤为激烈。那么,究竟谁才是智能眼镜的未来呢?让我们来一探究竟。 AI眼镜的崛起 AI眼镜通过集成人工智能技术,提供了语音识别、环境感知和个性化服…

java实现预览服务器文件,不进行下载,并增加水印效果

通过文件路径获取文件,对不同类型的文件进行不同处理,将Word文件转成pdf文件预览,并早呢更加水印,暂不支持Excel文件,如果浏览器不支持PDF文件预览需要下载插件。文中currentUser.getUserid(),即为增加的水…

快速上手大模型的对话生成

本项目使用0.5B小模型,结构和大模型别无二致,以方便在如CPU设备上快速学习和上手大模型的对话上传 #mermaid-svg-Z86hUiQZ0hg9BVji {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Z86hUiQZ0h…

Unreal虚幻引擎使用遇到的问题记录

文章目录 The game module ‘MyGame’ could not be loaded. There may be an operating system error or the module may not be properly set up The game module ‘MyGame’ could not be loaded. There may be an operating system error or the module may not be properl…

在Unity中用Ab包加载资源(简单好抄)

第一步创建一个Editor文件夹 第二步编写BuildAb(这个脚本一点要放在Editor中因为这是一个编辑器脚本,放在其他地方可能会报错) using System.IO; using UnityEditor; using UnityEngine;public class BuildAb : MonoBehaviour {// 在Unity编…

丢弃法hhhh

一个好的模型需要对输入数据的扰动鲁棒 丢弃法:在层之间加入噪音,等同于加入正则 h2和h5变成0了 dropout一般作用在全连接隐藏层的输出上 Q&A dropout随机置零对求梯度和求反向传播的影响是什么?为0 dropout属于超参数 dropout固定随…

mysql 报错 ERROR 1396 (HY000) Operation ALTER USER failed for root@localhost 解决方案

参考:https://blog.csdn.net/m0_74824534/article/details/144177078 mysql 修改密码 ALTER USER ‘root’‘localhost’ IDENTIFIED BY ‘123’; 时,报错 ERROR 1396 (HY000): Operation ALTER USER failed for rootlocalhost 解决方案: 2024-4-3 段子…

Three.js Journey (notes2)

ref Three.js中文网 Three.js Journey — Learn WebGL with Three.js Part 1 Fullscreen and resizing When the double click happens, we will toggle the fullscreen —meaning that if the window is not in fullscreen, a double-click will enable fullscreen mode, …

C# 中 `new` 关键字的用法

在 C# 中,new 关键字用于修饰方法、属性、索引器或事件声明时,表示当前成员隐藏基类中同名的成员。它们之间的具体区别如下: 不加 new: 如果子类定义了一个与父类同名的方法,但没有使用 new 关键字,编译器会…

深入理解Python中的常用数据格式(如csv、json、pickle、npz、h5等):存储机制与性能解析

在数据科学与工程领域,数据的存储与读取是日常工作中不可或缺的一部分。选择合适的数据格式不仅影响数据处理的效率,还关系到存储空间的利用与后续分析的便捷性。本文将以通俗易懂的方式,深入探讨Python中几种常用的数据读写格式(…

Ubuntu开机The root filesystem on /dev/sdbx requires a manual fsck 问题

出现“Manual fsck”错误可能由以下几种原因引起: 不正常关机:如果系统意外断电或被强制重启,文件系统可能未能正确卸载,导致文件系统损坏。磁盘故障:硬盘的物理损坏可能会引发文件系统错误。文件系统配置问题&#x…

Django Admin 以管理 AWS Lambda 函数

在现代云计算环境中,AWS Lambda 函数已成为构建无服务器应用程序的重要组成部分。作为开发者或运维工程师,有效管理这些 Lambda 函数是一项关键任务。今天,我们将探讨如何利用 Django Admin 创建一个强大而直观的界面来管理 AWS Lambda 函数。 背景 假设我们已经创建了一个…

黑马Java面试教程_P10_设计模式

系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结&#xff0…

Science Robotics让软机器人“活”得更久的3D打印!

软机器人硬件在医疗、探索无结构环境等领域有广泛应用,但其生命周期有限,导致资源浪费和可持续性差。软机器人结合软硬组件,复杂组装和拆卸流程使其难以维修和升级。因此,如何延长软机器人的生命周期并提高其可持续性成为亟待解决…

Vue3实战教程》24:Vue3自定义指令

如果您有疑问,请观看视频教程《Vue3实战教程》 自定义指令​ 介绍​ 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外,Vue 还允许你注册自定义的指令 (Custom Directives)。 我们已经介绍了两种在 Vue 中重用代码的方式:组件和组…

面试题:@Transactional 注解在自调用情况下会失效原因

Transactional 注解在自调用情况下会失效,这主要是由于 Spring 事务管理的实现机制所导致的。以下是对这一问题的详细解释: 一、Spring 事务管理的实现机制 Spring 的事务管理是基于 AOP(面向切面编程)实现的,它通过…