计算机视觉基础知识(二)---数字图像

news2024/11/16 2:21:09

像素

  • 像素是分辨率的单位;
  • 构成位图图像的最基本单元;
  • 每个像素都有自己的颜色;

图像分辨率

  • 单位英寸内的像素点数;
  • 单位为PPI(Pixels Per Inch),为像素每英寸;
  • PPI表示每英寸对角线上所拥有的像素数目:
  • PPI=\sqrt{x^2+y^2}/z,x:长度像素数目,y:宽度像素数目,Z:屏幕大小;
  • 屏幕尺寸(大小)指的是对角线长度;
  • 图像清晰度的评价指标;

颜色模型

  • 色彩三原色(CMYK):品红,黄,青;
  • 光学三原色(RGB):红\绿\蓝;

RGB模型 

  • 三维直角坐标颜色系统中的一个单位正方体;
  • 正方体的主对角线上,各原色的量相等;
  • 产生由暗到亮的白色,即灰度;
  • 正方体的其他六个角点分别为红\黄\绿\青\蓝\品红;

灰度

  • 表示图像像素明暗程度的数值;
  • 黑白图像中点的颜色深度;
  • 范围一般为0~255;
  • 白色为255,黑色为0;

通道

  • 把图像分解成一个或多个颜色成分;

单通道

  • 一个像素点只需一个数值表示;
  • 只能表示灰度;
  • 0为黑色,255为白色;
  • 可表示二值图/灰度图;

三通道

  • RGB模式;
  • 把图像分为红\绿\蓝三个通道;
  • 可以表示彩色;
  • 全0表示黑色;

四通道

  • RGBA模式;
  • 在RGB的基础上加上alpha通道,表示透明度;
  • alpha=0表示全透明;

对比度

  • 不同颜色之间的差别;
  • 对比度=最大灰度值/最小灰度值;

RGB转为Gray

  • 浮点算法:Gray=0.3R+0.59G+0.11B;
  • 整数算法:Gray=(30R+59G+11B)/100;
  • 移位算法:Gray=(76R+151G+28B)>>8;
  • 平均值阀:Gray=(R+G+B)/3;
  • 仅取绿色:Gray=G;

RGB值转化为浮点数

  • 浮点运算结果更精确;
  • 整数运算中会丢失小数部分;
  • 导致颜色值严重失真;
  • 计算过程越多,失真越严重;
  • 将RGB值转化为[0,1]浮点数:x/255即可;

二值化

  • 阈值随意设置;
if(img_gray[i,j]<=0.5):
    img_gray[i,j]=0
else:
    img_gray[i,j]=1

通用概念(库的安装和使用)

  • 使用pip或者conda安装;
  • 百度搜索python 安装xxx;
  • 得到库的名称;
  • 使用的时候用import引入;
  • 不需要死记硬背函数;
  • 需要使用的时候搜索函数名;
  • 可了解函数用法和参数含义;

常用视觉库

  • opencv:安装使用pip install opencv-python,使用时:import cv2
  • matplotlib:安装使用pip install matplotlib,使用时:import matplotlib.pyplot as plt
  • skimage:安装使用pip install scikit-image,使用时:import skimage;

opencv BGR

  • opencv读进来的图片通道排列:B--G--R;
  • 不是主流的R--G--B;
#opencv读入的矩阵时BGR,想转为RGB,可以这样:
img=cv2.imread('1.jpg')
img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)

图像频率

  • 灰度值变化剧烈程度的指标;
  • 是灰度在平面空间上的梯度;

图像幅值

  • 在一个周期内;
  • 交流电瞬时出现的最大绝对值;
  • 也是一个正弦波;波峰到波谷距离的一半;

数字图像

  • 计算机保存的图像都是一个个像素点,称为数字图像;

图像数字化过程

  • 由图像的取样与量化来完成;

图像的取样

  • 取样就是决定用多少点来描述一幅图像;
  • 取样结果质量的好坏用图像的分辨率来衡量;
  • 数字化坐标值称为取样;
  • 若横向的像素数(列数)为M,纵向的像素数(行数)为N;
  • 图像的总像素数为MxN个像素;

