当前位置: 首页 > news >正文

itk中的一些图像处理

文章目录

      • 1.BinomialBlurImageFilter计算每个维度上的最近邻居平均值
      • 2.高斯平滑
      • 3.图像的高阶导数 RecursiveGaussianImageFilter
      • 4.均值滤波
      • 5.中值滤波
      • 6.离散高斯平滑
      • 7.曲率驱动流去噪图像 CurvatureFlowImageFilter
      • 8.由参数alpha和beta控制的幂律自适应直方图均衡化
      • 9.Canny 边缘检测
      • 10.Sobel边缘检测和基于过零的边缘检测

保存图像和读取图像

import itk
import cv2
import matplotlib.pyplot as plt
import numpy as npdef saveImage(inImage,savePath):writer = itk.ImageFileWriter[type(inImage)].New()writer.SetFileName(savePath)writer.SetInput(inImage)writer.Update()PixelType = itk.UC
Dimension = 2
ImageType = itk.Image[PixelType, Dimension]
imagePath1 = r'D:\svnproject\drrimage.tif'
reader1 = itk.ImageFileReader[ImageType].New()
reader1.SetFileName(imagePath1)
reader1.Update()
image1 = reader1.GetOutput()

1.BinomialBlurImageFilter计算每个维度上的最近邻居平均值

#BinomialBlurImageFilter计算每个维度上的最近邻居平均值。根据用户的指定,该过程将重复多次。原则上,经过大量的迭代,结果将接近高斯卷积。
#https://examples.itk.org/src/filtering/smoothing/blurringanimageusingabinomialkernel/documentation
#number_of_repetitions(整型)值越大,图像越模糊
def SmoothingWithBinomialKernel(inputImage,number_of_repetitions):ImageType = type(inputImage)binomialFilter = itk.BinomialBlurImageFilter[ImageType,ImageType].New()binomialFilter.SetInput(inputImage)binomialFilter.SetRepetitions(number_of_repetitions)rescaler = itk.RescaleIntensityImageFilter[ImageType, ImageType].New()rescaler.SetInput(binomialFilter.GetOutput())rescaler.SetOutputMinimum(0)rescaler.SetOutputMaximum(255)outputFileName = 'outImage_'+str(number_of_repetitions)+'.png'saveImage(rescaler.GetOutput(),outputFileName)return rescaler.GetOutput()resImage1 = SmoothingWithBinomialKernel(image1,1)
resImage2 = SmoothingWithBinomialKernel(image1,10)
resImage3 = SmoothingWithBinomialKernel(image1,20)
resImage4 = SmoothingWithBinomialKernel(image1,50)
resImage5 = SmoothingWithBinomialKernel(image1,100)
resImage6 = SmoothingWithBinomialKernel(image1,150)
plt.subplot(231),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('repetitions1')
plt.subplot(232),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('repetitions10')
plt.subplot(233),plt.imshow(itk.GetArrayFromImage(resImage3),'gray'),plt.title('repetitions20')
plt.subplot(234),plt.imshow(itk.GetArrayFromImage(resImage4),'gray'),plt.title('repetitions50')
plt.subplot(235),plt.imshow(itk.GetArrayFromImage(resImage5),'gray'),plt.title('repetitions100')
plt.subplot(236),plt.imshow(itk.GetArrayFromImage(resImage6),'gray'),plt.title('repetitions150')
plt.show()

结果:
在这里插入图片描述

2.高斯平滑

#通过高斯核卷积计算图像的平滑。 https://examples.itk.org/src/filtering/smoothing/computessmoothingwithgaussiankernel/documentation?highlight=smooth
# sigmaValue(浮点型,可以大于1.0)值越大,图像越模糊
def SmoothingWithGaussianKernel(inputImage,sigmaValue):ImageType = type(inputImage)smoothFilter = itk.SmoothingRecursiveGaussianImageFilter[ImageType, ImageType].New()smoothFilter.SetInput(inputImage)smoothFilter.SetSigma(sigmaValue)outputFileName = 'outImage_'+str(sigmaValue)+'.png'saveImage(smoothFilter.GetOutput(),outputFileName)return smoothFilter.GetOutput()#高斯平滑
resImage1 = SmoothingWithGaussianKernel(image1,0.1)
resImage2 = SmoothingWithGaussianKernel(image1,0.5)
resImage3 = SmoothingWithGaussianKernel(image1,0.9)
resImage4 = SmoothingWithGaussianKernel(image1,1.5)
resImage5 = SmoothingWithGaussianKernel(image1,2.5)
resImage6 = SmoothingWithGaussianKernel(image1,5.5)
plt.subplot(231),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('sigmaValue0.1')
plt.subplot(232),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('sigmaValue0.5')
plt.subplot(233),plt.imshow(itk.GetArrayFromImage(resImage3),'gray'),plt.title('sigmaValue0.9')
plt.subplot(234),plt.imshow(itk.GetArrayFromImage(resImage4),'gray'),plt.title('sigmaValue1.5')
plt.subplot(235),plt.imshow(itk.GetArrayFromImage(resImage5),'gray'),plt.title('sigmaValue2.5')
plt.subplot(236),plt.imshow(itk.GetArrayFromImage(resImage6),'gray'),plt.title('sigmaValue5.5')
plt.show()

