【图像处理】——图像的二值化操作及阈值化操作(固定阈值法和自适应阈值法(大津法OTSU和三角法TRIANGLE))
目录
一、二值化的概念(实际上就是一个阈值化操作)
1、概念:
2、实现方法
3、常用方法
二、阈值类型
1、常见阈值类型(主要有五种类型)
(1)公式描述
(2)图表描述
2、两种特殊的阈值算法(OSTU和TRIANGLE)——主要是为了得到合理化的阈值
(1)大津法OSTU阈值类型——适用于双峰直方图
前背景方差的计算公式:
问题1:参数该怎么求解(主要依靠灰度直方图进行求解)?
(2)三角法TRIANGLE阈值类型——适用于单峰直方图
相关理论知识
步骤(根据以下可以进行编程)
(3)大津法和三角法的比较
三、固定阈值法(threshold)——全局阈值法
1、threshold()函数
2、threshold()参数
3、常用阈值类型下的二值化(含代码和结果)
(1)代码
(2)结果对比
4、OTSU法和TRIANGLE法(代码+结果)
(1)代码
(2)结果
四、自适应阈值法(adaptiveThreshold)——局部阈值法
1、adaptiveThreshold()函数及其参数讲解
(1)adaptiveThreshold()函数
(2)adaptiveThreshold()参数
问题2:参数blocksize和C对二值化图像的影响
(3)注意点——阈值类型是指定的、块大小长宽只能为奇数
2、自适应阈值算法
(1)平均值法(ADAPTIVE_THRESH_MEAN_C)
(2)高斯法(ADAPTIVE_THRESH_GAUSSIAN_C)
(3)代码
(4)结果
五、固定阈值和自适应阈值法比较
六、自定义阈值法
一、二值化的概念(实际上就是一个阈值化操作)
1、概念:
二值化就是将图像的灰度值转换为只有0和255,即非黑即白,黑色(0)作为背景(暗域),白色(255)作为前景即目标区域(亮域)。
2、实现方法
一般是通过设定一个阈值,大于阈值的像素全设置为0或者255,小于阈值的像素全设置为了一个灰度,这样就完成了对图像的二值化处理。
3、常用方法
常用的方法大致可以分为两类:固定阈值法和自适应阈值法
固定阈值法:表示根据阈值类型设置好一个阈值,然后进行二值化
自适应阈值法:表示根据每一个像素点的邻域模块的像素进行均值或者加权进行设置阈值,然后进行二值化
二、阈值类型
1、常见阈值类型(主要有五种类型)
(1)公式描述
(2)图表描述
2、两种特殊的阈值算法(OSTU和TRIANGLE)——主要是为了得到合理化的阈值
这两种阈值算法比较特殊,阈值的选择上比较合理化,这两种阈值都是基于图像灰度直方图来进行设置的。先获得灰度直方图,直方图的绘制可以参考:《【图像处理】——图像灰度直方图的绘制(直接调用函数和自定义函数)》
这两种算法的使用一般与上述五种算法进行搭配使用,阈值的取值按照这两种算法进行取值,而二值化的规则则按照常用的来进行。
(1)大津法OSTU阈值类型——适用于双峰直方图
OTSU算法也称最大类间差法,有时也称之为大津算法,由大津于1979年提出,被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。
它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,利于后续的图像分割,当部分前景错分为背景或部分背景错分为前景都会导致两部分差别变小。因此,使类间方差最大的分割意味着错分概率最小。
前背景方差的计算公式:
参考:https://blog.csdn.net/guduruyu/article/details/68059450
问题1:参数该怎么求解(主要依靠灰度直方图进行求解)?
答:上述方差公式也可以写成:
参考:https://blog.csdn.net/u013066730/article/details/92787627
参数的求解(根据以下的公式就可以进行编程):
公式证明推导可参考:https://www.cnblogs.com/guopengfei/p/4759569.html
T:前景与背景的分割阈值,这是待确定参数,一般采用遍历法进行求解,通常是从中间段灰度级别进行取值,向两边展开取值
w0:前景(大于阈值,亮域)点数占图像比例,在假设的阈值下,所有大于阈值的像素点个数除以图像像素点总数
u0:平均灰度,大于阈值的像素点的灰度值总和除以大于阈值的像素点数目
w1:背景(小于阈值,暗域)点数占图像比例,在假设的阈值下,所有小于阈值的像素点个数除以图像像素点总数,也可以这样通过w1=1-w0计算
u1:平均灰度,小于阈值的像素点的灰度值总和除以小于阈值的像素点数目
u:图像的总平均灰度,所有像素点的灰度值总和除以图像像素点总数,也可以通过u = w0*u0 + w1*u1进行计算
g:前景和背景图象的方差
w0+w1=1
在opencv中已经帮我们封装好了这个算法:cv.THRESH_OTSU
(2)三角法TRIANGLE阈值类型——适用于单峰直方图
相关理论知识
参考:https://blog.csdn.net/jia20003/article/details/53954092
三角法求阈值最早见于Zack的论文《Automatic measurement of sister chromatid exchange frequency》主要是用于染色体的研究,该方法是使用直方图数据,基于纯几何方法来寻找最佳阈值,它的成立条件是假设直方图最大波峰在靠近最亮的一侧,然后通过三角形求得最大直线距离,根据最大直线距离对应的直方图灰度等级即为分割阈值
在直方图上从最高峰处bmx到最暗对应直方图bmin(p=0)%构造一条直线,从bmin处开始计算每个对应的直方图b到直线的垂直距离,知道bmax为止,其中最大距离dmax对应的直方图位置即为图像二值化对应的阈值T=dmax。
有时候最大波峰对应位置不在直方图最亮一侧,而在暗的一侧,这样就需要翻转直方图,翻转之后求得值,用255减去即得到为阈值T,即T=255-dmax。扩展情况的直方图表示如下:
步骤(根据以下可以进行编程)
1. 图像转灰度
2. 计算图像灰度直方图
3. 寻找直方图中两侧边界(通过sort函数对直方图数据进行排序即可求得)
4. 寻找直方图最大值(通过max函数可以求得出现的最高频率,再通过该值进行索引的获取)
5. 检测是否最大波峰在亮的一侧,否则翻转(翻转可以使用flip函数)
6. 求解到直线的最大值(关键)
设灰度级别为L,频率为α,当频率αmax最大的时候设L=L_αmax,当Lmin时,α=α_Lmin
(1)求解直线方程:根据点(Lmin,α_Lmin)和点(L_αmax,αmax)可以确定直线l的方程,斜率以及截距可得
(2)求解各点到直线的距离:各点(L,α)到直线l的距离,根据点到直线的距离公式可以求得,用一个列表去存放所有的距离d,然后利用max函数即可求得dmax
7. 计算阈值得到阈值T=dmax,如果翻转则T=255-dmax
在opencv中已经帮我们封装好了这个算法:cv.THRESH_TRIANGLE
(3)大津法和三角法的比较
相同点:不用自己指定thresh值,系统会进行计算并且作为返回值返回。
不同点:
THRESH_OTSU最适用于双波峰。
THRESH_TRIANGLE最适用于单个波峰,最开始用于医学分割细胞等。
三、固定阈值法(threshold)——全局阈值法
固定阈值法就是给定一个阈值进行二值化,比较特殊的就是utsu和triangle法,通过一定的计算得到的阈值
1、threshold()函数
thresold(src,thresh,maxvalue,type)
#返回ret(阈值)和dst(二值化化的图像矩阵)
对于大津法和三角法,第二个参数thresh就没有意义了,因为会自动计算阈值并且优先被设置为阈值
cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)#大律法,全局自适应阈值,第二个参数值0可改为任意数字但不起作用。
cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_TRIANGLE)
#TRIANGLE法,全局自适应阈值,第二个参数值0可改为任意数字但不起作用,适用于单个波峰。
以上是和固定阈值类型进行结合使用的,也可以单独使用大津法和三角法
2、threshold()参数
src参数:表示输入图像(多通道,8位或32位浮点)。thresh参数:表示阈值。maxval参数:表示与THRESH_BINARY和THRESH_BINARY_INV阈值类型一起使用设置的最大值。type参数:表示阈值类型。ret参数:表示返回的阈值。若是全局固定阈值算法,则返回thresh参数值。若是全局自适应阈值算法,则返回自适应计算得出的合适阈值。dst参数:表示输出与src相同大小和类型以及相同通道数的图像。
3、常用阈值类型下的二值化(含代码和结果)
(1)代码
import cv2
from image_gray.image_gray_methods import gray_mean_rgb#固定阈值#cv2.THRESH_BINARY
def threshold_binary(thresh,imagepath):#需要给定的参数为阈值和图片地址gray = gray_mean_rgb(imagepath) #把输入图像灰度化#直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。ret, binary = cv2.threshold(gray, thresh, 255, cv2.THRESH_BINARY )#返回阈值以及二值化后的图像矩阵result = {"threshold":ret,"binary":binary}return resultdef threshold_binary_inv(thresh,imagepath):#需要给定的参数为阈值和图片地址gray = gray_mean_rgb(imagepath) #把输入图像灰度化#直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。ret, binary = cv2.threshold(gray, thresh, 255, cv2.THRESH_BINARY_INV )#返回阈值以及二值化后的图像矩阵return {"threshold":ret,"binary":binary}def threshold_trunc(thresh,imagepath):#需要给定的参数为阈值和图片地址gray = gray_mean_rgb(imagepath) #把输入图像灰度化#直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。ret, binary = cv2.threshold(gray, thresh, 255, cv2.THRESH_TRUNC )#返回阈值以及二值化后的图像矩阵return {"threshold":ret,"binary":binary}def threshold_tozero(thresh,imagepath):#需要给定的参数为阈值和图片地址gray = gray_mean_rgb(imagepath) #把输入图像灰度化#直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。ret, binary = cv2.threshold(gray, thresh, 255, cv2.THRESH_TOZERO )#返回阈值以及二值化后的图像矩阵return {"threshold":ret,"binary":binary}def threshold_tozero_inv(thresh,imagepath):#需要给定的参数为阈值和图片地址gray = gray_mean_rgb(imagepath) #把输入图像灰度化#直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。ret, binary = cv2.threshold(gray, thresh, 255, cv2.THRESH_TOZERO_INV )#返回阈值以及二值化后的图像矩阵return {"threshold":ret,"binary":binary}if __name__ == '__main__':imagepath = 'colorful_lena.jpg'#给定图片thresh = 120#给定阈值result = threshold_tozero_inv(120,imagepath)#接受得到的字典,含阈值和二值化图像矩阵信息thresh_value = result["threshold"]binary = result["binary"]#取值cv2.namedWindow("binary0", cv2.WINDOW_NORMAL)#cv2.WINDOW_NORMAL,使得窗口可以进行缩放cv2.imshow("binary0", binary)cv2.waitKey(0)cv2.destroyAllWindows()
上述代码可以合并为:
import cv2
from image_gray.image_gray_methods import gray_mean_rgb#全局固定阈值#需要给定的参数为阈值、阈值类型标签号和图片地址
#thresh:阈值
#flags:阈值类型标签号,0——cv2.THRESH_BINARY,1——cv2.THRESH_BINARY_INV,2——cv2.THRESH_TRUNC,
# 3——cv2.THRESH_TOZERO,4——cv2.THRESH_TOZERO_INV
def threshold_methods(thresh,flags,imagepath):thresh_type = [cv2.THRESH_BINARY,cv2.THRESH_BINARY_INV,cv2.THRESH_TRUNC,cv2.THRESH_TOZERO,cv2.THRESH_TOZERO_INV]gray = gray_mean_rgb(imagepath) #把输入图像灰度化#直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。ret, binary = cv2.threshold(gray, thresh, 255, thresh_type[flags] )#返回阈值以及二值化后的图像矩阵result = {"threshold":ret,"binary":binary}return resultif __name__ == '__main__':thresh = 100imagepath = "colorful_lena.jpg"for i in range(5):flags = ibinary = threshold_methods(thresh,flags,imagepath)["binary"]cv2.namedWindow('thresh_type_0{}'.format(flags))cv2.imshow('thresh_type_0{}'.format(flags),binary)cv2.imwrite('thresh_type_0{}.jpg'.format(flags),binary)cv2.waitKey(0)cv2.destroyAllWindows()
(2)结果对比
以下图像均是在阈值为100的前提下进行的
不同的图片可以根据图片自身的特点进行选取
4、OTSU法和TRIANGLE法(代码+结果)
(1)代码
import cv2
from image_gray.image_gray_methods import gray_mean_rgb#全局固定阈值#需要给定的参数为阈值算法标签号和图片地址
#flags:阈值类型标签号,0——cv2.THRESH_OTSU,1——cv2.THRESH_TRIANGLE
def threshold_methods(flags,imagepath):thresh_type = [cv2.THRESH_OTSU,cv2.THRESH_TRIANGLE]gray = gray_mean_rgb(imagepath) #把输入图像灰度化#直接阈值化是对输入的单通道矩阵逐像素进行阈值分割。ret, binary = cv2.threshold(gray, 0, 255, thresh_type[flags] )#返回自适应计算的阈值以及二值化后的图像矩阵result = {"threshold":ret,"binary":binary}return resultif __name__ == '__main__':imagepath = "colorful_lena.jpg"for i in range(2):flags = ibinary = threshold_methods(flags,imagepath)["binary"]cv2.namedWindow('ostu_triangle_0{}'.format(flags))cv2.imshow('ostu_triangle_0{}'.format(flags),binary)cv2.imwrite('ostu_triangle_0{}.jpg'.format(flags),binary)cv2.waitKey(0)cv2.destroyAllWindows()
(2)结果
可见三角法二值化的结果好一些,细节都保留了
四、自适应阈值法(adaptiveThreshold)——局部阈值法
自适应阈值法也叫做局部阈值法,对每一个像素点的阈值都是不一样的,计算量比较大,基本的思路就是以目标像素点为中心选择一个块,然后对块区域里面的像素点进行高斯或者均值计算,将得到的平均值或者高斯值作为目标像素点的阈值,以此来对目标像素格进行二值化。对图像每一个像素格进行如此操作就完成了对整个图像的二值化处理。
1、adaptiveThreshold()函数及其参数讲解
(1)adaptiveThreshold()函数
adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C)
#返回二值化后的图像矩阵-> dst
(2)adaptiveThreshold()参数
src参数:表示输入图像(8位单通道图像)。maxValue参数:表示使用 THRESH_BINARY 和 THRESH_BINARY_INV 的最大值.adaptiveMethod参数:表示自适应阈值算法,平均 (ADAPTIVE_THRESH_MEAN_C)或高斯(ADAPTIVE_THRESH_GAUSSIAN_C)。thresholdType参数:表示阈值类型,必须为THRESH_BINARY或THRESH_BINARY_INV的阈值类型。blockSize参数:表示块大小(奇数且大于1,比如3,5,7........ )。C参数:常数,表示从平均值或加权平均值中减去的数。 通常情况下,这是正值,但也可能为零或负值。
问题2:参数blocksize和C对二值化图像的影响
答:这里参数注意有blocksize和C。
一般情况下blocksize过大会导致图像细节的丢失,过小虽然保存了图像细节,但是也使得运行的时间大幅增加,因此需要进行权衡。
一般情况参数C是大于0的,C越大说明最后的阈值就会越小,这样导致的结果就是图像的大部分像素会被转换为亮域,即更多的像素点的灰度值大于阈值,被转化为255亮域。C越小时则恰恰相反
(3)注意点——阈值类型是指定的、块大小长宽只能为奇数
阈值类型固定为:THRESH_BINARY 和 THRESH_BINARY_INV
块大小一定为奇数:必须保证目标像素点在块的中心
2、自适应阈值算法
在使用平均和高斯两种算法情况下,通过计算每个像素周围blockSize x blockSize大小像素块的加权均值并减去常量C即可得到自适应阈值
(1)平均值法(ADAPTIVE_THRESH_MEAN_C)
平均值法就是对目标像素点的周围取一定size(为奇数)的块区域,将该区域的像素点灰度值的平均值再减去参数C的值得到的值作为阈值
(2)高斯法(ADAPTIVE_THRESH_GAUSSIAN_C)
使用高斯的方法,则每个像素周围像素的权值则根据其到中心点的距离通过高斯方程得到,然后阈值就会等于各像素点权值乘以灰度值的积的累加再减去C,权值的和为1
(3)代码
import cv2
from image_gray.image_gray_methods import gray_mean_rgb#全局固定阈值#需要给定的参数为阈值算法标签号、自适应阈值算法标签号、块的尺寸、参数C和图片地址
#flags:阈值类型标签号,0——cv2.THRESH_BINARY,1——cv2.THRESH_BINARY_INV
#tags:自适应阈值算法标签号,0——cv2.ADAPTIVE_THRESH_MEAN_C,1——cv2.ADAPTIVE_THRESH_GAUSSIAN_C
#blocksize:块的尺寸,为奇数
def threshold_local_methods(tags,flags,blocksize,C,imagepath):thresh_type = [cv2.THRESH_BINARY,cv2.THRESH_BINARY_INV]thresh_methods = [cv2.ADAPTIVE_THRESH_MEAN_C,cv2.ADAPTIVE_THRESH_GAUSSIAN_C]gray = gray_mean_rgb(imagepath) #把输入图像灰度化binary = cv2.adaptiveThreshold(gray, 255, thresh_methods[tags],thresh_type[flags],blocksize,C )#返回二值化后的图像矩阵return binaryif __name__ == '__main__':imagepath = "colorful_lena.jpg"
#以下是进行循环使用阈值类型和自适应阈值算法搭配,共四种for i in range(2):for j in range(2):tags = iflags = jbinary = threshold_local_methods(tags,flags,blocksize=5,C=1,imagepath=imagepath)cv2.namedWindow('mean_gauss{}{}'.format(tags,flags))cv2.imshow('mean_gauss{}{}'.format(tags,flags),binary)cv2.imwrite('mean_gauss{}{}.jpg'.format(tags,flags),binary)cv2.waitKey(0)cv2.destroyAllWindows()
(4)结果
参数为:C=1,blocksize=5
五、固定阈值和自适应阈值法比较
固定阈值的二值化效果一般比较差,尤其是在处理亮度差别很大的图像,它是对整个图像进行阈值操作,图像比较平滑,细节较少
自适应阈值法则是围绕目标像素点的一小块区域进行阈值化操作,效果会更好,图像的细纹都保留了下来,即图像细节得到了保存。
因此在以后二值化时选用自适应阈值法是优选
六、自定义阈值法
直接上代码不再赘述
这里是将全局平均值作为阈值进行二值化
import cv2
import numpy as np
#用户自己计算阈值
def custom_threshold(imagepath):img = cv2.imread(imagepath)gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) #把输入图像灰度化h, w =gray.shape[:2]#获得灰度化后图像矩阵的高以及宽m = np.reshape(gray, [1,w*h])#将灰度化的矩阵reshape成一维的便于计算累和mean = m.sum()/(w*h)#求整个矩阵的元素的总和的平均值ret, binary = cv2.threshold(gray, mean, 255, cv2.THRESH_BINARY)result = {"threshold":ret,"binary":binary}return resultif __name__ == '__main__':imagepath = "colorful_lena.jpg"binary = custom_threshold(imagepath)["binary"]cv2.namedWindow("binary2", cv2.WINDOW_NORMAL)cv2.imshow("binary2", binary)cv2.waitKey(0)cv2.destroyAllWindows()
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 基于ege的飞机大战
基于ege图形库的炫酷飞机大战源代码及图片素材.7z基于ege图形库,用vs2019写的一个飞机大战,键盘操作,可以开火和变身强化,有大招技能,打不过还有充值系统,不充钱还有惩罚(╹ڡ╹ ),运行需要vc运行库需要vc运行库!!!使用代码记得去ege官网下载合适的ege。立即下载基于…...
2024/4/16 13:10:26 - 基于ege的飞机大战
基于ege图形库的炫酷飞机大战源代码及图片素材.7z基于ege图形库,用vs2019写的一个飞机大战,键盘操作,可以开火和变身强化,有大招技能,打不过还有充值系统,不充钱还有惩罚(╹ڡ╹ ),运行需要vc运行库需要vc运行库!!!使用代码记得去ege官网下载合适的ege。立即下载基于…...
2024/4/16 13:09:40 - python pytest raises()
import pytest def test_zero_division():with pytest.raises(ZeroDivisionError) as excinfo://在该上下文下写跑一场的函数1 / 0assert excinfo.type == ZeroDivisionError # 断言异常类型typeassert "division by zero" in str(excinfo.value) # 断言异常value值参…...
2024/4/17 16:37:21 - python pytest raises()
import pytest def test_zero_division():with pytest.raises(ZeroDivisionError) as excinfo://在该上下文下写跑一场的函数1 / 0assert excinfo.type == ZeroDivisionError # 断言异常类型typeassert "division by zero" in str(excinfo.value) # 断言异常value值参…...
2024/4/17 15:08:40 - python pytest mark
默认情况下pytest会测试所有的函数,但是有些时候我们只想测试指定的函数,这就需要用到mark @pytest.mark.finished @pytest.mark.unfinished @pytest.mark.skip 跳过import pytest @pytest.mark.finished def test1_fun():assert 1 == 1@pytest.mark.unfinished def test2_fun(…...
2024/4/16 13:11:17 - python pytest mark
默认情况下pytest会测试所有的函数,但是有些时候我们只想测试指定的函数,这就需要用到mark @pytest.mark.finished @pytest.mark.unfinished @pytest.mark.skip 跳过import pytest @pytest.mark.finished def test1_fun():assert 1 == 1@pytest.mark.unfinished def test2_fun(…...
2024/4/16 13:11:42 - python pytest mark.parametrize
虽然可以在测试函数内循环遍历所有参数的可能性,但一旦失败就终止了,即使try结果也比较南分析,所以可以使用pytest.mark.parametrize(argnames, argvalues) # test_parametrize.py@pytest.mark.parametrize(passwd,[123456,abcdefdfs,as52345fasdf4]) # 会执行3次 def test_pas…...
2024/4/16 13:12:09 - python pytest 前置后置
有些函数需要连接数据库,可以把连接数据库和断开数据的操作放在,指定的函数里. 这样每次测试函数的时候,都调取这个链接数据库的函数即可 # test_db.py@pytest.fixture() def db():print(Connection successful)yieldprint(Connection closed)def search_user(user_id):d = {00…...
2024/4/1 0:34:17 - LeetCode 75. 颜色分类(三指针)
Description 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例:输入:…...
2024/4/16 13:11:53 - python中的类型提示(type hint)
在刷leetcode或者一些官方源码的时候,经常看到如下字样: class Solution:def sortList(self, head: ListNode) -> ListNode:这就是类型提示(type hint),下面来个简单的例子, def greeting(name: str) -> str:return Hello + name如上,其中name是传入的参数,而:右边…...
2024/4/17 23:34:35 - Java数据结构与算法(剑指offer)——输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意…...
2024/4/16 13:11:32 - 复阻抗传递函数
在画控制系统方框图时,需要将从输入量到输出量的所有中间变量及传递函数写出,以便画图,在电路系统中时常遇到电感和电容,其传递函数推导如下: 1.电容传递函数: 电容输入输出关系 以uc(t)u_c(t)uc(t)为输出,i(t)i(t)i(t)为输入,则有: i(t)=Cduc(t)dti(t)=C \frac{du_…...
2024/4/16 13:11:37 - Java的数据类型
//整形(属于整型的4个基本数据类型)byte a1=127;//可装最大值 (2^7)-1byte a2=-128;//可装最小值 -2^7short b1=32767;//可装最大值 (2^15)-1short b2=-32768;//可装最小值 -2^15int c1=2147483647;//可装最大值 (2^31)-1int c2=-2147483648;//可装最小值 -2^31long d1=92233…...
2024/4/16 13:11:47 - 常见排序的复杂度比较
Python中sort()函数用的排序算法是Timsort算法 Timsort算法 :时间复杂度O(nlogn)空间复杂度O(n)...
2024/4/16 13:11:32 - R语言---使用RTCGA包获取TCGA数据---笔记整理
原文链接:https://mp.weixin.qq.com/s?__biz=MzAxMDkxODM1Ng==&mid=2247486585&idx=1&sn=3035f6420904aad2c8161b362cdeb472&chksm=9b484cc2ac3fc5d479fc5bce3d68d4666b763652a21a55b281aad8c0c4df9b56b4d3b353cc4c&scene=21#wechat_redirect1.RTCGA相关…...
2024/4/19 19:41:06 - Markdown学习之路
Markdown学习之路 目录 前言 推荐的教程 markdown语法总结标题及正文 字体 转义字符 分割线 列表 区块引用 代码框 图片插入 链接 表格 数学公式 流程图 Markdown-preview-enhanced插件的扩展语法遇到过的问题前言本文目的在于记录自己的Markdown学习之路,文中推荐了自己比较喜…...
2024/4/16 13:11:32 - 【庖丁解牛】从零实现RetinaNet(终):不同分辨率下RetinaNet的性能表现
文章目录 所有代码已上传到本人github repository:https://github.com/zgcr/pytorch-ImageNet-CIFAR-COCO-VOC-training 如果觉得有用,请点个star哟! 代码均在pytorch1.4版本中测试过,确认正确无误。 之前有同学提出从零实现RetinaNet(二)中与原论文点数对标的换算方式不…...
2024/4/16 13:11:43 - 3类线程安全、线程安全应用场景、性能问题
https://kaiwu.lagou.com/course/courseInfo.htm?courseId=16#/detail/pc?id=2443 类线程安全问题?线程安全问题主要有 3 种,i++ 等情况导致的运行结果错误,通常是因为并发读写导致的,第二种是对象没有在正确的时间、地点被发布或初始化,而第三种线程安全问题就是活跃性…...
2024/4/16 13:11:47 - (Python Primary) - 廖雪峰Python3 - 9.面向对象高级编程
9.面向对象高级编程 9.1使用__slots__在动态语言中,实例可以轻松绑定一个属性,但直接绑定一个方法,对另一个实例是不起作用的>>> def set_age(self, age): # 定义一个函数作为实例方法 ... self.age = age ... >>> from types import MethodType >…...
2024/4/16 13:12:14 - 链队列
链队列 #include<stdio.h> #include<stdlib.h> typedef int datatype; typedef struct Queuenode{datatype data;struct Queuenode *next; }Node; typedef struct Queuelink{struct Queuenode *front,*rear; }Qlink;void init(Qlink *q){q->front = (Node *)mal…...
2024/4/19 15:23:28
最新文章
- Spring Boot 加载本地 JAR 包的技术实践
随着微服务架构的兴起,Spring Boot 因其快速构建、易于部署的特性,成为了众多开发者的首选框架。在开发过程中,我们有时需要引入一些不在公共 Maven 仓库中的 JAR 包作为依赖,这时候就需要加载本地的 JAR 包。本文将详细介绍在 Sp…...
2024/4/20 7:43:41 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 01背包问题 小明的背包
2.小明的背包1 - 蓝桥云课 (lanqiao.cn) #include <bits/stdc.h> using namespace std; const int N1010;//开始写的105 开小了 样例过了但最后只过了很少一部分 int n,m; int v[N],w[N]; int f[N][N];int main() {cin>>n>>m;for(int i1;i<n;i){cin>&…...
2024/4/19 3:30:04 - C# 抽象类、接口
(1)、抽象类和抽象方法的定义和实现:abstract override abstract class Vehicle{ public abstract void Run(); } 继承抽象类并且实现抽象方法 class RaceCar : Vehicle{ public override void Run(){ } } (2)、接口的…...
2024/4/19 7:49:52 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/19 14:24:02 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/19 18:20:22 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/19 11:57:31 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/19 11:57:31 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/19 11:57:52 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/19 11:57:53 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/19 11:58:14 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/19 11:58:20 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/20 7:40:48 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/19 11:58:39 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/19 11:58:51 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/20 3:12:02 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/19 11:59:15 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/19 11:59:23 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/19 11:59:44 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/19 11:59:48 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/19 12:00:06 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/19 16:57:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/19 12:00:25 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/19 12:00:40 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57