图像的量化

  • 指要用多大范围的数值表示图像采样之后的一个点;
  • 数字化图像的幅度值称为量化;

上采样

  • 放大图像,或称上采样:upsampling或图像插值:interpolating;
  • 放大原图像;
  • 可将图像显示在更高分辨率的显示设备上;

下采样

  • 缩小图像,或称下采样:subsampled,或降采样:downsampled;
  • 使图像符合显示区域的大小;
  • 生成对应图像的缩率图;

上采样原理

  • 内插值

下采样原理

  • (M/s)\times(N/s)

常用的插值方法

  • 最临近插值;
  • 单线性插值;
  • 双线性插值;

最临近插值

  • The nearest interpolation;
  • i+u,j+v为待求像素坐标;
  • i,j为整数,u,v为大于零小于1的小数;
  • 待求像素灰度值表示为f(i+u,j+v);

单线性插值

\frac{y-y_0}{y_1-y_0}=\frac{x-x_0}{x_1-x_0}

\frac{y-y_0}{x-x_0}=\frac{y_1-y_0}{x_1-x_0}

y=\frac{x_1-x}{x_1-x_0}\times y_0+\frac{x-x_0}{x_1-x_0}\times y_1

双线性插值

f(i+u,j+v)=(1-u)\times(1-v)\times f(i,j)

                                +(1-u)\times v \times f(i,j+1)

                ​​​​​​​        ​​​​​​​        +u\times (1-v)\times f(i+1,j)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        +u\times v \times f(i+1,j+1)

  • 在x方向做插值:

f(R_1)=f(x,y_1)\approx \frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21})

f(R_2)=f(x,y_2)\approx \frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22})

  • 在y方向作插值:

f(x,y)\approx \frac{y_2-y}{y_2-y_1}f(R_1)+\frac{y-y_1}{y_2-y_1}f(R_2)

  • 综合起来

f(x,y)\approx \frac{y_2-y}{y_2-y_1}f(R_1)+\frac{y-y_1}{y_2-y_1}f(R_2)

=\frac{y_2-y}{y_2-y_1}(\frac{x_2-x}{x_2-x_1}f(Q_{11})+\frac{x-x_1}{x_2-x_1}f(Q_{21}))

+\frac{y-y_1}{y_2-y_1}(\frac{x_2-x}{x_2-x_1}f(Q_{12})+\frac{x-x_1}{x_2-x_1}f(Q_{22}))

  • 图像双线性插值只用相邻的4个点,上述公式的分母都为1;

双线性插值坐标系的选择

  • dst像素点的坐标对应到src图像当中的坐标;
  • 通过双线性插值的方法算出src中相应坐标的像素值;

坐标对应关系

  • 按比例对应:

SrcX=(dstX)\times (srcWidth/dstWidth)

SrcY=(dstY)\times(srcHeight/dstHeight)

源图像和目标图像的左上角对齐

  • 如果源图像和目标图像的原点(0,0)均选择左上角;
  • 根据插值公式计算目标图像每点像素;
  • 假设需要将一幅5x5图像缩小为3x3;
  • 源图像和目标图像各像素之间的对应关系如下图:

 源图像和目标图像的中心对齐

  • 两个图像的几何中心重合;
  • 目标图像的每个像素之间等间隔;
  • 目标图像的四边和源图像都有一定的边距;

SrcX+0.5=(dstX+0.5)\times (srcWidth/dstWidth)

SrcY+0.5=(dstY+0.5)\times (srcHeight/dstHeight)

源图像和目标图像中心对齐平移参数的证明

双线性插值存在的问题

  • 双线新插值较最临近插值算法复杂;
  • 计算量较大;
  • 但是没有灰度不连续的缺点;
  • 图像看起来更光滑;