结果:
在这里插入图片描述

3.图像的高阶导数 RecursiveGaussianImageFilter

#求图像的高阶导数。https://examples.itk.org/src/filtering/smoothing/findhigherderivativesofimage/documentation
#axisType--0表示x轴,1表示y轴  (突出边界)
def SmoothingWithHigherDerivatives(inputImage,axisType):ImageType = type(inputImage)gaussianFilter = itk.RecursiveGaussianImageFilter[ImageType, ImageType].New()gaussianFilter.SetInput(inputImage)gaussianFilter.SetDirection(axisType) #"x" axisgaussianFilter.SetSecondOrder()outputFileName = 'outImage_'+str(axisType)+'.png'saveImage(gaussianFilter.GetOutput(),outputFileName)return gaussianFilter.GetOutput()#求图像的高阶导数
resImage1 = SmoothingWithHigherDerivatives(image1,0)
resImage2 = SmoothingWithHigherDerivatives(image1,1)
plt.subplot(121),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('axisType X')
plt.subplot(122),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('axisType Y')
plt.show()

结果:
在这里插入图片描述

4.均值滤波

#对图像应用均值滤波。https://examples.itk.org/src/filtering/smoothing/meanfilteringofanimage/documentation
# radius(整型)值越大,图像越模糊
def SmoothingWithMeanFiltering(inputImage,radius):ImageType = type(inputImage)meanFilter = itk.MeanImageFilter[ImageType, ImageType].New()meanFilter.SetInput(inputImage)meanFilter.SetRadius(radius)outputFileName = 'outImage_'+str(radius)+'.png'saveImage(meanFilter.GetOutput(),outputFileName)return meanFilter.GetOutput()#均值滤波
resImage1 = SmoothingWithMeanFiltering(image1,1)
resImage2 = SmoothingWithMeanFiltering(image1,5)
resImage3 = SmoothingWithMeanFiltering(image1,10)
resImage4 = SmoothingWithMeanFiltering(image1,20)
resImage5 = SmoothingWithMeanFiltering(image1,40)
resImage6 = SmoothingWithMeanFiltering(image1,80)
plt.subplot(231),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('radius1')
plt.subplot(232),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('radius5')
plt.subplot(233),plt.imshow(itk.GetArrayFromImage(resImage3),'gray'),plt.title('radius10')
plt.subplot(234),plt.imshow(itk.GetArrayFromImage(resImage4),'gray'),plt.title('radius20')
plt.subplot(235),plt.imshow(itk.GetArrayFromImage(resImage5),'gray'),plt.title('radius40')
plt.subplot(236),plt.imshow(itk.GetArrayFromImage(resImage6),'gray'),plt.title('radius80')
plt.show()

结果:
在这里插入图片描述

5.中值滤波

