opencv中的图像特征提取

news2025/5/10 9:26:15

图像的特征,一般是指图像所表达出的该图像的特有属性,其实就是事物的图像特征,由于图像获得的多样性(拍摄器材、角度等),事物的图像特征有时并不特别突出或与无关物体混杂在一起,因此图像的特征获取需要采用特定的方法。

本文主要描述了图像特征提取的几种常用方法,并说明了其在opencv中的应用。

一.概述

图像的特征,分整体特征和局部特征,顾名思义,整体特征是将整个图像作为一个研究对象,而局部特征,是将整个图像划分为子区域,以子区域作为一个研究对象。历史上,图像的特征的提取是从整体特征开始的,但很快出现了困难:首先是背景的干扰,然后是事物在图像中的各种“形变”。于是研究的重点就转移到局部特征的提取上。

图像的局部特征,往往处于图像变化比较大的区域,例如边缘、角、脊等,因为这些区域所含有的信息,比一块色彩无变化的区域要多。常用的特征包括:灰度、直方图、梯度、边缘、纹理、矩等等,因此局部特征提取主要分为:基于灰度的算法、基于分布统计的算法和基于轮廓的算法,它们各有特点。

图像的特征包含了事物图像表述的大部分信息,有些特征即使进行某些操作,它们仍然稳定地存在。这里的图像的操作包括几何变化和光度变化。几何变化就是平移,旋转,缩放等,光度变化就是亮度,色度等变化。局部特征一般都能做到平移无关。要做到旋转无关,则需要将窗口以某个主方向对齐后再提取局部特征。如果对图像进行归一化(最大最小值归一化、均值方差归一化、直方图均衡化等)处理,能在一定程度上做到对亮度或光照无关。采用合适的方法,找出并提取这些特征,就相当于确定了事物的图像。

  图像特征提取,一般可以用来做聚类、匹配、识别、拼接等工作

特征提取其实包括特征检测与特征描述两方面内容,一般情况下,先检测、判断特征点,然后对特征点进行相似性度量,但大部分检测方法都形成了特定的绑定,即在判断特征点的同时生成特定的描述符,以致二者变成了同一个过程。特征提取和匹配包括三部分内容:

  1. 1、检测(detection):识别特征(关键)点
  2. 2、描述(description): 描述每个特征点周围的特征,理想情况下,这种描述在光照、平移、旋转等变化下是不变的。通常对特征点的描述采用的是一个描述符向量。
  3. 3、匹配(matching): 通过比较图像中的特征描述符来识别相似的特征。比较的方法和判断的阈值是关键。

下面是一些经典关键点的检测方法。

  1. HARRIS- 1988 Harris Corner Detector (Harris, Stephens)
  2. Shi, Tomasi- 1996 Good Features to Track (Shi, Tomasi)
  3. SIFT- 1999 Scale Invariant Feature Transform (Lowe)
  4. SURT- 2006 Speeded Up Robust Features (Bay, Tuytelaars, Van Gool) -None free

二.Harris角点检测

图像中的边缘,角,脊等一般都是图像的特征(关键)点,先给出它们的特征:

  1. 边缘:是组成图像两个区域之间边界(或边缘)的像素。一般是图像中拥有大梯度(颜色或灰度变化率大)的点组成的子集。
  2. 角 :在局部有两维结构,一般是图像梯度中高度曲率的点(方向突然发生变化的边缘)。
  3. 脊 :长条形的物体被称为脊,可以被看作是代表对称轴的一维曲线,对于每个脊有一个脊宽度。在空中摄影中往往使用脊检测来分辨道路,在医学图像中它被用来分辨血管。

这里以Harris方法说明角点的检测。算法基本思想是使用一个固定窗口在图像上进行任意方向上的滑动,比较滑动前与滑动后两种情况,窗口中的像素变化程度,如果存在任意方向上的滑动,都有着较大变化,那么可以认为该窗口中存在角点。这个过程的形象说明如下图:

蓝色窗口朝各方向移动后,窗口内像素值没有变化;黑色窗口如果如果沿着垂直方向移动,像素值会发生改变,如果沿着水平移动,像素值不会发生变化;红色窗口不管朝哪个方向移动,像素值都会发生很大变化。从这里也可以看出,角点特征是图像中较好的特征,比边缘特征更好地用于定位。