直方图

  • 图像处理中,经常用到直方图:如颜色直方图,灰度直方图;
  • 灰度直方图描述了图像中灰度分布的情况;
  • 能够直观展示图像中各灰度级所占比例;
  • 灰度直方图是灰度级的函数;
  • 描述图像中该灰度级的像素的个数;
  • 直方图中横坐标是灰度级;
  • 纵坐标是该灰度级出现的频率;

直方图的性质

  • 反映图像中的灰度分布规律;
  • 描述每个灰度级具有的像素个数;
  • 不包含像素在图像中的位置信息;
  • 不关心像素所处的空间位置;
  • 不受图像旋转和平移变化的影响;
  • 可以作为图像的特征;
  • 任何图像都有唯一的直方图对应;
  • 不同的图像可以有相同的直方图;
  • 如果一幅图像有两个不相连的区域组成;
  • 每个区域的直方图已知;
  • 整幅图像的直方图是该两个区域的直方图之和;

直方图的应用

直方图均衡化

  • 将源图像的直方图变换为均匀的直方图;
  • 按均匀直方图修改原图像;
  • 获得灰度分布均匀的新图像;
  • 是用一定的算法使直方图大致平和的方法;
  • 作用是图像增强;

直方图均衡化的应用考虑

  • 为了将原图像的亮度范围扩展;
  • 需要一个映射函数;
  • 将原图像的像素值均衡映射到新直方图中;
  • 映射函数需要满足:
  • 不打乱原有的亮暗布局;
  • 映射后亮\暗的关系不改变;
  • 且映射后必须在原有的范围内,比如(0-255);

直方图均衡化的步骤

  1. 依次扫描原始灰度图像的每一个像素;
  2. 计算出图像的灰度直方图H;
  3. 计算灰度直方图的累加直方图;
  4. 根据累加直方图和直方图均衡化的原理;
  5. 得出输入与输出之间的映射关系;
  6. 最后根据映射关系得出结果:
  7. dst(x,y)=H(src(x,y))

直方图均衡化的计算原理

  • 输入图像的任意一个像素p,p\in [0,255];
  • 总能在输出图像中有对应的像素q,q\in [0,255];
  • 满足输入和输出的像素总量相等;
  • 计算公式为(累加直方图公式):

\sum^p_{k=0}hist_{input}(k)=\sum^q_{k=0}hist_{iout}(k)

  • 输出图像每个灰度级的个数为:

hist_{out}(k)\approx \frac{H\times W}{256},k\in [0,255];

  • 代入累加直方图公式:

\sum^p_{k=0}hist_{input}(k)\approx (q+1) \frac{H\times W}{256}

\Rightarrow q\approx \sum^p_{k=0}\frac{hist_{intpu}(k)}{H\times W}\times 256-1

直方图均衡化实例

  • 原图像矩阵,image:5x5,最大像素值max=9,最小像素值min=0;
13998
21373
36064
68205
29260
  • 直方图均衡化计算表格:
像素值

该像素

值数量N_i

该像素值占图片

总像素值数量百分比:

p_i=N_i/25

百分比

加合

sumP_i

sumP_i\times256-1

四舍

五入

033/25=0.120.1229.7230
122/25=0.080.250.250
240.160.3691.1691
340.160.52132.12132
410.040.56142.36142
510.040.6152.6153
640.160.76193.56194
710.040.8203.8204
820.080.88224.28224
930.121255255
  • 目标图像矩阵
50132255255224
9150132204132
13219430194142
1942249130153
922559119430

线性滤波

  • 是图像处理的最基本方法;
  • 允许对图像进行处理,产生很多不同效果;

卷积

  • 数学定义:(f* g)(t)=\int_Rf(x)g(t-x)dx;
  • g称为作用在f上的过滤器(filter)或者核(kernel);