#在图像上应用中值滤波。https://examples.itk.org/src/filtering/smoothing/medianfilteringofanimage/documentation
#radius(整型)值越大,图像越模糊
def SmoothingWithMedianFiltering(inputImage,radius):ImageType = type(inputImage)medianFilter = itk.MedianImageFilter[ImageType, ImageType].New()medianFilter.SetInput(inputImage)medianFilter.SetRadius(radius)outputFileName = 'outImage_'+str(radius)+'.png'saveImage(medianFilter.GetOutput(),outputFileName)return medianFilter.GetOutput()resImage1 = SmoothingWithMedianFiltering(image1,1)
resImage2 = SmoothingWithMedianFiltering(image1,5)
resImage3 = SmoothingWithMedianFiltering(image1,10)
resImage4 = SmoothingWithMedianFiltering(image1,20)
resImage5 = SmoothingWithMedianFiltering(image1,40)
resImage6 = SmoothingWithMedianFiltering(image1,80)
plt.subplot(231),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('radius1')
plt.subplot(232),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('radius5')
plt.subplot(233),plt.imshow(itk.GetArrayFromImage(resImage3),'gray'),plt.title('radius10')
plt.subplot(234),plt.imshow(itk.GetArrayFromImage(resImage4),'gray'),plt.title('radius20')
plt.subplot(235),plt.imshow(itk.GetArrayFromImage(resImage5),'gray'),plt.title('radius40')
plt.subplot(236),plt.imshow(itk.GetArrayFromImage(resImage6),'gray'),plt.title('radius80')
plt.show()

结果:
在这里插入图片描述

6.离散高斯平滑

#用离散高斯滤波器平滑图像。https://examples.itk.org/src/filtering/smoothing/smoothimagewithdiscretegaussianfilter/documentation
# variance(浮点型,可以大于1.0)值越大,图像越模糊
def SmoothWithDiscreteGaussianfilter(inputImage,variance):ImageType = type(inputImage)gaussianFilter = itk.DiscreteGaussianImageFilter[ImageType, ImageType].New()gaussianFilter.SetInput(inputImage)gaussianFilter.SetVariance(variance) outputFileName = 'outImage_'+str(variance)+'.png'saveImage(gaussianFilter.GetOutput(),outputFileName)return gaussianFilter.GetOutput()#离散高斯滤波器平滑图像
resImage1 = SmoothWithDiscreteGaussianfilter(image1,1.0)
resImage2 = SmoothWithDiscreteGaussianfilter(image1,4.0)
resImage3 = SmoothWithDiscreteGaussianfilter(image1,8.0)
resImage4 = SmoothWithDiscreteGaussianfilter(image1,15.0)
resImage5 = SmoothWithDiscreteGaussianfilter(image1,30.0)
resImage6 = SmoothWithDiscreteGaussianfilter(image1,50.0)
plt.subplot(231),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('variance1')
plt.subplot(232),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('variance4')
plt.subplot(233),plt.imshow(itk.GetArrayFromImage(resImage3),'gray'),plt.title('variance8')
plt.subplot(234),plt.imshow(itk.GetArrayFromImage(resImage4),'gray'),plt.title('variance15')
plt.subplot(235),plt.imshow(itk.GetArrayFromImage(resImage5),'gray'),plt.title('variance30')
plt.subplot(236),plt.imshow(itk.GetArrayFromImage(resImage6),'gray'),plt.title('variance50')
plt.show()

结果:
在这里插入图片描述

7.曲率驱动流去噪图像 CurvatureFlowImageFilter


#使用曲率驱动流去噪图像。https://examples.itk.org/src/filtering/anisotropicsmoothing/computecurvatureflow/documentation?highlight=denois
#time_step越大,迭代次数越多,图像越暗
def DenoiseImageWithCurvatureDrivenFlow(inputImagePath,number_of_iterations,time_step):PixelType = itk.FDimension = 2ImageType = itk.Image[PixelType, Dimension]reader = itk.ImageFileReader[ImageType].New()reader.SetFileName(inputImagePath)reader.Update()ImageType = type(reader.GetOutput())FilterType = itk.CurvatureFlowImageFilter[ImageType, ImageType]curvatureFlowFilter = FilterType.New()curvatureFlowFilter.SetInput(reader.GetOutput())curvatureFlowFilter.SetNumberOfIterations(number_of_iterations)curvatureFlowFilter.SetTimeStep(time_step)OutputImageType = itk.Image[itk.UC,2]RescaleFilterType = itk.RescaleIntensityImageFilter[ImageType, OutputImageType]rescaler = RescaleFilterType.New()rescaler.SetInput(curvatureFlowFilter.GetOutput())outputPixelTypeMinimum = itk.NumericTraits[itk.UC].min()outputPixelTypeMaximum = itk.NumericTraits[itk.UC].max()rescaler.SetOutputMinimum(outputPixelTypeMinimum)rescaler.SetOutputMaximum(outputPixelTypeMaximum)outputFileName = 'outImage_'+str(number_of_iterations)+'_'+str(time_step)+'.png'saveImage(rescaler.GetOutput(),outputFileName)return rescaler.GetOutput()#使用曲率驱动流去噪图像
resImage1 = DenoiseImageWithCurvatureDrivenFlow(imagePath1,1,0.5)
resImage2 = DenoiseImageWithCurvatureDrivenFlow(imagePath1,3,0.5)
resImage3 = DenoiseImageWithCurvatureDrivenFlow(imagePath1,6,0.5)
resImage4 = DenoiseImageWithCurvatureDrivenFlow(imagePath1,1,2.5)
resImage5 = DenoiseImageWithCurvatureDrivenFlow(imagePath1,3,2.5)
resImage6 = DenoiseImageWithCurvatureDrivenFlow(imagePath1,6,2.5)
plt.subplot(231),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('iterations1,time_step 0.5')
plt.subplot(232),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('iterations3,time_step 0.5')
plt.subplot(233),plt.imshow(itk.GetArrayFromImage(resImage3),'gray'),plt.title('iterations6,time_step 0.5')
plt.subplot(234),plt.imshow(itk.GetArrayFromImage(resImage4),'gray'),plt.title('iterations1,time_step 2.5')
plt.subplot(235),plt.imshow(itk.GetArrayFromImage(resImage5),'gray'),plt.title('iterations3,time_step 2.5')
plt.subplot(236),plt.imshow(itk.GetArrayFromImage(resImage6),'gray'),plt.title('iterations6,time_step 2.5')
plt.show()