Harris 角点检测具有旋转不变性,但不具有尺度不变性,也就是说尺度变化可能会导致角点变为边缘(例如小圆角可被认为是角点,而大圆角可能被认为是边缘)。

Opencv中提供了cornerHarris函数,它的声明如下:

void cv::cornerHarris (InputArray  	src,
		OutputArray  	dst,
		int  	blockSize,
		int  	ksize,
		double  	k,
		int  	borderType = BORDER_DEFAULT 
	) 	

Harris根据图像的灰度进行检测,所以src为灰度图像,dst为窗口的变化响应值(该值的意义参见官网的“Harris Corner Detection”条目),它与原图像大小相同(每像素一个值),通过该值,可将这个窗口所在的区域划分为平面、边缘或角点,角点时,该值比较大,因而可认为该值大于某阈值时,此窗口内包含角点。blockSize是检测窗口的大小,ksize表示计算梯度时Sobel()算子的大小,k是计算dst用到的一个参数,borderType是图像像素的边界模式,一般blocksize取2,ksize取3,k取0.04。

该函数的应用比较简单,就是判断dst[i,j]是否大于阈值,该阈值与具体的图像有关,例如官网的一个示例中,取dst中最大值的0.01。

三.HOG

HOG( histogram of oriented gradients)的意思是方向梯度直方图,由 Navneet Dalal 和 Bill Triggs 于 2005 年首次引入的,它实际上是以统计的角度来表达某一区域内像素值变化的大小和方向。

HOG有以下特点:

  1. HOG表示的是边缘(梯度)的结构特征,因此可以描述局部的形状信息;
  2. 位置和方向空间的量化一定程度上可以抑制平移和旋转带来的影响;
  3. 如果采用局部区域归一化直方图,可以部分抵消光照变化带来的影响;

HOG特征是通过计算各小区域的特征集合而成,这里先需要说明一下HOG中的区域划分的概念:block(块),cell(胞元),win(窗口),它们会在HOG计算过程中出现。block包含cell(一般要求blokc大小是整数倍数的cell大小),例如cell可取8*8的像素,每个block可取2*2个cell,那么block的大小应该是16*16。win就是要计算特征的图像窗口,在win中,采用滑动block的方法得到各block,滑动时,由滑动步长控制每滑动一次的距离。win, block, cell滑动步长之间的关系如下图所示。

上图中,cell的大小为2*2,block的大小为4*6(包含2*3个cell),win的大小为10*10,虚线框表示初始block横向和纵向分别滑动了一步,此时滑动步长为2和1。理想情况下,如果block大小正好能“套住”图像的特征,当然最好,但现实不是这样,因此各block之间应有一定的重叠,block和滑动步长的大小也要合适。对上面的情况,横向可以有(窗口长-cell长)/步长+1个block(要求整除),纵向同理,即总共有[(10-4)/2+1]* [(10-6)/1+1]=20个block。

HOG相对于其它算法是比较简单的,步骤如下:

  1. 图像预处理:包括大小,灰度化,抑噪等,主要是为了提高图像特征描述对光照及环境变化的鲁棒性,降低图像局部的阴影、局部曝光过多及纹理失真,尽可能抑制噪声干扰。
  2. 对待计算的图像设置win,block等,先计算每个像素的图像梯度和方向,再在cell内进行统计(按角度划分若干个统计区间),形成直方图。这种直方图包含了局部图像方向变化的和强度的信息,在block范围内进行归一化,采用归一化后,可以消除整体亮度变化带来的影响。
  3. 将win内所有的block向量合起来,就是整个win的特征。

这里可以看出,HOG中的直方图是对cell而言的,无论cell的大小,每个cell都有固定个值(下标维度隐含了角度,这个固定值一般为9,即将180度分成9个统计区间,大于180度梯度认为是负值),但特征向量是对block而言的,即如果一个block含有4个cell,特征值就是一个36维的向量,如果一个窗口有20个block,则特征值就是一个36*20=720维的向量。

