图像传感器与信号处理——SFR算法/ISO 12233解读

图像传感器与信号处理——SFR算法/ISO 12233解读
图像传感器与信号处理——SFR算法/ISO 12233解读
1. 前言
2. 基于视觉的分辨率测量方法
3. 基于边界的SFR算法
4. 基于正弦波的SFR算法
图像传感器与信号处理——SFR算法/ISO 12233解读
SFR的全称是Spatial Frequency Response,空间频率响应。介绍SFR算法的参考文献主要是ISO 12233这篇英文文档。和读一般的论文感觉不同,文档读起来更加晦涩难懂,可能是因为太专业,反正第一遍我是没有看懂的,后来参考了一些前辈的资料才搞明白SFR算法到底在干嘛。这篇博客我打算结合ISO 12233的部分内容以及一些参考资料,加入一些我自己的理解,对SFR算法进行一个总结。

1. 前言
以我的理解,ISO 12233这篇文章主要是规定了摄像头分辨率的测量标准,一共有三种方法:基于视觉的分辨率测量方法,基于边界的SFR算法以及基于正弦波的SFR算法。本博客以基于边界的SFR算法为主,考虑到全面性,也简单介绍下基于视觉的分辨率测量方法以及基于正弦波的SFR算法。

(1)那么首先我们得知道什么是分辨率?
在生活中,我们经常将分辨率定义为相机传感器像素的数量,而在ISO 12233中,将分辨率定义为相机捕捉空间细节的能力,可以分为单值标准和多值标准,单值标准即通过基于视觉的分辨率测量方法测得,而多值标准即通过两种SFR算法获得。

(2)单值标准好理解,那么通过SFR算法获得的多值标准是如何描述分辨率的呢?
这个通过SFR算法获得的多值标准其实指的就是MTF,全称是Modulation Transfer Function,调制传递函数。该函数是空间频率的传输函数,典型的调制传递函数的示意图如下图所示:

如图所示,典型的调制传递函数的示意图都会表现为一条向右衰减的曲线,这是因为空间频率越高(物体图案中的细节越多〉,镜头对物体的再现能力越弱。可以认为高频率下的高调制传递函数值指的是分辨率,而中等频率下的调制传递函数值指的是对比度,下图展示了该结论:

(3)最后,既然是测量相机的分辨率,那么具体是如何测量的呢?
在ISO 12233中给出了相机分辨率测量的条件,然后规定了一些列对于光照、白平衡、聚焦的设置要求,这里就不进行赘述,反正文档里都有。当搭建的环境满足以上要求后,将Test Chart放在规定位置,用待测的相机拍摄一张图片,然后用基于视觉的分辨率测量方法或者SFR算法对图片进行分析,最终获得该相机的分辨率。当然,对于不同的算法所用的Test Chart也不相同,下面就开始对各个算法进行介绍。

2. 基于视觉的分辨率测量方法
如下图所示是基于视觉的分辨率测量方法所用的Test Chart:

基于视觉的分辨率测量方法是利用图像空间频率过高而产生的混叠效应来进行判定的,如下图所示待测相机在前文所述的测试环境下拍摄的Test Chart图像的一部分,可以看到在图像中箭头所指的位置,最左侧两条线段出现了混叠效应,根据混叠效应产生位置,通过查表就可以获得相机分辨率:


基于视觉的分辨率测量方法我觉得需要注意如下两点:
(1)这种测试方法获得的结果单位是LW/PH,即line widths per picture height;
(2)文中提到,相机拍摄的Test Chart可能并不是占据整张像,因此获得的结果也需要按照Test Chart的大小比例进行放缩,例如,图像中的Test Chart只占据整张图像的1/2,按照Test Chart获得的结果是2000LW/PH,那么相机的实际分辨率是4000LW/P。.

3. 基于边界的SFR算法
如下图所示是基于边界的SFR算法所用的Test Chart(ISO 12233 2017版):


基于边界的SFR算法的介绍可以参考博客SFR算法详解(二)——斜棱法,这里结合前辈的博客和ISO 12233说一下我的理解:
算法的流程图如下图所示:

具体如下:
(1)选取ROI区域
ROI区域的选取如下图红色边框区域所示,选择的ROI区域由黑白两部分组成,中间为分界线。分界线与的ROI区域的上下边框交接点距离左右边框不得小于两个像素(其实就是所选取的ROI区域中的分界线不能太过倾斜),此外,ROI区域亮度调制比不得小于20%(其实就是黑白对比明显)。

(2)进行数据归一化
数据归一化处理通过逆光电转换函数(OECF)/逆Gamma校正对非线性的图像编码值(若为8 88位图像,即灰度值0 − 255 0-2550−255)进行逆向线性化处理,将其还原为一个类CCD原始光电采样信号的序列。关于Gamma校正的原理可以参考色彩中的Gamma值是什么,在ISO 12233中这一步表示为:
φ ( p , r ) = a OECF ⁡ [ D N r e d ] + b OECF ⁡ [ D N g r e e n ] + c OECF ⁡ [ D N b l u e ] \varphi(p, r)=a \operatorname{OECF}\left[DN_{\mathrm{red}}\right]+b \operatorname{OECF}\left[DN_{\mathrm{green}}\right]+c \operatorname{OECF}\left[DN_{\mathrm{blue}}\right]
φ(p,r)=aOECF[DN 
red

 ]+bOECF[DN 
green

 ]+cOECF[DN 
blue

 ]
其中D N r e d DN_{\mathrm{red}}DN 
red

 ,D N g r e e n DN_{\mathrm{green}}DN 
green

 ,D N b l u e DN_{\mathrm{blue}}DN 
blue

 分别为各个通道的数字输出,φ ( p , r ) \varphi(p, r)φ(p,r)为CCD上第r rr行,第p pp列原始光电采样信号,a aa,b bb,c cc为各个通道的加权值

(3)计算每一行的矩心
在ISO 12233中通过如下公式进行计算:
C ( r ) = ∑ p = 1 P − 1 p [ ϕ ( p + 1 , r ) − ϕ ( p , r ) ] ∑ p = 1 P − 1 [ ϕ ( p + 1 , r ) − ϕ ( p , r ) ] − 0.5 C(r)=\frac{\sum_{p=1}^{P-1} p[\phi(p+1, r)-\phi(p, r)]}{\sum_{p=1}^{P-1}[\phi(p+1, r)-\phi(p, r)]}-0.5
C(r)= 
∑ 
p=1
P−1

 [ϕ(p+1,r)−ϕ(p,r)]
∑ 
p=1
P−1

 p[ϕ(p+1,r)−ϕ(p,r)]

 −0.5
其中,P PP为ROI区域的总列数,C ( r ) C(r)C(r)为第r rr行的矩心位置,这里我们以SFR算法详解(二)——斜棱法中的例子对公式进行说明,我们假定ROI区域光电采集信号如下表所示(为了方便解释,这里仍然用图像编码值进行举例说明):
0 1 2 15 83 236 255 254 0 0 3 13 97 244 253 254 2 1 1 18 110 241 252 254 0 0 3 18 124 249 253 252 1 1 2 21 140 251 252 255 2 1 7 26 160 253 255 254 3 1 1 34 171 252 252 254 1 2 7 45 189 249 254 255
00201231101011122313271715131818212634458397110124140160171189236244241249251253252249255253252253252255252254254254254252255254254255

 

 
然后对每一行求加权平均获得矩心,对于第一行来说即
C ( 1 ) = 1 ∗ 1 + 2 ∗ 1 + 3 ∗ 13 + 4 ∗ 68 + 5 ∗ 153 + 6 ∗ 19 + 7 ∗ − 1 1 + 1 + 13 + 68 + 153 + 19 − 1 = 4.669291 C(1)=\frac{1*1+2*1+3*13+4*68+5*153+6*19+7*-1}{1+1+13+68+153+19-1}=4.669291
C(1)= 
1+1+13+68+153+19−1
1∗1+2∗1+3∗13+4∗68+5∗153+6∗19+7∗−1

 =4.669291
对每一行都进行同样的操作及获得每一行矩心的位置:
4.669291 4.598425 4.575397 4.43254 4.397638 4.261905 4.239044 4.086614
4.6692914.5984254.5753974.432544.3976384.2619054.2390444.086614
4.669291
4.598425
4.575397
4.43254
4.397638
4.261905
4.239044
4.086614
4.669291
4.598425
4.575397
4.43254
4.397638
4.261905
4.239044
4.086614

 

 

(4)对矩心进行直线拟合
在ISO 12233中公式如下:
m = [ Δ r Δ C ( r ) ] ‾ m=\overline{\left[\frac{\Delta r}{\Delta C(r)}\right]}
m= 

ΔC(r)
Δr

 ]

 