结果:
在这里插入图片描述

8.由参数alpha和beta控制的幂律自适应直方图均衡化


# 应用由参数alpha和beta控制的幂律自适应直方图均衡化。
# https://examples.itk.org/src/filtering/imagestatistics/adaptivehistogramequalizationimagefilter/documentation?highlight=histogram
# 参数alpha控制了过滤器有多像经典直方图均衡化方法(alpha = 0),到过滤器有多像非锐化蒙版(alpha = 1)。
# 参数beta控制过滤器在多大程度上像非锐化蒙版(beta = 0)和过滤器在多大程度上像穿透(beta = 1,其中alpha = 1)。
# 参数窗口(或半径)控制计算局部统计信息的区域的大小。
# alpha:浮点型  beta:浮点型   radius:整型
def ImageHistogramEqualization(inputImage,alpha,beta,radius):ImageType = type(inputImage)histogramEqualization = itk.AdaptiveHistogramEqualizationImageFilter[ImageType].New()histogramEqualization.SetInput(inputImage)histogramEqualization.SetAlpha(alpha)histogramEqualization.SetBeta(beta)radiusArr = itk.Size[2]()radiusArr.Fill(radius)histogramEqualization.SetRadius(radiusArr)outputFileName = 'outImage_'+str(alpha)+'_'+str(beta)+'_'+str(radius)+'.png'itk.imwrite(histogramEqualization, outputFileName)return histogramEqualization.GetOutput()#自适应直方图均衡化
resImage1 = ImageHistogramEqualization(image1,0.0,1.0,3)
resImage2 = ImageHistogramEqualization(image1,1.0,0.0,3)
resImage3 = ImageHistogramEqualization(image1,0.5,0.5,3)
resImage4 = ImageHistogramEqualization(image1,0.0,1.0,7)
resImage5 = ImageHistogramEqualization(image1,1.0,0.0,7)
resImage6 = ImageHistogramEqualization(image1,0.5,0.5,7)
plt.subplot(231),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('alpha0.0,beta1.0,radius3')
plt.subplot(232),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('alpha1.0,beta0.0,radius3')
plt.subplot(233),plt.imshow(itk.GetArrayFromImage(resImage3),'gray'),plt.title('alpha0.5,beta0.5,radius3')
plt.subplot(234),plt.imshow(itk.GetArrayFromImage(resImage4),'gray'),plt.title('alpha0.0,beta1.0,radius7')
plt.subplot(235),plt.imshow(itk.GetArrayFromImage(resImage5),'gray'),plt.title('alpha1.0,beta0.0,radius7')
plt.subplot(236),plt.imshow(itk.GetArrayFromImage(resImage6),'gray'),plt.title('alpha0.5,beta0.5,radius7')
plt.show()

结果:
在这里插入图片描述

9.Canny 边缘检测

用之前的图像存在问题,以后有时间找原因