过滤器/卷积核的要求

  • 大小应为奇数;
  • 奇数才有一个中心,比如3x3,5x5或者7x7;
  • 有中心才有半径,比如,5x5的核半径为2;
  • 滤波器矩阵所有元素之和应该等于1;
  • 这样的核保证滤波前后图像的亮度保持不变;
  • 但不是硬性要求;
  • 如果滤波器所有矩阵的元素之和大于1;
  • 滤波后的图像会比原图像更亮;
  • 如果滤波器所有矩阵元素之和小于1;
  • 滤波后的图像会比原图像更暗;
  • 如果滤波器矩阵的所有元素和为0;
  • 图像不会变黑,但会非常暗;
  • 滤波后的图像像素值可能会出现负数或者大于255的情况;
  • 大于255的直接截断;
  • 负数取绝对值;
  • 具体应用中的多卷积核;
  • 认为每个卷积核代表一种图像模式;
  • 图像与卷积核卷积出的值较大,说明图像值接近卷积核;
  • 假设我们设计了6个卷积核;
  • 可以理解,我们认为该图像上有6种底层纹理模式;
  • 也就是我们使用6种基础模式能描绘一幅图像;

没有任何效果的卷积

000
010
000
  • 原像素中间像素值乘1;
  • 其余像素全部乘以0;
  • 像素值不会发生任何变化;

平划均值滤波

1/91/91/9
1/91/91/9
1/91/91/9
  • 取九个值的平均值代替中间像素值;
  • 可以起到平滑的效果;

高斯平滑

1/162/161/16
2/162/162/16
1/162/161/16
  • 高斯平滑水平和垂直方向呈现高斯分布;
  • 突出了中心点在像素平滑后的权重;
  • 相较于均值滤波,有更好的平滑效果;

图像锐化

-1-1-1
-19-1
-1-1-1

 

0-10
-15-1
0-10
  • 图像锐化使用拉普拉斯变换核函数;

边缘检测

G_x=\begin{bmatrix} 1 &0 & -1\\ 1 & 0 &-1 \\ 1&0 & -1 \end{bmatrix},G_y=\begin{bmatrix} 1 & 1& 1\\ 0 & 0 &0 \\ -1& -1 & -1 \end{bmatrix}

  • 使用G_x卷积上图;
  • 会在图像中间黑白边界处获得比较大的值;

Sobel边缘检测

  • 水平梯度卷积核
-101
-202
-101
  • 垂直梯度卷积核
-1-2-1
000
121
  •  Sobel更强调和边缘相邻的像素点对边缘的影响;

卷积解决的问题

  • 卷积负责提取图像中的局部特征

卷积--步长/stride

  • 卷积核的尺寸(f,f);
  • 图片的尺寸(h,w);
  • 用卷积核来卷积图片;
  • 每次移动一个像素;
  • 输出结果的尺寸为:(h-f+1,w-f+1);
  • 如果每次移动不止一个像素,而是s个;
  • 输出结果的尺寸为:(\frac{h-f}{s}+1,\frac{w-f}{s}+1);
  • s称为卷积步长/stride;
  • 如果f或s的值比1大;
  • 每次卷积之后结果的长宽,比卷积前小一些;
  • 会丢失信息;

填充/padding

  • 填充后,做卷积后的图像大小:

(\frac{h-f}{s}+1,\frac{w-f}{s}+1) \Rightarrow (\frac{h-f+2p}{s}+1,\frac{w-f+2p}{s}+1)

  • 如果想让高(宽)不变:

\frac{h-f+2p}{s}+1=h \Rightarrow p=\frac{s(h-1)-h+f}{2}

  • 假设步长s=1:

p=\frac{f-1}{2}

三种填充模式

  • 橙色部分为图像/image;
  • 蓝色部分为Filter/过滤器;
  • 三种填充模式分别是full/same/valid;

  • 从filter和image刚相交开始做卷积.

  • filter中心(k)与image的边角重合,开始卷积; 

  • filter全部在image内部时,开始卷积. 

  • same还有另外一个意思;
  • 卷积后输出的feature map尺寸保持不变(相对于输入图片);
  • same模式不代表完全输入输出尺寸一样;
  • 同卷积核的步长有关系;
  • same模式是最常见的模式;
  • 该模式可以在卷积过程中保持图像大小不变; 

三通道卷积