关于block向量的归一化,原论文中提到4种方法:一是采用L2范数;二是采用L2范数,然后限制分量的最大值(为0.2),再次归一化,这种方法就是L2-Hys;三是L1范数;四是L1范数,然后取平方根。具体描述可见Navneet Dalal 和 Bill Triggs的论文(https://hal.inria.fr/inria-00548512/document/)。

Opencv中提供了HOGDescriptor类,HOGDescriptor类不但提供了计算HOG特征的方法,也提供了在图像中判断是否具有某特征的方法(即物体检测)。使用HOGDescriptor的流程大致上是:构造,compute计算特征,detect检测物体(如果需要)。

构造HOGDescriptor的声明如下:

cv::HOGDescriptor::HOGDescriptor(Size  	_winSize,
		Size  	_blockSize,
		Size  	_blockStride,
		Size  	_cellSize,
		int  	_nbins,
		int  	_derivAperture = 1,
		double  	_winSigma = -1,
		HOGDescriptor::HistogramNormType  	_histogramNormType = HOGDescriptor::L2Hys,
		double  	_L2HysThreshold = 0.2,
		bool  	_gammaCorrection = false,
		int  	_nlevels = HOGDescriptor::DEFAULT_NLEVELS,
		bool  	_signedGradient = false 
	) 

_winSize:要计算的图像窗口大小

_blockSize:block大小

_blockStride:滑动步长

_cellSize:cell大小

_nbins:每个cell按角度划分的区间,一般为9,即20度一个统计区间

_derivAperture:未知

_winSigma:在计算前可以使用高斯函数进行平滑,降低噪点的影响,高斯函数的σ

_histogramNormType:直方图的归一化的方法,就是L2-Hys

_L2HysThreshold:L2-Hys方法中的最大分量值

_gammaCorrection:是否进行gamma校正

_nlevels:用于不同图像尺寸(缩小)时进行检测,最大的层数,只计算特征时没有使用

_signedGradient: 计算的梯度是否有正负,如果不区分互为反方向的两个梯度(经验表明,在行人检测中,无符号梯度优于有符号梯度),把它们都当作正数,则采用无符号梯度,否则采用有符号梯度。

计算HOG特征的的声明如下:

void cv::HOGDescriptor::compute 	( InputArray  	img,
		std::vector< float > &  	descriptors,
		Size  	winStride = Size(),
		Size  	padding = Size(),
		const std::vector< Point > &  	locations = std::vector< Point >() 
	) 

Img:输入的灰度图像

descriptors:输出的HOG特征向量

winStride :检测窗口的滑动步长

padding:窗口填充大小,对物体处于边界时,检测比较有效。

locations :检测到物体时的左上角坐标(大小是winSize)

检测物体时,HOGDescriptor提供了detect和detectMultiScale方法,在setSVMDetector之后,就可以调用它们,其实应该是调用训练好的SVM进行分类,由于HOG对样本图像的大小比较敏感的,所以需要对待检测的图像进行多尺寸(缩放)检测,MultiScale就是这个意思,当然,待检测图像中可能不止一次出现样本的图像,检测的结果是一个数组而非一个数。这里不再描述HOGDescriptor本身具有的检测方法。

四.ORB

ORB(Oriented FAST and Rotated BRIEF) 是一种快速特征点提取和描述的算法,它作为一种替代SIFT,SURF方法而被提出的(2011年),它采用改进的FAST关键点检测方法,使其具有方向性,并采用具有旋转不变性的BRIEF特征描述子,并在它们原来的基础上做了改进与优化,FAST和BRIEF都是比较快速的特征计算方法,因此ORB具有非同一般的性能优势,算法实时性在移动端设备上有很好的应用。

ORB是FAST特征点的检测方法与BRIEF特征描述法的融合。

FAST也是检测图像中的角点,总的思路是:若某像素与其周围邻域内足够多的像素点相差较大,则该像素可能是角点(当然,FAST含有一些快速判断以及去除“伪”角点的子方法,以提高快速和准确性)。Opencv中提供了FAST函数,可以得到角点集合。

BRIEF于2010年提出,它是在每一个特征点的邻域内,选取n个点对,比如其中一个点对为p、q,比较它们像素的大小关系:如果p比q小,取1;反之取0,即其描述向量由n个0和1组成(二进制串)。关于p、q如何选取和选取的个数,算法提出者均有论述,如p、q可按均匀采样、随机采样、高斯分布采样等,其个数可取128,256和512。BRIEF建立速度比较快,同时也极大的降低了特征匹配的时间,但其缺点是对噪声敏感(因为二进制编码是通过比较具体像素值来判定的)以及不具备旋转不变性和尺度不变性。BRIEF在opencv的核心模块中未被支持,而是在扩展模块中xfeatures2d中被支持。

ORB对FAST的改进包括:

  1. 通过对原始图像的缩放,形成一系列图像(图像“金字塔”),为每张图像运用FAST。
  2. 在每个特征点,计算邻域内像素强度(“亮度”)的“质心”,“质心”与特征点的连线方向构成此特征点的方向。

措施1可以使算法具有一定的尺度不变性,措施2是为旋转不变性做准备的。

ORB对BRIEF的改进包括:

  1. 以小的区域块像素的平均值代替一个像素的值(上文中的p或q)
  2. 选取点后(上文中的p或q)绕特征点的方向(FAST的改进)旋转,由此,选取点关于特征点方向的相对位置是不变的,但关于特征点邻域的位置却变了。
  3. 如何选取(p,q)点对,没采用BRIEF中的5中方法,而采用所谓“rBRIEF”的方法,即统计查找所有(p,g)的选取方法中,相关性最小的若干组点对作为最终的(p,g)点对。

措施1可以增加抗干扰性,措施2可以增加旋转不变性,措施3使描述符尽量表达特征点的独特性,如果不同特征点的描述符的可区分性比较差,匹配时不容易找到对应的匹配点,引起误匹配。

Opencv中提供了ORB类,使用ORB的流程大致上是:构建(create函数)-> 检测,找出关键点集(detect函数)-> 对关键点进行计算,形成图像的特征描述符集(compute函数),后两步也可以合成一步(detectAndCompute函数),最后得到的是特征点的位置和特征点描述符向量。其中第一步设置ORB的参数是关键,ORB类构造的方法如下:

static Ptr<ORB> cv::ORB::create( 	int  	nfeatures = 500,
		float  scaleFactor = 1.2f,
		int  	nlevels = 8,
		int  	edgeThreshold = 31,
		int  	firstLevel = 0,
		int  	WTA_K = 2,
		ORB::ScoreType  	scoreType = ORB::HARRIS_SCORE,
		int  	patchSize = 31,
		int  	fastThreshold = 20 
	) 

nfeatures:最多保留的特征点的数量;

scaleFactor:金字塔图像的尺度缩放参数,上一层图像的尺寸是下一层的(1/s)*(1/s)

nlevels:金字塔的层数;

edgeThreshold:边缘大小,靠近边缘edgeThreshold以内的像素是不检测特征点的,它大致与patchSize相等或大于patchSize。

firstLevel:将原始图像放在金字塔的第几层,即该层的上层或下层,被缩小或放大。

WET_K:用于产生BIREF描述符的点对的个数。

scoreType:使用FAST机制或者Harris corner机制来过滤特征点。

patchSize:用于计算BIREF描述符的特征点邻域大小。

fastThreshold:FAST算法提取特征点的阈值

五.SIFT

SIFT(Scale Invariant Feature Transform,尺度不变特征变换)是由加拿大教授David G.Lowe提出的,并申请了专利,该专利已在2020年到期。

历史上,SIFT特征和SURF特征都是非常常用的特征,SIFT特征以精确著称,但计算量大,无法在CPU上实时计算。SURF算法步骤与SIFT算法大致相同,但采用的方法不一样,降低了SIFT的精确度,但提高了性能,而ORB则适合于实时使用。在opencv中,SURF在扩展模块xfeatures2d中被支持。SIFT特征对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。

为理解SIFT,需要引入“尺度空间”的概念。尺度空间,是在信号长度不变的情况下,通过(高斯)平滑,获得信号在不同尺度下的表达,然后使用尺度对应大小的窗口进行观测和提取特征。因为获得了原始信号在所有尺度下的特征,这些特征在整体上做到了尺度无关——因为原始信号各种尺度的特征都有了。

对二维图像,尺度空间就是将图像的点I(x,y),经过不同σ作为参数的高斯核函数作用,而形成的一组图像,即

L(x,y, σ)=G(x,y, σ)*I(x,y),

上式中,L(x,y, σ)是尺度空间中某一σ尺度下在(x,y)点的像素值,I(x,y)为原始图像的在(x,y)的像素值,G(x,y, σ)为高斯核函数:

这样,以原始图像为最底层,按σ递增的顺序计算得到的一组L,此时按σ排列所形成的序列就是该图像的尺度空间表达,称为高斯金字塔(实际做法略有不同)。

从上面的公式,可以看出某点的最终像素值,是该点的像素值和周边像素值的加权平均值,权值就是高斯核函数,距离这点越远的像素值的权值越小,图像经过高斯核函数处理后,随着σ的增大,图像越模糊,相当于对图像做了低通滤波。

通常情况下,图像中物体的局部特征提取只有在一定的图像尺度下进行才有意义(例如在上面Harris角点检测中提到的某一尺寸下可以认为是角点,在放大后未必是角点),这个尺度称之为特征尺度。

为什么需要建立高斯金字塔?一般来讲,在没有先验知识的情况下,对两幅图像分别在每个尺度上检测关键点并提取特征,总有某些关键点及其特征正好来自相同的尺度,如果它们恰好可以匹配上,则图像1和图像2匹配,反之,如果所有关键点都配不上,则图像1和图像2不匹配。因此图像金字塔,是在保持观测窗口不变的情况下,获得输入图像在不同尺寸(分辨率)下的表达,在不同尺寸上提取到的特征在整体上做到了尺寸(分辨率)无关。

总结一下SIFT采取的措施,来实现旋转、尺度缩放、亮度变化等保持不变性的:

缩放:采用尺度空间,包含了所有的尺度下的特征

旋转:计算区域内的图像梯度方向,以主方向作为标准

亮度:特征向量有归一化,有一定的亮度变化无关性

SIFT算法可分为四步:

  1. 高斯(差分)金字塔(Difference of Gaussian, DOG)空间建立:为形成搜索不同尺度上的图像位置。通过高斯微分函数来识别潜在的对于尺度和旋转不变的兴趣点。
  1. σ是高斯正态分布的标准差,它可以控制邻域的大小,大致上3σ距离之外的像素都可以忽略其影响,因此邻域大小一般为(6σ+1)*(6σ+1),例如对5*5的邻域,σ=0.6。
  2. 如果m是高斯金字塔每组内的层数,则差分后层数变为m-1,可计算极值的层数为(m-1)-2,实际计算时(m-3)在3到5之间。
  3. 高斯金字塔的总组数n,最下层组一般扩采一次,然后是原图层组,再是降采层组,一般最小图像不小于16*16
  1. 尺度空间极值检测,特征点定位:找到每层属性的相对极值点,可作为候选的特征点,注意它是离散空间的极值点,采用Taylor插值,拟合到连续空间,去除低对比度的点,再去除不稳定的边缘响应点。
  2. 特征点方向计算:在特征点邻域完成像素梯度计算,使用直方图统计邻域内的梯度和方向,并分配到8个方向上,数量最多的是主方向。
  3. 特征点描述向量生成:对每个特征点,将坐标旋转到它的主方向,在邻域内计算像素梯度,Lowe建议在特征点周围4*4的窗口中计算的8个方向的梯度信息,共4*4*8=128维向量表征特征。

以上仅是对SIFT算法的简要说明,它确实比较复杂,详细的描述可参阅相关网上文章。

Opencv中提供了SIFT类(opencv早期版本放在contrib下,v4.4引入到features2d中),使用SIFT的流程与ORB是一样的(其实它们都继承相同的基类)。创建SIFT类的声明如下:

static Ptr<SIFT> cv::SIFT::create (int	nfeatures,
		int  	nOctaveLayers,
		double  	contrastThreshold,
		double  	edgeThreshold,
		double  	sigma,
		int  	descriptorType 
	) 

nfeatures:保留的最佳特性的数量(候选的特征点是有先后顺序的)。

nOctavelLayers:每组中图像的层数,组数可由图像的分辨率自动计算;

constrastThreshold:对比度阈值,在Taylor拟合后,对绝对值(DOG的差分值)过小的极值点,由于其稳定性较差应予以舍。对于[0,1]范围内的像素,Lowe建议该值取0.03。显然,阈值越大,产生的特征越少。在opencv中,真正应用的阈值是constrastThreshold/ nOctavelLayers。

edgeThreshold:用于过滤掉边缘响应的阈值。edgeThreshold越大,产生的特征越多;

sigma:σ,如果图像分辨率较低,则可能需要减少数值。

descriptorType:描述符数据结构,float或unsigned char

网上有文章对比了一下ORB,SURF,SIFT三个算法,建议在应用中,对时间有要求的,选用ORB,否则选用SURF。

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

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

相关文章

【JVM-GC调优】

一、预备知识 掌握GC相关的VM参数&#xff0c;会基本的空间调整掌握相关工具明白一点&#xff1a;调优跟应用、环境有关&#xff0c;没有放之四海而皆准的法则 二、调优领域 内存锁竞争cpu占用io 三、确定目标 【低延迟】&#xff1a;CMS、G1&#xff08;低延迟、高吞吐&a…

shopping mall(document)

shopping mall&#xff08;document&#xff09; 商城的原型&#xff0c;学习&#xff0c;优化&#xff0c;如何比别人做的更好&#xff0c;更加符合大众的习惯 抄别人会陷入一个怪圈&#xff0c;就是已经习惯了&#xff0c;也懒了&#xff0c;也不带思考了。 许多产品会迫于…

qiankun微前端任意位置子应用

qiankun微前端任意位置子应用 主项目1、安装qiankun2、引入注册3、路由创建4、路由守卫 二、子项目1、安装sh-winter/vite-plugin-qiankun2、main.js配置3、vite.config.js配置 三、问题解决 主项目 1、安装qiankun npm i qiankun -S2、引入注册 创建存放子应用页面 //whpv…

第十五章,SSL VPN

前言 IPSec 和 SSL 对比 IPSec远程接入场景---client提前安装软件&#xff0c;存在一定的兼容性问题 IPSec协议只能够对感兴趣的流量进行加密保护&#xff0c;意味着接入用户需要不停的调整策略&#xff0c;来适应IPSec隧道 IPSec协议对用户访问权限颗粒度划分的不够详细&…

spring5.x讲解介绍

Spring 5.x 是 Spring Framework 的重要版本升级&#xff0c;全面拥抱现代 Java 技术栈&#xff0c;其核心改进涵盖响应式编程、Java 8支持、性能优化及开发模式创新。以下从特性、架构和应用场景三个维度详细解析&#xff1a; 一、核心特性与架构改进 Java 8 全面支持 Spring …

荣耀A8互动娱乐组件部署实录(第3部分:控制端结构与房间通信协议)

作者&#xff1a;曾在 WebSocket 超时里泡了七天七夜的苦命人 一、控制端总体架构概述 荣耀A8控制端主要承担的是“运营支点”功能&#xff0c;也就是开发与运营之间的桥梁。它既不直接参与玩家行为&#xff0c;又控制着玩家的行为逻辑和游戏规则触发机制。控制端的主要职责包…

levelDB的数据查看(非常详细)

起因:.net大作业天气预报程序(WPF)答辩时&#xff0c;老师问怎么维持数据持久性的&#xff0c;启动时加载的数据存在哪里&#xff0c;我明白老师想考的应该是json文件的解析&#xff08;正反&#xff09;&#xff0c;半天没答上来存那个文件了&#xff08;老师默认这个文件是自…

在Fiddler中添加自定义HTTP方法列并高亮显示

在Fiddler中添加自定义HTTP方法列并高亮显示 Fiddler 是一款强大的 Web 调试代理工具&#xff0c;允许开发者检查和操作 HTTP 流量。一个常见需求是自定义 Web Sessions 列表&#xff0c;添加显示 HTTP 方法&#xff08;GET、POST 等&#xff09;的列&#xff0c;并通过颜色区…

基于公共卫生大数据收集与智能整合AI平台构建测试:从概念到实践

随着医疗健康数据的爆发式增长,如何有效整合、分析和利用这些数据已成为公共卫生领域的重要挑战。传统方法往往难以应对数据的复杂性、多样性和海量性,而人工智能技术的迅猛发展为解决这些挑战提供了新的可能性。基于数据整合与公共卫生大数据的AI平台旨在构建一个全面的生态…

clahe算法基本实现

一、背景介绍 图像算法处理中&#xff0c;经常需要遇到图像对比度调整的情况&#xff0c;CLAHE(Contrast Limited Adaptive Histogram Equalization)则是一种基于直方图&#xff0c;使用非常普遍的图像对比度调整算法。 关于这个算法的介绍有很多&#xff0c;基本原理这些&…

python打卡day20

特征降维------特征组合&#xff08;以SVD为例&#xff09; 知识点回顾&#xff1a; 奇异值的应用&#xff1a; 特征降维&#xff1a;对高维数据减小计算量、可视化数据重构&#xff1a;比如重构信号、重构图像&#xff08;可以实现有损压缩&#xff0c;k 越小压缩率越高&#…

数字化转型-4A架构之数据架构

系列文章 数字化转型-4A架构&#xff08;业务架构、应用架构、数据架构、技术架构&#xff09; 数字化转型-4A架构之业务架构 数字化转型-4A架构之应用架构 数据架构 Data Architecture&#xff08;DA&#xff09; 1. 定义 数据架构&#xff0c;是组织管理数据资产的科学之…

React 第三十七节 Router 中 useOutlet Hook的使用介绍以及注意事项

React Router 中的 useOutlet 是 v6 版本新增的 Hook&#xff0c;用于在父路由组件中访问当前嵌套的子路由元素。它提供了比 <Outlet> 组件更灵活的控制方式&#xff0c;适合需要根据子路由状态进行动态处理的场景。 一、useOutlet的基本用法 import { useOutlet } fro…

AGV通信第3期|AGV集群智能应急响应系统:从故障感知到快速恢复

随着智慧工厂物流系统复杂度的提升&#xff0c;AGV运行过程中的异常处理能力已成为保障生产连续性的关键指标。面对突发障碍、设备故障等意外状况&#xff0c;传统依赖人工干预的响应模式已无法满足现代智能制造对时效性的严苛要求。 一、AGV异常应急体系面临的挑战 响应时效瓶…

军事目标无人机视角坦克检测数据集VOC+YOLO格式4003张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;4003 标注数量(xml文件个数)&#xff1a;4003 标注数量(txt文件个数)&#xff1a;4003 …

软件安全(二)优化shellcode

我们在上一节课中所写的shellcode&#xff0c;其中使用到的相关的API是通过写入其内存地址来实现调用。这种方法具有局限性&#xff0c;如切换其他的操作系统API的内存地址就会发生变化&#xff0c;从而无法正常调用。 所谓的shellcode不过是在目标程序中加一个区段使得程序可…

RabbitMQ-运维

文章目录 前言运维-集群介绍多机多节点单机多节点 多机多节点下载配置hosts⽂件配置Erlang Cookie启动节点构建集群查看集群状态 单机多节点安装启动两个节点再启动两个节点验证RabbitMQ启动成功搭建集群把rabbit2, rabbit3添加到集群 宕机演示仲裁队列介绍raft算法协议 raft基…

深度学习基础--目标检测常见算法简介(R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN、SSD、YOLO)

博主简介&#xff1a;努力学习的22级本科生一枚 &#x1f31f;​&#xff1b;探索AI算法&#xff0c;C&#xff0c;go语言的世界&#xff1b;在迷茫中寻找光芒​&#x1f338;​ 博客主页&#xff1a;羊小猪~~-CSDN博客 内容简介&#xff1a;常见目标检测算法简介​&#x1f…

LINUX CFS算法解析

文章目录 1. Linux调度器的发展历程2. CFS设计思想3. CFS核心数据结构3.1 调度实体(sched_entity)3.2 CFS运行队列(cfs_rq)3.3 任务结构体中的调度相关字段 4. 优先级与权重4.1 优先级范围4.2 权重映射表 (prio_to_weight[])优先级计算4.3.1. static_prio (静态优先级)4.3.2. n…

软考-软件设计师中级备考 14、刷题 算法

一、考点归纳 1&#xff09;排序 2、查找 3、复杂度 4、经典问题 0 - 1 背包动态规划0 - 1 背包问题具有最优子结构性质和重叠子问题性质。通过动态规划可以利用一个二维数组来记录子问题的解&#xff0c;避免重复计算&#xff0c;从而高效地求解出背包能装下的最大价值。分…