#使用 Canny 边缘检测过滤器检测边缘
#https://examples.itk.org/src/filtering/imagefeature/detectedgeswithcannyedgedetectionfilter/documentation?highlight=edge
def CannyEdgeDetectionImageFilter(inputImagePath,variance,lower_threshold,upper_threshold):InputPixelType = itk.FOutputPixelType = itk.UCDimension = 2InputImageType = itk.Image[InputPixelType, Dimension]OutputImageType = itk.Image[OutputPixelType, Dimension]reader = itk.ImageFileReader[InputImageType].New()reader.SetFileName(inputImagePath)cannyFilter = itk.CannyEdgeDetectionImageFilter[InputImageType, InputImageType].New()cannyFilter.SetInput(reader.GetOutput())cannyFilter.SetVariance(variance)cannyFilter.SetLowerThreshold(lower_threshold)cannyFilter.SetUpperThreshold(upper_threshold)rescaler = itk.RescaleIntensityImageFilter[InputImageType, OutputImageType].New()rescaler.SetInput(cannyFilter.GetOutput())rescaler.SetOutputMinimum(0)rescaler.SetOutputMaximum(255)outputFileName = 'outImage_'+str(variance)+'_'+str(lower_threshold)+'_'+str(upper_threshold)+'.png'saveImage(rescaler.GetOutput(),outputFileName)return rescaler.GetOutput()#Canny 边缘检测
imagePath1 = r'D:\dell\picture\lena.png'
resImage1 = CannyEdgeDetectionImageFilter(imagePath1,0.1,0,255)
resImage2 = CannyEdgeDetectionImageFilter(imagePath1,0.5,0,255)
resImage3 = CannyEdgeDetectionImageFilter(imagePath1,1.0,0,255)
resImage4 = CannyEdgeDetectionImageFilter(imagePath1,5.0,0,255)
resImage5 = CannyEdgeDetectionImageFilter(imagePath1,10.0,0,255)
resImage6 = CannyEdgeDetectionImageFilter(imagePath1,50.0,0,255)
plt.subplot(231),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('variance0.1')
plt.subplot(232),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('variance0.5')
plt.subplot(233),plt.imshow(itk.GetArrayFromImage(resImage3),'gray'),plt.title('variance1.0')
plt.subplot(234),plt.imshow(itk.GetArrayFromImage(resImage4),'gray'),plt.title('variance5.0')
plt.subplot(235),plt.imshow(itk.GetArrayFromImage(resImage5),'gray'),plt.title('variance10')
plt.subplot(236),plt.imshow(itk.GetArrayFromImage(resImage6),'gray'),plt.title('variance50')
plt.show()

结果:
在这里插入图片描述

10.Sobel边缘检测和基于过零的边缘检测


#将 SobelEdgeDetectionImageFilter 应用于图像
#https://examples.itk.org/src/filtering/imagefeature/sobeledgedetectionimagefilter/documentation?highlight=edge
def SobelEdgeDetectionImageFilter(inputImagePath):input_image = itk.imread(inputImagePath, pixel_type=itk.F)output_image = itk.sobel_edge_detection_image_filter(input_image)rescaler = itk.RescaleIntensityImageFilter[type(output_image), itk.Image[itk.UC, 2]].New()rescaler.SetInput(output_image)rescaler.SetOutputMinimum(0)rescaler.SetOutputMaximum(255)outputFileName = 'outImage_obelEdgeDetection.png'saveImage(rescaler.GetOutput(),outputFileName)return rescaler.GetOutput()#基于过零的边缘检测
#https://examples.itk.org/src/filtering/imagefeature/zerocrossingbasededgedecor/documentation?highlight=edge
def ZerocrossingEdgeDetecor(inputImagePath,variance=5.0):FloatImageType = itk.Image[itk.F, 2]FilterType = itk.ZeroCrossingBasedEdgeDetectionImageFilter[FloatImageType, FloatImageType]input_image = itk.imread(inputImagePath, pixel_type=itk.F)edgeDetector = FilterType.New()edgeDetector.SetInput(input_image)edgeDetector.SetVariance(variance)rescaler = itk.RescaleIntensityImageFilter[type(edgeDetector.GetOutput()), itk.Image[itk.UC, 2]].New()rescaler.SetInput(edgeDetector.GetOutput())rescaler.SetOutputMinimum(0)rescaler.SetOutputMaximum(255)outputFileName = 'outImage_ZerocrossingEdgeDetection'+str(variance)+'.png'saveImage(rescaler.GetOutput(),outputFileName)return rescaler.GetOutput()#Sobel边缘检测
resImage1 = SobelEdgeDetectionImageFilter(imagePath1)# 基于过零的边缘检测
resImage2 = ZerocrossingEdgeDetecor(imagePath1,0.1)
resImage3 = ZerocrossingEdgeDetecor(imagePath1,0.5)
resImage4 = ZerocrossingEdgeDetecor(imagePath1,1.0)
resImage5 = ZerocrossingEdgeDetecor(imagePath1,5.0)
resImage6 = ZerocrossingEdgeDetecor(imagePath1,20.0)plt.subplot(231),plt.imshow(itk.GetArrayFromImage(resImage1),'gray'),plt.title('Sobel')
plt.subplot(232),plt.imshow(itk.GetArrayFromImage(resImage2),'gray'),plt.title('variance0.1')
plt.subplot(233),plt.imshow(itk.GetArrayFromImage(resImage3),'gray'),plt.title('variance0.5')
plt.subplot(234),plt.imshow(itk.GetArrayFromImage(resImage4),'gray'),plt.title('variance1')
plt.subplot(235),plt.imshow(itk.GetArrayFromImage(resImage5),'gray'),plt.title('variance5')
plt.subplot(236),plt.imshow(itk.GetArrayFromImage(resImage6),'gray'),plt.title('variance20')
plt.show()