卷积核的确定

  • CNN的厉害在于:
  • 过滤器的特征不是人为设定;
  • 而是通过大量图片自己训练出来的;

 

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

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

相关文章

程序媛的mac修炼手册-- Node.js入门篇

最近因为参与一个微信小程序的开发&#xff0c;开始摸索JavaScript。期间&#xff0c;需要基于Node.js安装微信开发工具的依赖项&#xff0c;所以又顺带学习了Node.js的包管理工具npm&#xff08;Node Package Manager&#xff09;。不过&#xff0c;之前看到国外的全栈大佬​​…

electron+vue3全家桶+vite项目搭建【29】封装窗口工具类【3】控制窗口定向移动

文章目录 引入实现效果思路声明通用的定位对象主进程模块渲染进程测试效果 引入 demo项目地址 窗口工具类系列文章&#xff1a; 封装窗口工具类【1】雏形 封装窗口工具类【2】窗口组&#xff0c;维护窗口关系 很多时候&#xff0c;我们想直接让某个窗口移动到边角&#xff0c…

MySQL之索引详解

华子目录 索引概述优缺点 索引的原理索引的设计原则索引结构B-tree&#xff08;多路平衡查找树&#xff09;BtreeHash 为什么InnoDB存储引擎选择Btree&#xff1f;索引分类聚集索引选取规则 单列索引和多列索引前缀索引创建索引1.创建表时创建索引2.在已经存在的表上创建索引3.…

funasr VAD语音端点检测;sherpa VAD+STT识别

