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

像素

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

图像分辨率

  • 单位英寸内的像素点数;
  • 单位为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.mzph.cn/news/717979.shtml

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

相关文章

springer模板参考文献不显示

Spring期刊模板网站&#xff0c;我的问题是23年12月的版本 https://www.springernature.com/gp/authors/campaigns/latex-author-support/see-where-our-services-will-take-you/18782940 参考文献显示问好&#xff0c;在sn-article.tex文件中&#xff0c;这个sn-mathphys-num…

数据结构c版(3)——排序算法

本章我们来学习一下数据结构的排序算法&#xff01; 目录 1.排序的概念及其运用 1.1排序的概念 1.2 常见的排序算法 2.常见排序算法的实现 2.1 插入排序 2.1.1基本思想&#xff1a; 2.1.2直接插入排序&#xff1a; 2.1.3 希尔排序( 缩小增量排序 ) 2.2 选择排序 2.2…

rtt的io设备框架面向对象学习-io设备管理层

目录 1.设备基类2.rtt基类2.1 rtt基类定义2.2 对象容器定义2.3 rtt基类构造函数 3.io设备管理接口4.总结 这层我的理解就是rtt基类和设备基类所在&#xff0c;所以抽离出来好点&#xff0c;不然每个设备类都要重复它。 1.设备基类 /include/rtdef.h中定义了设备基类struct rt_…

STM32(11)按键产生中断

1.初始化IO引脚&#xff0c;设置模式&#xff0c;速度等 2.设置AFIO&#xff08;配置EXTI的引脚映射&#xff09;&#xff0c;记得开启时钟 3.配置EXTI的通道&#xff08;EXTI0和EXTI1&#xff09; 4.配置NVIC 4.1 中断优先级分组 4.2 配置中断 5.编写中断响应函数 在中断向量…

蓝桥ACM培训-实战1

前言&#xff1a; 今天老师没讲课&#xff0c;只让我们做了一下几道题目。 正文&#xff1a; Problem:A 小蓝与操作序列&#xff1a; #include<bits/stdc.h> using namespace std; stack<int> a; int main(){int n,flag1,ans;string cz;cin>>n;for(int i1;…

访问修饰符、Object(方法,使用、equals)、查看equals底层、final--学习JavaEE的day15

day15 一、访问修饰符 含义&#xff1a; 修饰类、方法、属性&#xff0c;定义使用的范围 理解&#xff1a;给类、方法、属性定义访问权限的关键字 注意&#xff1a; ​ 1.修饰类只能使用public和默认的访问权限 ​ 2.修饰方法和属性可以使用所有的访问权限 访问修饰符本类本包…

JetCache源码解析——API实现(持续更新中……)

在JetCache中不仅可以通过在类和接口的函数上使用注解Cached、CacheUpdate和CacheInvalidate等实现缓存加载、更新和删除操作&#xff0c;也支持通过调用API接口的形式来实现缓存的加载、更新和删除操作。 缓存接口 缓存接口的定义如下&#xff1a; /*** 缓存接口&#xff0…

【计算机网络】HTTPS 协议原理

https 一、HTTPS 是什么二、加密1. 加密概念2. 加密的原因3. 常见的加密方式&#xff08;1&#xff09;对称加密&#xff08;2&#xff09;非对称加密 三、数据摘要(数据指纹)四、HTTPS 的工作原理探究1. 只使用对称加密2. 只使用非对称加密3. 双方都使用非对称加密4. 非对称加…

Linux:kubernetes(k8s)部署CNI网络插件(4)

在上一章进行了node加入master Linux&#xff1a;kubernetes&#xff08;k8s&#xff09;node节点加入master主节点&#xff08;3&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/136420447?spm1001.2014.3001.5501 但是他们显示还是没准备好 看一下…

面试笔记系列五之MySql+Mybaits基础知识点整理及常见面试题

目录 Myibatis myibatis执行过程 mybatis的优缺点有哪些&#xff1f; mybatis和hibernate有什么区别&#xff1f; mybatis中#{}和${}的区别是什么&#xff1f; 简述一下mybatis插件运行原理及开发流程&#xff1f;&#xff08;插件四大天王&#xff09; mybatis的mapper没…