结果:
在这里插入图片描述

相关文章:

itk中的一些图像处理

文章目录1.BinomialBlurImageFilter计算每个维度上的最近邻居平均值2.高斯平滑3.图像的高阶导数 RecursiveGaussianImageFilter4.均值滤波5.中值滤波6.离散高斯平滑7.曲率驱动流去噪图像 CurvatureFlowImageFilter8.由参数alpha和beta控制的幂律自适应直方图均衡化9.Canny 边缘…...

Endless lseek导致的SQL异常

最近碰到同事咨询的一个问题&#xff0c;在执行一个函数时&#xff0c;发现会一直卡在那里。 strace抓了下发现会话一直在执行lseek&#xff0c;大致情况如下&#xff1a; 16:13:55.451832 lseek(33, 0, SEEK_END) 1368064 <0.000037> 16:13:55.477216 lseek(33, 0, SE…...

JUC-day01

JUC-day01 什么是JUC线程的状态: wait sleep关键字:同步锁 原理(重点)Lock接口: ReentrantLock(可重入锁)—>AQS CAS线程之间的通讯 1 什么是JUC 1.1 JUC简介 在Java中&#xff0c;线程部分是一个重点&#xff0c;本篇文章说的JUC也是关于线程的。JUC就是java.util .con…...

Mind+Python+Mediapipe项目——AI健身之跳绳

原文&#xff1a;MindPythonMediapipe项目——AI健身之跳绳 - DF创客社区 - 分享创造的喜悦 【项目背景】跳绳是一个很好的健身项目&#xff0c;为了获知所跳个数&#xff0c;有的跳绳上会有计数器。但这也只能跳完这后看到&#xff0c;能不能在跳的过程中就能看到&#xff0c;…...

数据库概述

20世纪60年代后期&#xff0c;就出现了数据库技术。取得成就如下&#xff1a;造就了四位图灵奖得主发展成为以数据建模和DBMS核心技术为主&#xff0c;内容丰富的一门学科。带动了一个巨大的软件产业-DBMS产品及其相关工具和解决方案。四个基本概念数据数据是数据库中存储的基本…...

【已解决】解决IDEA的maven刷新依赖时出现Connot reconnect错误

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01;也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&#…...

动态链接库(.so)文件的变编译和引用、执行

动态链接库(.so)文件的变编译和引用 动态链接库&#xff1a;SO&#xff08;Shared Object&#xff09;是一种动态链接库&#xff0c;也被称为共享库。它是一种可被多个程序共享使用的二进制代码库&#xff0c;其中包含已编译的函数和代码。与静态链接库不同&#xff0c;动态链接…...

linux(centos8)文件解压命令