1、VAD 语音端点检测(funasr) Voice Activity Detection 语音活性检测(VAD)也被称为语音端点检测,基本原理是判断一个区间内的音频(区间被称为一个“语音帧”),是有效语音,还是无效语音。通过连续的检测多帧,就能判断出语音的“开头”(从无效到有效)和“结尾”(从…

【springboot】乡镇卫生院、二甲医院云HIS运维平台源码

目录 云HIS运营管理 ​编辑电子病历主模块&#xff1a;包括门诊电子病历、住院电子病历等子模块 &#xff08;1&#xff09;门诊电子病历功能简介 &#xff08;2&#xff09;住院电子病历功能简介 ▶患者列表主模块&#xff1a;包括患者信息子模块 &#xff08;1&#xf…

熔断降级 spring事务

如果有事务处理&#xff0c;会先把事务的自动提交给关闭

《一》在Vue中搭建Three.js环境(超详细、保姆级),创建场景、相机、渲染器

目录 Three.js简介创建vue项目引入Three.js实际操作环节文件目录创建初始化场景、相机 Three.js简介 Three.js 是一款基于 WebGL的 JavaScript 3D 库&#xff0c;它封装了 WebGL API&#xff0c;为开发者提供了简单易用的 API 来在 Web 浏览器中展示 3D 图形。Three.js 提供了…

青岛琛蓝健康集团正式发布多项科研合作项目

青岛琛蓝健康集团正式发布多项科研合作项目 科技创新是推动琛蓝健康产业集团持续发展的原动力。 一直以来&#xff0c;琛蓝健康集团高度重视科研合作&#xff0c;与众多专家团队和科研机构达成战略合作关系&#xff0c;深入实施产学研合作模式&#xff0c;成立多个协同创新中心…

经典思路!人参叶际微生物如何发8分文章?

中国中医科学院中药研究所在《Environmental Microbiome》期刊上(IF7.9)发表了关于叶际真菌微生态网络的文章&#xff0c;该研究通过对ITS测序结果和环境因子测定结果以及皂苷含量测定结果进行生信分析&#xff0c;提出了维持微生态网络的稳定性策略和影响皂苷含量的因素。 期刊…

【推荐算法系列十七】:GBDT+LR 排序算法

排序算法经典中的经典 参考 推荐系统之GBDTLR 极客时间 手把手带你搭建推荐系统 课程 逻辑回归&#xff08;LR&#xff09;模型 逻辑回归&#xff08;LR,Logistic Regression&#xff09;是一种传统机器学习分类模型&#xff0c;也是一种比较重要的非线性回归模型&#xff…

2024年短剧项目怎么做?教你搭建自己的短剧及cps分销平台app小程序

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、短剧系统 二、短剧cps分销平台 三、海外短剧系统 总结 前言 短剧系统分为三种&#xff1a; 短剧系统、短剧cps分销平台、海外短剧系统。今天简单介绍…

【C语言】剖析qsort函数的实现原理

主页&#xff1a;17_Kevin-CSDN博客 专栏&#xff1a;《C语言》 本文将从回调函数&#xff0c;qsort函数的应用&#xff0c;qsort函数的实现原理三个方面进行讲解&#xff0c;请自行跳转至相对位置进行阅读~ 目录 回调函数 qsort函数的应用 qsort函数实现原理 回调函数 什…

【推荐】免费AI论文写作神器-「智元兔 AI」

还在为写论文焦虑&#xff1f;免费AI写作大师来帮你三步搞定&#xff01; 智元兔AI是ChatGPT的人工智能助手&#xff0c;并且具有出色的论文写作能力。它能够根据用户提供的题目或要求&#xff0c;自动生成高质量的论文。 不论是论文、毕业论文、散文、科普文章、新闻稿件&…

远程控制从未如此简单

在这个科技日新月异的时代&#xff0c;我们的生活被各种手机软件所包围。几乎每个人都有一个甚至多个手机&#xff0c;你是否也有遇到过需要远程操作自己某一台手机的场景呢&#xff1f;今天&#xff0c;我要向大家推荐一款神奇的手机远程操作神器&#xff0c;让你可以随时随地…

网络学习:MPLS技术基础知识

目录 一、MPLS技术产生背景 二、MPLS网络组成&#xff08;基本概念&#xff09; 1、MPLS技术简介&#xff1a;Multiprotocol Lable Switching&#xff0c;多协议标签交换技术 2、MPLS网络组成 三、MPLS的优势 四、MPLS的实际应用 一、MPLS技术产生背景 1、IP采用最长掩码…

故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,XGBoost极限梯度提升树的故障诊断(Matlab) 模型描述 XGBoost通过集成多个决策树来建立一个强大的预测模型。它采用了一种特殊的梯度提升技术,称为极限梯度提升(Extreme Gradient Boosting),以提高模型的性能和鲁棒性。 极限梯度…

亚马逊Revie的作用有哪些?

Review在亚马逊的重要性不言而喻&#xff0c;好的Review可以给潜在的顾客以购买的信心&#xff0c;很多的卖家都会通过测评&#xff0c;来增加商品的Review来美化商品&#xff0c;进而带来更多的曝光量和流量&#xff0c;产生更多的订单&#xff0c;所以&#xff0c;对于任何一…

【anget应用入门】coze国际版agent应用discord快速部署及使用

1、coze agent配置 1.1 coze介绍 概述 Coze 是新一代一站式AI Bot开发平台&#x1f680;。无论你是否有编程基础&#xff0c;都可以在 Coze 平台上快速搭建基于 AI 模型的各类问答 Bot&#xff0c;从解决简单的问答到处理复杂逻辑的对话。你可以将搭建的 Bot 发布到各类社交…

Vue3:使用 Composition API 不需要 Pinia

在 Vue.js 开发的动态环境中&#xff0c;在单个组件中处理复杂的业务逻辑可能会导致笨重的文件和维护噩梦。虽然 Pinia 提供集中式状态管理&#xff0c;但仅依赖它来处理复杂的业务逻辑可能会导致代码混乱。本文探讨了使用 Composition API 的替代方法&#xff0c;说明开发人员…

2024高频前端面试题 JavaScript 和 ES6 篇

HTML和CSS篇&#xff1a; 2024高频前端面试题 HTML 和 CSS 篇-CSDN博客 一. JavaScript篇 1. 数据类型有哪些 1) 基本数据类型 数值(Number)、字符串(String)、布尔值(Boolean)、Undefined、Null、Symbol、BigInt 2) 引用数据类型 对象(Object)、数组(Array)、函数(Funct…