2.模拟问题——5.星期几与字符串对应

输入输出示例 输入&#xff1a; 9 October 2001 14 October 2001 输出&#xff1a; Tuesday Sunday 【原题链接】 字符串处理 C风格的字符串 字符数组&#xff0c;以’\0‘结尾建议在输入输出语句中使用 C风格的字符串 #include <string> using namespace std;初始化…

【字符串】马拉车(Manacher)算法

本篇文章参考&#xff1a;比较易懂的 Manacher&#xff08;马拉车&#xff09;算法配图详解 马拉车算法可以求出一个字符串中的最长回文子串&#xff0c;时间复杂度 O ( n ) O(n) O(n) 因为字符串长度的奇偶性&#xff0c;回文子串的中心可能是一个字符&#xff0c;也可能是…

uniapp聊天记录本地存储(详细易懂)

目录 目录 1、通过websocket拿取数据 2、获取聊天数据 3、聊天信息存储 、更新 4、读取聊天记录 5、发送信息&#xff0c;信息获取 6、最终效果 1.聊天信息的存储格式 2、样式效果 写聊天项目&#xff0c;使用到了本地存储。需要把聊天信息保存在本地&#xff0c;实时获…

Centos7使用man查找命令时,报错No manual entry for xxxx

Centos7使用man查找命令时&#xff0c;报错No manual entry for xxxx 在Linux中使用man指令查找指令信息时&#xff0c;报No manual entry for xxxx。 比如使用man指令查找sleep3号手册时&#xff0c;出现以下错误&#xff1a; 这是由于没有安装man-pages这个rpm包导致的&#…

从0开始学习NEON(1)

1、前言 在上个博客中对NEON有了基础的了解&#xff0c;本文将针对一个图像下采样的例子对NEON进行学习。 学习链接:CPU优化技术 - NEON 开发进阶 上文链接:https://blog.csdn.net/weixin_42108183/article/details/136412104 2、第一个例子 现在有一张图片&#xff0c;需…

获取 Windows 通知中心弹窗通知内容(含工具汉化)

目录 前言 技术原理概述 测试代码和程序下载连接 本文出处链接&#xff1a;https://blog.csdn.net/qq_59075481/article/details/136440280。 前言 从 Windows 8.1 开始&#xff0c;Windows 通知现在以 Toast 而非 Balloon 形式显示&#xff08; Bollon 通知其实现在是应用…

在ubuntu上安装hadoop完分布式

准备工作 Xshell安装包 Xftp7安装包 虚拟机安装包 Ubuntu镜像源文件 Hadoop包 Java包 一、安装虚拟机 创建ubuntu系统 完成之后会弹出一个新的窗口 跑完之后会重启一下 按住首先用ctrlaltf3进入命令界面&#xff0c;输入root&#xff0c;密码登录管理员账号 按Esc 然后输入 …

适用于恢复iOS数据的 10 款免费 iPhone 恢复软件

现在&#xff0c;您可以获得的 iPhone 的存储容量比大多数人的笔记本电脑和台式电脑的存储容量还要大。虽然能够存储数千张高分辨率照片和视频文件、安装数百个应用程序并随身携带大量音乐库以供离线收听固然很棒&#xff0c;但在一个地方拥有如此多的数据可能会带来毁灭性的后…

2.2_5 调度算法

文章目录 2.2_5 调度算法一、适用于早期的批处理系统&#xff08;一&#xff09;先来先服务&#xff08;FCFS&#xff0c;First Come First Serve&#xff09;&#xff08;二&#xff09;短作业优先&#xff08;SJF&#xff0c;Shortest Job First&#xff09;&#xff08;三&a…

SpringMVC总结

SpringMVC SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;是对Servlet进行了封装。 对于SpringMVC我们主要学习如下内容: SpringMVC简介 请求与响应 REST风格 SSM整合(注解版) 拦截器 SpringMVC是处理Web层/表现层的框架&#xff…