这个公式的意思就是求相邻两行之间的矩心的斜率,然后对所有斜率求均值m mm,最后获得函数:
S ( r ) = R / 2 − r m S(r)=\frac{R / 2-r}{m}
S(r)= 
m
R/2−r

 
其中R RR是总ROI区域的总行数,S ( r ) S(r)S(r)并不是拟合的直线,但是在后面和其他公式结合起来之后起到了相当于矩心直线的作用。

(5)获得边缘扩散函数ESF
这一步相对来说比较复杂,在ISO 12233中公式如下:
E S F ′ ( j ) = ∑ r = 1 R ∑ p = 1 P ϕ ( p , r ) ⋅ α ( p , r , j ) ∑ r = 1 R ∑ p = 1 P α ( p , r , j ) E S F^{\prime}(j)=\frac{\sum_{r=1}^{R} \sum_{p=1}^{P} \phi(p, r) \cdot \alpha(p, r, j)}{\sum_{r=1}^{R} \sum_{p=1}^{P} \alpha(p, r, j)}
ESF 

 (j)= 
∑ 
r=1
R

 ∑ 
p=1
P

 α(p,r,j)
∑ 
r=1
R

 ∑ 
p=1
P

 ϕ(p,r)⋅α(p,r,j)

 
其中函数α ( p , r , j ) \alpha(p, r, j)α(p,r,j)作用是将上述ROI光电采集信号归并到边缘扩散函数ESF中,其定义如下
α ( p , r , j ) = { 1 , − 0 , 125 ≤ [ p − S ( r ) − j ] < 0 , 125 0 ,  otherwise  \alpha(p, r, j)=\left\{
1,0,−0,125≤[p−S(r)−j]<0,125 otherwise 
1
,

0
,
125

[



(

)


]
<
0
,
125
0
,
 otherwise 
\right.
α(p,r,j)={ 
1,
0,

  
−0,125≤[p−S(r)−j]<0,125
 otherwise 

 
其中j jj为整数,其实也就是边缘扩散函数的下标,这个公式看起来其实不是很好理解,下面通过继续演示前文的例子来说明这个过程。上面已经可以得到每行矩心的位置,那么记下来计算各列到矩心的距离,例如第一行第一列有:
1 − 4.669291 = − 3.669291 1-4.669291=-3.669291
1−4.669291=−3.669291
则所有距离如下表所示:
− 3.66929 − 2.66929 − 1.66929 − 0.66929 0.330709 1.330709 2.330709 3.330709 − 3.59843 − 2.59843 − 1.59843 − 0.59843 0.401575 1.401575 2.401575 3.401575 − 3.5754 − 2.5754 − 1.5754 − 0.5754 0.424603 1.424603 2.424603 3.424603 − 3.43254 − 2.43254 − 1.43254 − 0.43254 0.56746 1.56746 2.56746 3.56746 − 3.39764 − 2.39764 − 1.39764 − 0.39764 0.602362 1.602362 2.602362 3.602362 − 3.2619 − 2.2619 − 1.2619 − 0.2619 0.738095 1.738095 2.738095 3.738095 − 3.23904 − 2.23904 − 1.23904 − 0.23904 0.760956 1.760956 2.760956 3.760956 − 3.08661 − 2.08661 − 1.08661 − 0.08661 0.913386 1.913386 2.913386 3.913386
−3.66929−3.59843−3.5754−3.43254−3.39764−3.2619−3.23904−3.08661−2.66929−2.59843−2.5754−2.43254−2.39764−2.2619−2.23904−2.08661−1.66929−1.59843−1.5754−1.43254−1.39764−1.2619−1.23904−1.08661−0.66929−0.59843−0.5754−0.43254−0.39764−0.2619−0.23904−0.086610.3307090.4015750.4246030.567460.6023620.7380950.7609560.9133861.3307091.4015751.4246031.567461.6023621.7380951.7609561.9133862.3307092.4015752.4246032.567462.6023622.7380952.7609562.9133863.3307093.4015753.4246033.567463.6023623.7380953.7609563.913386

3.66929

2.66929

1.66929

0.66929
0.330709
1.330709
2.330709
3.330709

3.59843

2.59843

1.59843

0.59843
0.401575
1.401575
2.401575
3.401575

3.5754

2.5754

1.5754

0.5754
0.424603
1.424603
2.424603
3.424603

3.43254

2.43254

1.43254

0.43254
0.56746
1.56746
2.56746
3.56746

3.39764

2.39764

1.39764

0.39764
0.602362
1.602362
2.602362
3.602362

3.2619

2.2619

1.2619

0.2619
0.738095
1.738095
2.738095
3.738095

3.23904

2.23904

1.23904

0.23904
0.760956
1.760956
2.760956
3.760956

3.08661

2.08661

1.08661

0.08661
0.913386
1.913386
2.913386
3.913386
−3.66929
−3.59843
−3.5754
−3.43254
−3.39764
−3.2619
−3.23904
−3.08661

  
−2.66929
−2.59843
−2.5754
−2.43254
−2.39764
−2.2619
−2.23904
−2.08661

  
−1.66929
−1.59843
−1.5754
−1.43254
−1.39764
−1.2619
−1.23904
−1.08661

  
−0.66929
−0.59843
−0.5754
−0.43254
−0.39764
−0.2619
−0.23904
−0.08661

  
0.330709
0.401575
0.424603
0.56746
0.602362
0.738095
0.760956
0.913386

  
1.330709
1.401575
1.424603
1.56746
1.602362
1.738095
1.760956
1.913386

  
2.330709
2.401575
2.424603
2.56746
2.602362
2.738095
2.760956
2.913386

  
3.330709
3.401575
3.424603
3.56746
3.602362
3.738095
3.760956
3.913386

 

 
然后以[ − 0.125 , 0.125 ] [-0.125,0.125][−0.125,0.125]为第0 00区间,以0.25 0.250.25为区间长度朝正负方向进行延伸,对以上距离进行区间划分,例如[ 0.125 , 0.375 ] [0.125,0.375][0.125,0.375]为第1 11区间,[ − 0.375 , − 0.125 ] [-0.375,-0.125][−0.375,−0.125]为第− 1 -1−1区间,由此可获得下表:
− 15 − 11 − 7 − 3 1 5 9 13 − 14 − 10 − 6 − 2 2 6 10 14 − 14 − 10 − 6 − 2 2 6 10 14 − 14 − 10 − 6 − 2 2 6 10 14 − 14 − 10 − 6 − 2 2 6 10 14 − 13 − 9 − 5 − 1 3 7 11 15 − 13 − 9 − 5 − 1 3 7 11 15 − 12 − 8 − 4 0 4 8 12 16
−15−14−14−14−14−13−13−12−11−10−10−10−10−9−9−8−7−6−6−6−6−5−5−4−3−2−2−2−2−1−1012222334566667789101010101111121314141414151516

进而可以获得边缘扩散函数ESF的曲线图(关于这个下标j jj其实我有点纠结,按照公式推导横坐标确实会有负值,但是下文中LSF又是从2 22开始)

(7)四倍超采样
在获得边缘扩散函数的过程中采用的离散距离单位缩小为0.25 0.250.25个像素,我们将边缘扩散函数的横坐标乘以4 44倍,然后将没有函数值的横坐标位置,向前寻找非零的函数值进行替换。这样将离散距离单位归为1 11,但它代表的还0.25 0.250.25个像素,而这也就是我们说的四倍倍超采样。

(8)生成线性扩散序列LSF
在ISO 12233中公式如下:
LSF ⁡ W ′ ( j ) = W ( j ) ESF ⁡ ′ ( j + 1 ) − ESF ⁡ ′ ( j − 1 ) 2 ,  for  j = 2 , … , N − 1 \operatorname{LSF}_{W}^{\prime}(j)=W(j) \frac{\operatorname{ESF}^{\prime}(j+1)-\operatorname{ESF}^{\prime}(j-1)}{2}, \text { for } j=2, \dots, \mathrm{N}-1
LSF 
W


 (j)=W(j) 
2
ESF 

 (j+1)−ESF 

 (j−1)

 , for j=2,…,N−1
其中
W ( j ) = 0 , 54 + 0 , 46 cos ⁡ [ 2 π ( j − 2 X ) / 4 X ] W(j)=0,54+0,46 \cos [2 \pi(j-2 X) / 4 X]
W(j)=0,54+0,46cos[2π(j−2X)/4X]
其实线性扩散序列LSF就是边缘扩散函数ESF均值滤波后再进行微分,在此基础上通过汉明窗滤波去除噪声,线性扩散序列LSF的图像大致如下图所示:
上面是根据前面的例子计算得到的线性扩散函数LSF,而理想的线性扩散函数LSF应该如下图所示
(9)归一化离散傅里叶变换
在ISO 12233中公式如下:
e − S F R ( k ) = D ( k ) ∣ ∑ j = 1 N L S F W ′ ( j ) e − i 2 π k j / N ∑ j = 1 N L S F W ′ ( j ) ∣ ,  for  k = 0 , 1 , 2 , … , N / 2 ,  or  ( N + 1 ) / 2  if  N  is odd  e-S F R(k)=D(k)\left|\frac{\sum_{j=1}^{N} L S F_{W}^{\prime}(j) e^{-i 2 \pi k j / N}}{\sum_{j=1}^{N} L S F_{W}^{\prime}(j)}\right|, \text { for } k=0,1,2, \ldots, N / 2, \text { or }(N+1) / 2 \text { if } N \text { is odd }
e−SFR(k)=D(k) 






  
∑ 
j=1
N

 LSF 
W


 (j)
∑ 
j=1
N

 LSF 
W


 (j)e 
−i2πkj/N
 

  






 , for k=0,1,2,…,N/2, or (N+1)/2 if N is odd 
即对上述线性扩散序列应用归一化离散傅里叶变换即可过得最后的结果,大致如下图所示:

4. 基于正弦波的SFR算法
如下图所示是基于正弦波的SFR算法所用的Test Chart:

但是关于这一部分算法,网上能够参考的资料较少,我反复看了ISO 12233文档好几遍,始终没能理解算法是怎么实现的,因为之后不一定会用到这一部分知识,所以不打算再话更多时间来研究这个算法,如果有同学刚好看到了这篇博客,和我有相同的问题,希望可以相互交流下~当然,如果有大佬能够直接指点下就最好了!

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

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

相关文章

蓝桥集训之统计子矩阵

统计子矩阵 核心思想&#xff1a;矩阵前缀和 双指针 用i和j双指针 遍历所有子矩阵的列用s和t双指针 遍历所有子矩阵的行求其子矩阵的和 若>k 将s向下移动 矩阵和必定减小(元素个数减少)直到满足<k 因为列一定 行数即为方案数(从t行往上数到s行 共t-s1个区间[t,t][t-1,t]…

PESTEL分析

PESTEL分析是一种用于评估宏观环境对组织或企业的影响的工具。PESTEL是对政治、经济、社会、技术、环境和法律六个方面进行分析的首字母缩写。 - 政治因素&#xff08;Political&#xff09;&#xff1a;涉及政府政策、政治稳定性、法律和法规等因素对企业的影响。 - 经济因素&…

Linux中服务端开发

1 创建socket,返回一个文件描述符lfd---socket(); 2 将lfd和IP&#xff0c;PROT进行绑定---bind(); 3 将lfd由主动变成被动监听---listen(); 4 接收一个新的连接&#xff0c;得到一个的文件描述符cfd--accept() --该文件描述符用于与客户端通信 5 while(1) { 接受数据&a…

MySQL——存储引擎

存储引擎 InnoDB 是 MySQL 默认的存储引擎&#xff0c;只有在需要它不支持的特性时&#xff0c;才会考虑其他存储引擎 实现了 4 个标准的隔离级别&#xff0c;默认级别可重复度。在可重复度隔离级别下&#xff0c;通过 MVCC 间隙锁防止幻读 主索引是聚簇索引 内部做了很多…

Docker 日志存储大小限制,默认会充爆磁盘

背景 在容器化部署的时候&#xff0c;因为没有指定日志的最大存储时间&#xff0c;导致磁盘被充爆。查看日志 一般使用docker logs -f --tail 行数 容器名称 来查看容器的运行日志&#xff0c;但是在容器被初始化的时候&#xff0c;需要指定日志的最大存储时间&#xff0c;因为…

React学习笔记

1、React初步认识 React构建Web和原生交互界面的库,相较于其它前端框架的优势,具有丰富的生态跨平台支持。 1.1、React的开发依赖 开发React必须依赖三个库: react:包含react所必须的核心代码;react-dom:react渲染在不同平台所需要的核心代码 ;babel:将jsx转换成Rea…

白云山板蓝根,一年四季都得备着

上班半年&#xff0c;每天都感觉在行尸走肉&#xff0c;长时间地坐在电脑前真的不行&#xff01;身体越来越差&#xff0c;面相也越来越糟糕&#xff0c;不仅有黑眼圈&#xff0c;痘痘也冒出来了不少&#xff0c;堪比整容&#xff0c;朋友们都纷纷调侃我&#xff0c;说我上半年…

限流、流量削峰?

学MQ的时候&#xff0c;经常会有人拿秒杀这个场景去介绍流量削峰。这很好理解&#xff0c;将请求放到一个中转站去暂存&#xff0c;虽然生产者生产很快&#xff0c;但消费者可以慢慢去中转站获取。 关于限流&#xff0c;之前一直以为限流的思想类似MQ&#xff0c;不过是内存中…

网络安全: Kali Linux 使用 docker-compose 部署 openvas

目录 一、实验 1.环境 2.Kali Linux 安装docker与docker-compose 3.Kali Linux 使用docker-compose方式部署 openvas 4. KaliLinux 使用openvas 二、问题 1. 信息安全漏洞库 2.信息安全漏洞共享平台 3.Windows 更新指南与查询 4.CVE 查询 5.docker-compose 如何修改o…

前后端分离项目Docker部署指南(上)

目录 前言 一.搭建局域网 1.搭建net-ry局域网&#xff0c;用于部署若依项目 2.注意点 二.安装redis 创建目录 将容器进行挂载 ​编辑 测试是否安装成功 ​编辑 三. 安装MySQL 创建文件夹 上传配置文件并且修改 .启动MySQL容器服务 充许远程连接 四.部署后端 使用…

LLVM clang_tokenize 的示例

1&#xff0c; 环境搭建 如同上篇 git clong llvm-project git checkout llmvorg-3.4.0 # or llvmorg-18.1.rc /bin/bash ./confiure --prefix....... # or cmake Debug make -j32 make -j install 2&#xff0c; 示例代码 Makefile&#xff1a;如同上篇 LLVM_CON…

机器学习中的 K-均值聚类算法及其优缺点。

K-均值聚类算法是一种常用的无监督学习算法&#xff0c;用于将数据集划分为K个不重叠的类别。该算法基于数据点之间的距离度量&#xff0c;通过不断迭代的方式将数据点分配给最近的聚类中心&#xff0c;并更新聚类中心的位置&#xff0c;直到达到收敛条件或最大迭代次数。 K-均…

关于“定时器中断干扰串口中断,导致串口中断数据接收不完整”的问题

问题描述 最近在做的项目&#xff0c;基于modbusRTU&#xff0c;上位机通过wifi模块给单片机发数据。 上位机每隔100ms&#xff0c;周期性发送0x03和0x10。 因为要及时的处理上位机发来的指令&#xff0c;我是在一个10ms的定时器中断中进行modbus数据处理。这就导致一个问题&…

MySQL JSON 路径表达式语法

MySQL JSON 路径表达式语法 语法 MySQL中支持的许多JSON函数&#xff0c;需要路径表达式以便识别JSON文档中的特定元素。路径由路径的作用域和一个或多个路径段组成。在MySQL JSON函数中使用的路径中&#xff0c;作用域始终是正在搜索或以其他方式操作的文档&#xff0c;由前…

NOIP 2010普及组初赛试题及解析

NOIP 2010普及组初赛试题及解析 一. 单项选择题 &#xff08;共20题&#xff0c;每题1.5分&#xff0c;共计30分。每题有且仅有一个正确答案.&#xff09;。二. 问题求解&#xff08;共2题&#xff0c;每题5分&#xff0c;共计10分&#xff09;三. 阅读程序写结果&#xff08;共…

AcWing 803. 区间合并

Problem: AcWing 803. 区间合并 文章目录 思路解题方法复杂度Code 思路 这是一个区间合并的问题。我们需要找出尽可能多的不相交的区间。首先&#xff0c;我们将所有的区间按照左端点从小到大进行排序。然后&#xff0c;我们遍历所有的区间&#xff0c;如果当前区间的左端点大于…

什么是Redis?|介绍与使用及特点浅记

Redis简介 Redis&#xff08;Remote Dictionary Server&#xff09;是一种基于内存、支持持久化的键值对存储系统&#xff0c;具有丰富的数据结构和高性能的特性。它不仅可以作为数据库&#xff0c;还可以作为缓存和消息中间件使用。Redis是单线程模型&#xff0c;但利用IO多路…

【丹尼早晚安】打卡第六天,英语学习笔记

成分颜色主语&#xff08;subject&#xff09;橙色谓语&#xff08;predicate&#xff09;蓝色宾语&#xff08;object&#xff09;红色定语&#xff08;attribute&#xff09;紫色状语&#xff08;adverbial&#xff09;棕色补语&#xff08;complement&#xff09;粉色 早上…

基于YOLOv8深度学习的农作物幼苗与杂草检测系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

排序算法(1):直接插入排序

原文链接&#xff08;原文也是我写的哈&#xff0c;强烈推荐去原文链接看&#xff09;&#xff1a;直接插入排序 - Fucking Code 直接插入排序&#xff08;Straight Insertion Sort&#xff09;是一种最简单的排序方法&#xff0c;其基本操作是将一条记录插入到已排好的有序表中…