linux解压命令tar 解压命令常用解压命令1 [.tar] 文件 解压到当前文件夹2 [.tar.gz] 文件 解压到当前文件夹3 [.tar] 解压到指定文件夹 -C 必须是大写unzip 解压命令常用解压命令1 [.zip]解压到当前文件夹2 [.zip] 解压到指定文件夹2 [.zip] 解压到指定文件夹&#xff08;强行覆…...

阅读笔记6——通道混洗

一、逐点卷积 当前先进的轻量化网络大都使用深度可分离卷积或组卷积&#xff0c;以降低网络的计算量&#xff0c;但这两种操作都无法改变特征图的通道数&#xff0c;因此需要使用11的卷积。总体来说&#xff0c;逐点的11卷积有如下两点特性&#xff1a; 可以促进通道之间的信息…...

上海亚商投顾:沪指失守3300点 卫星导航概念全天强势

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。市场情绪指数早间低开后震荡回升&#xff0c;沪指盘中一度翻红&#xff0c;随后又再度走低&#xff0c;创业板指午后跌近1%。…...

疯狂的SOVA:Android银行木马“新标杆”

2021年8月初&#xff0c;一款针对Android银行APP的恶意软件出现在人们的视野中&#xff0c;ThreatFabric 安全研究人员首次发现了这一木马&#xff0c;在其C2服务器的登录面板&#xff0c;研究人员发现&#xff0c;攻击者将其称之为SOVA。 ** SO** ** V** ** A简介** 在俄语中…...

汽车零部件企业数字工厂管理系统建设方案

在汽车零部件制造领域&#xff0c;伴随工业信息化与机器人化&#xff0c;制造模式逐渐从 CAD/CAE/CAM 数字化设计及加工走向全产品周期虚拟现实的数字化工厂管理系统平台&#xff0c;实现虚拟现实设计制造&#xff0c;防范产品缺陷并预防设备故障&#xff0c;大幅提高生产效率。…...

【线程同步工具】Semaphore源码解析

控制对资源的一个或多个副本的并发访问 Java API 提供了一种信号量机制 Semaphore。 一个信号量就是一个计数器&#xff0c; 可用于保护对一个或多个共享资源的访问。 当一个线程要访问多个共享资源中的一个时&#xff0c;它首先需要获得一个信号量。如果信号量内部的计数器的…...

获取实时天气

一、用天气API&#xff08;需要付费&#xff09; 网址&#xff1a;https://www.tianqiapi.com/请求方式及url&#xff1a;请求方式&#xff1a;GET接口地址&#xff1a;https://tianqiapi.com/free/day请求示例https://www.tianqiapi.com/free/day?appid_____&appsecret__…...

【数据库】redis数据持久化

目录 数据持久化 一&#xff0c; RDB 1&#xff0c; 什么是RDB 2&#xff0c;持久化流程 3&#xff0c; 相关配置 案例演示&#xff1a; 4&#xff0c; 备份和恢复 1、备份 2、恢复 3&#xff0c;优势 4&#xff0c; 劣势 二&#xff0c;AOF 1&#xff0c;什么是A…...

前端编译、JIT编译、AOT编译

一、前端编译&#xff1a;java设计之初就是强调跨平台&#xff0c;通过javac将源文件编译成于平台无关的class文件&#xff0c; 它定义了执行 Java 程序所需的所有信息&#xff08;许多Java"语法糖"&#xff0c;是在这个阶段完成的&#xff0c;不依赖虚拟机&#xff…...

父子组件中,子组件调用父组件的方法

父子组件中&#xff0c;子组件调用父组件的方法 方法一&#xff1a;直接在子组件中通过this.$parent.event来调用父组件的方法 父组件 <template><p><child>父组件</child></p> </template> <script>import child from ~/compone…...

第七章.深度学习

第七章.深度学习 7.1 深度学习 深度学习是加深了层的深度神经网络。 1.加深层的好处 1).可以减少网络的参数数量 5*5的卷积运算示例&#xff1a; 重复两次3*3的卷积层示例&#xff1a; 图像说明&#xff1a; ①.一次5 * 5的卷积运算的区域可以由两次3 * 3的卷积运算抵消&a…...

小学生学Arduino---------点阵(三)动态的显示与清除

学习目标&#xff1a; 1、理解“整数值”的概念与使用 2、理解“N1”指令的意义 3、掌握“反复执行多次”指令的使用 4、掌握屏幕模块的清除功能指令 5、理解“反复执行”指令与“反复执行多次”指令的嵌套使用 6、搭建电路图 7、编写程序 效果&#xff1a; 整数包括&#xf…...

opencv图片处理

目录1 图片处理1.1 显示图片1.2 旋转图片1.3 合并图片1.4、Mat类1.4.1、像素的储存结构1.4.2、访问像素数据1.6、rgb转灰度图1.7、二值化1.8、对比度和亮度1.9、图片缩放1.9.1、resize临近点算法双线性内插值1.9.2、金字塔缩放1.10、图片叠加1 图片处理 1.1 显示图片 #includ…...

C++ Primer Plus 学习笔记(二)—— 复合类型

数组 当我们只是定义了数组&#xff0c;而没有对数组进行初始化时&#xff0c;那数组的值将是未定义的。 在对数组进行初始化时&#xff0c;如果只对数组的一部分进行初始化&#xff0c;编译器会将把其他元素自动设置为0。 #include <iostream>using namespace std;in…...

代码随想录算法训练营第七天 | 454.四数相加II 、 383. 赎金信、15. 三数之和、18. 四数之和 、总结

打卡第七天&#xff0c;还是哈希表。 今日任务 454.四数相加II383.赎金信15.三数之和18.四数之和总结 454.四数相加II 代码随想录 class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, ve…...

apply函数族

apply函数族 apply函数族是R语言中帮助用户实现高效的向量化运算的一系列函数&#xff0c;包括apply,lapply,sapply,vapply等。 apply() apply函数以列或行为单位进行循环操作&#xff0c;可以处理matrix、array数据&#xff0c;返回一个向量或matrix。 apply(data,1/2,fuc…...

读书笔记可读性素材

《深入理解Java虚拟机》 《深入理解Java虚拟机》 《深入理解Java虚拟机》 本地方法栈&#xff08;Native Method Stacks&#xff09; 本地方法栈&#xff08;Native Method Stacks&#xff09; 本地方法栈&#xff08;Native Method Stacks&#xff09; -----------------…...

【C++】vector 模拟实现

vectorvector 容器vector 基本使用vector 定义库中各类接口的使用迭代器容量相关接口元素访问相关接口元素修改相关接口模拟实现 vector前期准备构造与析构赋值运算符重载迭代器相关容量相关元素访问相关元素的修改相关二维数组的创建对于自定义类型数据的测试vector 容器 C S…...

canvas初体验

canvas介绍 Canvas 最初由Apple于2004 年引入&#xff0c;用于Mac OS X WebKit组件&#xff0c;为仪表板小部件和Safari浏览器等应用程序提供支持。后来&#xff0c;它被Gecko内核的浏览器&#xff08;尤其是Mozilla Firefox&#xff09;&#xff0c;Opera和Chrome实现&#x…...

JavaWeb12-线程通讯(线程等待和唤醒)

目录 1.方法介绍 1.1.wait()/wait(long timeout)&#xff1a;让当前线程进入等待状态。 1.1.1.wait执行流程 1.1.2.wait结束等待的条件 1.1.3.wait() VS wait(long timeout) 1.1.4.为什么wait要放在Object中&#xff1f; --->PS&#xff1a;wait(0) 和 sleep(0) 的区…...

江苏专转本如何事半功倍的备考

专转本如何事半功倍的备考 一个人学习成绩的优劣取决于他的学习能力&#xff0c;学习能力包括三个要素&#xff1a;规范的学习行为&#xff1b;良好的学习习惯&#xff1b;有效的学习方法。有了规范的学习行为才能培养出良好的学习习惯&#xff0c;形成了良好的学习习惯就会形成…...

linux下安装mongoDB

一、下载mongoDB包 下载地址&#xff1a; https://www.mongodb.com/try/download/community 个人建议&#xff1a;如果是学习阶段&#xff0c;使用5以下版本更好些。 二、安装及配置 1、安装 # 1、解压 $ tar -zxvf mongodb-linux-x86_64-rhel70-4.4.19-rc1.tgz# 2、迁移目…...

掌握MySQL分库分表(七)广播表、绑定表实战,水平分库+分表实现及之后的查询和删除操作

文章目录什么是广播表广播表实战数据库配置表Java配置实体类配置文件测试广播表水平分库分表配置文件运行测试什么是绑定表&#xff1f;绑定表实战配置数据库配置Java实体类配置文件运行测试水平分库分表后的查询和删除操作查询操作什么是广播表 指所有的分片数据源中都存在的…...