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

计算机视觉----基础概念、卷积

一、概述
1.计算机视觉的定义
计算机视觉(Computer Vision)是一个跨学科的研究领域,主要涉及如何使计算机能够通过处理和理解数字图像或视频来自动进行有意义的分析和决策。其目标是使计算机能够从视觉数据中获取高层次的理解,类似于人类的视觉处理能力。

具体来说,计算机视觉包括以下几个主要任务:

图像分类:识别图像中主要的物体或场景。例如,给定一张图片,确定它是猫还是狗。
目标检测:在图像中定位和识别多个目标。例如,在街景图像中识别并标注汽车、行人和交通标志的位置。
图像分割:将图像分割成不同的区域或对象。例如,将一张医疗影像分割成不同的器官和组织。
姿态估计:识别和分析人体或物体的姿态。例如,识别人类骨骼的关键点位置以估计其动作。
场景理解:从图像中理解更复杂的场景信息,包括物体之间的关系和背景环境。
三维重建:从二维图像中恢复三维结构信息。例如,从多张二维图片生成一个三维模型。
动作识别:从视频中识别和分类动作。例如,识别视频中人物是否在走路、跑步或跳舞。
计算机视觉技术在许多领域有广泛的应用,包括但不限于自动驾驶、医疗影像分析、人脸识别、监控系统、增强现实和虚拟现实、机器人技术以及智能制造。

为了实现这些目标,计算机视觉结合了多种技术和方法,包括但不限于图像处理、模式识别、机器学习和深度学习等。近年来,随着深度学习尤其是卷积神经网络(CNN)的发展,计算机视觉技术取得了显著的进展,显著提高了在图像和视频分析任务中的性能。

2.计算机视觉的应用/任务
计算机视觉在许多领域有广泛的应用,涵盖了从日常生活到高科技工业的各个方面。以下是一些主要的应用和任务:

1. 自动驾驶
目标检测和识别:识别道路上的车辆、行人、交通标志和其他障碍物。
车道检测:检测道路上的车道线,帮助车辆保持在正确的车道内。
路径规划:根据周围环境的变化规划行驶路线。
2. 医疗影像分析
图像分割:分割医学影像中的不同器官和病变区域,如肿瘤检测。
诊断辅助:辅助医生对X光片、CT扫描、MRI影像等进行诊断。
手术导航:在手术过程中提供实时的影像指导。
3. 安防监控
人脸识别:用于身份验证和监控,识别人脸并匹配数据库中的身份信息。
行为分析:检测和分析人群行为,识别潜在的异常或危险行为。
入侵检测:检测并报警未授权的进入。
4. 零售和电子商务
产品识别:识别商品并进行分类,用于库存管理和推荐系统。
虚拟试穿:通过增强现实技术,顾客可以虚拟试穿衣服或配饰。
客户分析:通过摄像头分析顾客的行为和购物模式,以优化店铺布局和营销策略。
5. 工业自动化
质量检测:检测生产线上产品的缺陷,如裂缝、瑕疵和尺寸偏差。
机器人引导:为工业机器人提供视觉导航,执行复杂的组装和操作任务。
自动化监控:监控生产过程,检测异常情况并及时报警。
6. 智能家居
人脸识别:用于智能门锁、安防系统和用户个性化服务。
姿态识别:识别用户的姿态和动作,用于控制家电设备或提供健康监测。
环境监测:通过摄像头监测家居环境,检测火灾、烟雾或水泄漏等情况。
7. 文档处理
光学字符识别(OCR):将扫描的文档或图片中的文字转换为可编辑的文本。
表单识别和处理:自动识别和提取表单中的信息,用于数据录入和管理。
手写体识别:识别和转换手写文字为数字文本。
8. 娱乐和媒体
视频编辑:自动标记和剪辑视频中的精彩片段,生成视频摘要。
特效制作:在电影和电视制作中添加视觉特效和动画。
增强现实(AR)和虚拟现实(VR):为游戏和娱乐应用提供沉浸式体验。
9. 农业和环境监测
作物监测:通过无人机和卫星图像监测农作物的生长情况和健康状态。
害虫检测:识别农作物上的病害和害虫,提供早期预警和防治措施。
环境保护:监测森林、河流和海洋的生态环境,检测污染和自然灾害。
这些应用展示了计算机视觉在不同领域的广泛潜力和实际价值。随着技术的不断进步,计算机视觉的应用范围和深度将会进一步扩展。

二、图像处理基本操作
1.图像存储在矩阵中,其中每个元素代表像素值


2.图像的表示:二值图像,灰度图,RGB图

3.常见颜色空间


HSV
HSV(Hue, Saturation, Value)是色彩空间的一种,它将颜色表示为色调(Hue)、饱和度(Saturation)和明度(Value)。这种表示方法与人类对颜色的感知更接近,因此在图像处理和计算机视觉中被广泛使用。下面是对HSV色彩空间的详细解释:

1. 色调 (Hue)
色调表示颜色的类型,范围通常在0到360度。
每个角度对应一种颜色:0度为红色,120度为绿色,240度为蓝色。
色调环绕一圈形成一个色环。
2. 饱和度 (Saturation)
饱和度表示颜色的纯度或灰度成分的多少。
范围从0到1(或0%到100%)。
0表示完全没有颜色(灰色),1表示完全纯色。
3. 明度 (Value)
明度表示颜色的亮度或强度。
范围从0到1(或0%到100%)。
0表示最暗(黑色),1表示最亮(白色或最亮的颜色)。
4.优势
直观:HSV色彩空间更符合人类对颜色的感知方式。
灵活:在进行颜色筛选和调整时,HSV比RGB更方便。
5.应用场景
图像分割:通过色调筛选特定颜色。
颜色校正:调整饱和度和明度以改善图像质量。
增强现实:在实时视频处理中使用色调分割对象。
HSV色彩空间在图像处理和计算机视觉中具有广泛的应用和实用性,尤其适合需要处理和分析颜色的任务。

YUV
YUV是一种颜色表示方法,广泛应用于视频压缩、图像处理和传输中。它将颜色信息分解为亮度(Y)和色度(U和V)分量。与RGB色彩空间不同,YUV分离了图像的亮度和色度信息,便于在图像处理和视频压缩中进行高效处理。

1. 分量介绍
Y(Luminance):亮度分量,表示图像的明暗程度。这个分量包含了图像的灰度信息。
U(Chrominance - Blue Projection):色度分量之一,表示蓝色的投影。
V(Chrominance - Red Projection):色度分量之一,表示红色的投影。
2. 优势
分离亮度和色度:YUV分离了亮度和色度信息,使得在视频压缩和传输中可以优先保留更多的亮度信息,而降低色度信息的精度,从而减少数据量。
兼容性:YUV色彩空间与黑白电视信号兼容,确保在彩色电视上播放时可以兼容黑白电视。
3. 应用场景
视频压缩:许多视频压缩标准(如MPEG、H.264)都使用YUV色彩空间,因为它能更好地压缩视频数据。
图像处理:在图像处理中,可以独立处理亮度和色度分量,提高处理效率和效果。
电视广播:YUV色彩空间在模拟和数字电视广播中被广泛使用。
4.总结
YUV色彩空间通过将颜色分解为亮度和色度分量,提供了一种高效的颜色表示方法。它在视频压缩、图像处理和传输中具有广泛的应用,尤其适用于需要处理和优化亮度和色度信息的场景。

4.图像平滑:均值滤波、中值滤波、低通滤波(允许低频分量通过,高平分量滤除)
图像平滑是一种区域增强的算法,主要目的是通过减少图像中的高频噪声来改善图像的质量。能够减少甚至消除噪声并保持高频边缘信息是图像平滑算法追求的目标。

均值滤波(Mean Filtering)
均值滤波(Mean Filtering),也称为平均滤波,是一种简单且常用的图像平滑技术,用于减少图像中的噪声。其基本思想是通过用局部邻域内像素的平均值替换中心像素值来达到平滑效果。这种方法在平滑图像的同时,可以有效地保留图像的主要特征。

4. 优点和缺点
优点:

简单易实现:均值滤波算法简单,计算开销低。
平滑效果好:能够有效地去除图像中的高频噪声。
缺点:

模糊边缘:由于计算均值时考虑了周围所有像素,图像的边缘和细节部分可能会被模糊。
不适用于脉冲噪声:对于含有脉冲噪声的图像,均值滤波可能无法有效去噪,反而可能扩散噪声。
5. 应用场景
噪声去除:均值滤波广泛用于图像预处理,去除随机噪声。
图像平滑:在图像处理中,均值滤波常用于平滑图像,以减少图像中的细节或进行图像分割前的预处理。
均值滤波作为一种基础的图像处理技术,在图像预处理和噪声去除中具有广泛的应用。然而,对于某些应用场景,如边缘保留和去除脉冲噪声,可能需要使用更高级的滤波技术,如中值滤波或双边滤波。

中值滤波(Median Filtering)
中值滤波(Median Filtering)是一种常用的非线性滤波技术,用于去除图像中的噪声,同时保留图像的边缘信息。它在处理椒盐噪声(salt-and-pepper noise)方面特别有效。中值滤波的基本思想是用邻域内像素值的中值替换中心像素值,从而减少噪声的影响。

1. 基本原理


3. Python 示例
使用Python和OpenCV实现中值滤波:

import cv2
import numpy as np
import matplotlib.pyplot as plt
 
# 读取灰度图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
 
# 应用中值滤波
kernel_size = 5
filtered_image = cv2.medianBlur(image, kernel_size)
 
# 显示原始图像和中值滤波后的图像
plt.figure(figsize=(10, 5))
 
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')
plt.axis('off')
 
plt.subplot(1, 2, 2)
plt.title(f'Median Filtered Image (Kernel Size: {kernel_size}x{kernel_size})')
plt.imshow(filtered_image, cmap='gray')
plt.axis('off')
 
plt.show()

4. 优点和缺点
优点:

保留边缘:中值滤波在去噪的同时,能够很好地保留图像的边缘信息。
有效去除脉冲噪声:特别适用于去除椒盐噪声和其他类似的脉冲噪声。
缺点:

计算复杂度较高:由于需要对窗口内的像素进行排序,中值滤波的计算复杂度高于均值滤波。
不适用于高斯噪声:对于高斯噪声,中值滤波的效果可能不如高斯滤波。
5. 应用场景
噪声去除:中值滤波广泛用于去除图像中的椒盐噪声和其他类似的脉冲噪声。
图像预处理:在图像分割、边缘检测等图像处理任务中,中值滤波常用于平滑图像,同时保留重要的边缘信息。
中值滤波作为一种非线性滤波技术,在去除脉冲噪声和保留边缘信息方面具有显著优势。虽然计算复杂度较高,但在许多实际应用中,中值滤波仍然是非常有效的选择。

低通滤波器(Low-Pass Filter)
低通滤波器(Low-Pass Filter)是一种允许低频信号通过并阻止高频信号的滤波器。它在图像处理中的主要作用是平滑图像,减少图像中的高频噪声,同时保留图像中的低频信息。低通滤波器在边缘检测、图像降噪和图像重采样等领域中有广泛的应用。

1. 低通滤波的基本原理
在图像处理中,低通滤波的基本思想是将图像的高频成分(如噪声、细节等)进行衰减,而保留图像的低频成分(如整体的光滑区域)。这可以通过空间域或频域来实现。

空间域中的低通滤波
在空间域中,低通滤波通常通过卷积操作实现,常用的低通滤波器包括均值滤波器和高斯滤波器。

均值滤波器(Mean Filter):使用邻域内像素的平均值替代中心像素值。
高斯滤波器(Gaussian Filter):使用加权平均值替代中心像素值,其中权重由高斯分布决定。


频域中的低通滤波


2. 数学表示


3. Python 示例
以下是使用Python和OpenCV实现低通滤波的示例:

使用均值滤波器(空间域)
import cv2
import numpy as np
import matplotlib.pyplot as plt
 
# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
 
# 应用均值滤波
kernel_size = 5
mean_filtered_image = cv2.blur(image, (kernel_size, kernel_size))
 
# 显示原始图像和均值滤波后的图像
plt.figure(figsize=(10, 5))
 
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')
plt.axis('off')
 
plt.subplot(1, 2, 2)
plt.title(f'Mean Filtered Image (Kernel Size: {kernel_size}x{kernel_size})')
plt.imshow(mean_filtered_image, cmap='gray')
plt.axis('off')
 
plt.show()

使用高斯滤波器(空间域)
import cv2
import numpy as np
import matplotlib.pyplot as plt
 
# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
 
# 应用高斯滤波
kernel_size = 5
sigma = 1.0
gaussian_filtered_image = cv2.GaussianBlur(image, (kernel_size, kernel_size), sigma)
 
# 显示原始图像和高斯滤波后的图像
plt.figure(figsize=(10, 5))
 
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')
plt.axis('off')
 
plt.subplot(1, 2, 2)
plt.title(f'Gaussian Filtered Image (Kernel Size: {kernel_size}x{kernel_size}, Sigma: {sigma})')
plt.imshow(gaussian_filtered_image, cmap='gray')
plt.axis('off')
 
plt.show()

使用低通滤波器(频域)
import cv2
import numpy as np
import matplotlib.pyplot as plt
 
# 读取图像
image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)
 
# 进行傅里叶变换
dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
dft_shift = np.fft.fftshift(dft)
 
# 创建低通滤波器
rows, cols = image.shape
crow, ccol = rows // 2 , cols // 2
mask = np.zeros((rows, cols, 2), np.uint8)
r = 30  # 低通滤波器的半径
center = [crow, ccol]
x, y = np.ogrid[:rows, :cols]
mask_area = (x - center[0])**2 + (y - center[1])**2 <= r*r
mask[mask_area] = 1
 
# 应用滤波器并进行逆傅里叶变换
fshift = dft_shift * mask
f_ishift = np.fft.ifftshift(fshift)
img_back = cv2.idft(f_ishift)
img_back = cv2.magnitude(img_back[:, :, 0], img_back[:, :, 1])
 
# 显示原始图像和低通滤波后的图像
plt.figure(figsize=(10, 5))
 
plt.subplot(1, 2, 1)
plt.title('Original Image')
plt.imshow(image, cmap='gray')
plt.axis('off')
 
plt.subplot(1, 2, 2)
plt.title('Low-Pass Filtered Image (Frequency Domain)')
plt.imshow(img_back, cmap='gray')
plt.axis('off')
 
plt.show()

4. 优点和缺点
优点:

减少噪声:有效去除图像中的高频噪声。
平滑图像:使图像变得更加平滑,适合在图像分割和特征提取之前使用。
缺点:

模糊细节:会模糊图像中的细节和边缘。
不适用于所有噪声类型:对于某些类型的噪声(如低频噪声),效果不佳。
5. 应用场景
图像降噪:在去除图像中的随机噪声时使用。
图像平滑:在图像分割、边缘检测等处理之前对图像进行平滑处理。
信号处理:在音频和通信信号处理中,用于滤除高频干扰信号。
低通滤波器作为一种基本的图像处理工具,在去除噪声和平滑图像方面具有广泛的应用。然而,在使用时需要注意它可能带来的图像模糊问题,并根据具体应用选择合适的滤波器和参数。

5.图像锐化:高通滤波(加强图像的边缘)
高通是图像锐化 低通图像平滑

• 在图像的判读或识别中常需要突出边缘和轮廓信息,而图像锐化处理的目的是加

强图像中景物的边缘和轮廓,使模糊图像变得更清晰。

• 图像模糊的可能是因为图像受到平均或积分运算,因此对图像采用逆运算。例

如对连续图像微分或对离散图像差分运算,即可使模糊图像的质量得到改善。

• 从频率域角度看,图像的模糊是因为高频分量受到衰减,所以采用合适的高通

滤波器也可以使图像的清晰度增加

三、图形去噪/边缘检测/深度学习基础
1.常见图像噪声:高斯噪声、椒盐噪声、脉冲噪声
噪声的特点是什么

噪声在图像处理和信号处理中是一个常见的概念,它具有几个基本特点,包括以下几点:

1.随机性(随机分布):

噪声是在信号或图像中无规律地出现的不希望的信号成分。它通常由于环境、传感器本身的限制、传输过程中的干扰等因素引入。
噪声的分布通常是随机的,没有明显的可预测模式,如白噪声和高斯噪声。
2.无用信息(非信息性):

噪声是与所需信号或图像信息无关的信号成分,它不包含任何有用的信息,通常会干扰或模糊真实数据的内容。
3. 影响信号质量:

噪声会降低信号或图像的质量,使得原始信息变得不清晰或难以识别。
在图像中,噪声可能表现为像素的随机变化,使图像看起来粗糙或不连续。
4. 多样性:

噪声可以有多种形式和来源,如椒盐噪声(随机黑白像素)、高斯噪声(服从高斯分布的随机变化)等。
每种类型的噪声可能需要不同的处理方法来有效降低其对信号或图像的影响。
5.波动性:

噪声的强度和分布通常会随着时间或空间的变化而波动,这使得在处理中需要考虑噪声的动态特性。
在图像处理中,理解噪声的特点对于选择合适的去噪方法和优化处理步骤至关重要。不同类型的噪声可能需要不同的处理策略,以在保留尽可能多有用信息的同时有效降低噪声水平。

常见图像噪声:

• 椒盐噪声:黑色像素和白色像素随机出现,椒盐噪声也称为脉冲噪声

• 脉冲噪声:白色像素随机出现

• 高斯噪声:噪声强度变化服从高斯分布

2.图像去噪流程,如高斯噪声(高斯平滑),椒盐噪声(中值滤波)(综合题)
(1)高斯噪声
高斯噪声(Gaussian Noise)是图像处理和信号处理中的常见问题,去除高斯噪声的过程称为去噪。以下是一个标准的高斯噪声去噪流程:

1. 图像预处理
在进行去噪之前,首先需要对图像进行预处理。这可能包括:

灰度化:如果图像是彩色的,可以先将其转换为灰度图像。
归一化:将像素值归一化到0-1范围内,以便后续处理。
2. 选择去噪方法
去除高斯噪声的方法有很多种,常用的包括:

3. 应用去噪方法
根据选择的去噪方法,对图像进行处理。一般步骤包括:

构建滤波器:根据选择的滤波器构建滤波器核或函数。
应用滤波器:将滤波器应用到图像上,得到去噪后的图像。
4. 后处理
去噪后,可以进行一些后处理来提高图像质量:

对比度调整:调整图像的对比度,使得细节更明显。
锐化处理:增强图像的边缘和细节。
5. 评价去噪效果
通过一些评价指标来判断去噪效果,例如:

峰值信噪比(PSNR):评估去噪后图像的质量。
结构相似性(SSIM):评估去噪后图像与原图像的相似性。
示例代码
以下是一个简单的Python代码示例,使用OpenCV进行高斯噪声的去噪:

import cv2
import numpy as np
 
# 读取图像
image = cv2.imread('noisy_image.jpg', cv2.IMREAD_GRAYSCALE)
 
# 高斯滤波去噪
denoised_image = cv2.GaussianBlur(image, (5, 5), 1.5)
 
# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Denoised Image', denoised_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
通过以上步骤和代码,可以实现高斯噪声的有效去除,从而提高图像的质量。不同的方法适用于不同的场景,需要根据实际情况选择合适的去噪方法。

(2)椒盐噪声
椒盐噪声(Salt-and-Pepper Noise)是一种常见的图像噪声,表现为图像中出现随机的黑白像素点。去除椒盐噪声的过程可以通过多种方法实现。以下是一个详细的椒盐噪声去噪流程:

1. 图像预处理
在进行去噪之前,首先需要对图像进行预处理,这可能包括:

灰度化:如果图像是彩色的,可以先将其转换为灰度图像。
归一化:将像素值归一化到0-1范围内,以便后续处理。
2. 选择去噪方法
去除椒盐噪声的方法有多种,常用的包括:

3. 应用去噪方法
根据选择的去噪方法,对图像进行处理。一般步骤包括:

构建滤波器:根据选择的滤波器构建滤波器核或函数。
应用滤波器:将滤波器应用到图像上,得到去噪后的图像。
4. 后处理
去噪后,可以进行一些后处理来提高图像质量:

对比度调整:调整图像的对比度,使得细节更明显。
锐化处理:增强图像的边缘和细节。
5. 评价去噪效果
通过一些评价指标来判断去噪效果,例如:

峰值信噪比(PSNR):评估去噪后图像的质量。
结构相似性(SSIM):评估去噪后图像与原图像的相似性。
示例代码
以下是一个简单的Python代码示例,使用OpenCV进行椒盐噪声的去噪:

import cv2
import numpy as np
 
# 读取图像
image = cv2.imread('noisy_image.jpg', cv2.IMREAD_GRAYSCALE)
 
# 添加椒盐噪声
def add_salt_and_pepper_noise(image, prob):
    noisy = np.copy(image)
    num_salt = np.ceil(prob * image.size * 0.5)
    num_pepper = np.ceil(prob * image.size * 0.5)
 
    # 添加盐噪声
    coords = [np.random.randint(0, i - 1, int(num_salt)) for i in image.shape]
    noisy[coords[0], coords[1]] = 1
 
    # 添加胡椒噪声
    coords = [np.random.randint(0, i - 1, int(num_pepper)) for i in image.shape]
    noisy[coords[0], coords[1]] = 0
 
    return noisy
 
noisy_image = add_salt_and_pepper_noise(image, 0.05)
 
# 中值滤波去噪
denoised_image = cv2.medianBlur(noisy_image, 3)
 
# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Noisy Image', noisy_image)
cv2.imshow('Denoised Image', denoised_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

通过以上步骤和代码,可以有效地去除椒盐噪声,从而提高图像的质量。不同的方法适用于不同的场景,需要根据实际情况选择合适的去噪方法。

3.边缘检测流程,如canny边缘检测(综合题)
边缘检测是图像处理中的一种重要技术,用于识别图像中的边缘。边缘是图像中灰度变化显著的区域,通常对应物体的边界。以下是一个标准的边缘检测步骤:

1. 图像预处理
在进行边缘检测之前,通常需要对图像进行预处理。这些预处理步骤可能包括:

灰度化:将彩色图像转换为灰度图像,以简化处理。
平滑处理:使用高斯滤波等方法对图像进行平滑处理,减少噪声对边缘检测的影响。
import cv2
 
# 读取彩色图像
image = cv2.imread('image.jpg')
 
# 转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 
# 使用高斯滤波进行平滑处理
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 1.5)
2. 计算梯度
计算图像的梯度以获取边缘信息。常用的方法有Sobel算子、Prewitt算子和Roberts算子等。梯度算子会计算图像在x和y方向的导数。

# 使用Sobel算子计算梯度
grad_x = cv2.Sobel(blurred_image, cv2.CV_64F, 1, 0, ksize=3)
grad_y = cv2.Sobel(blurred_image, cv2.CV_64F, 0, 1, ksize=3)
 
# 计算梯度幅值和方向
magnitude = cv2.magnitude(grad_x, grad_y)
angle = cv2.phase(grad_x, grad_y, angleInDegrees=True)
3. 非极大值抑制
非极大值抑制用于细化边缘,通过保留局部最大值并抑制其他值,使得边缘更加清晰。

def non_maximum_suppression(magnitude, angle):
    row, col = magnitude.shape
    suppressed = np.zeros((row, col), dtype=np.float32)
    angle = angle % 180
 
    for i in range(1, row-1):
        for j in range(1, col-1):
            q = 255
            r = 255
            # 根据梯度方向选择比较的像素
            if (0 <= angle[i, j] < 22.5) or (157.5 <= angle[i, j] <= 180):
                q = magnitude[i, j+1]
                r = magnitude[i, j-1]
            elif 22.5 <= angle[i, j] < 67.5:
                q = magnitude[i+1, j-1]
                r = magnitude[i-1, j+1]
            elif 67.5 <= angle[i, j] < 112.5:
                q = magnitude[i+1, j]
                r = magnitude[i-1, j]
            elif 112.5 <= angle[i, j] < 157.5:
                q = magnitude[i-1, j-1]
                r = magnitude[i+1, j+1]
 
            # 保留局部最大值
            if (magnitude[i, j] >= q) and (magnitude[i, j] >= r):
                suppressed[i, j] = magnitude[i, j]
            else:
                suppressed[i, j] = 0
 
    return suppressed
 
suppressed_image = non_maximum_suppression(magnitude, angle)

4. 双阈值处理
双阈值处理用于进一步筛选边缘,通过设置高阈值和低阈值,将边缘分为强边缘、弱边缘和非边缘。

# 设置高阈值和低阈值
high_threshold = suppressed_image.max() * 0.09
low_threshold = high_threshold * 0.5
 
# 应用双阈值
strong_edges = (suppressed_image > high_threshold)
weak_edges = ((suppressed_image >= low_threshold) & (suppressed_image <= high_threshold))
 
# 初始化输出图像
edges = np.zeros_like(suppressed_image)
edges[strong_edges] = 255
edges[weak_edges] = 75
5. 边缘连接
连接弱边缘和强边缘,确保弱边缘连接到强边缘才被保留。

def edge_tracking(edges, weak=75, strong=255):
    row, col = edges.shape
    for i in range(1, row-1):
        for j in range(1, col-1):
            if edges[i, j] == weak:
                # 检查8邻域是否有强边缘
                if ((edges[i+1, j-1] == strong) or (edges[i+1, j] == strong) or (edges[i+1, j+1] == strong)
                    or (edges[i, j-1] == strong) or (edges[i, j+1] == strong)
                    or (edges[i-1, j-1] == strong) or (edges[i-1, j] == strong) or (edges[i-1, j+1] == strong)):
                    edges[i, j] = strong
                else:
                    edges[i, j] = 0
    return edges
 
final_edges = edge_tracking(edges)
6. 显示结果
显示原始图像和处理后的边缘检测结果。

cv2.imshow('Original Image', image)
cv2.imshow('Edges', final_edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
通过上述步骤,可以有效地进行边缘检测。常用的边缘检测算法包括Canny边缘检测、Sobel边缘检测和Laplacian边缘检测,其中Canny边缘检测结合了上述多个步骤,效果较好。

Canny
Canny边缘检测是一种广泛使用的边缘检测算法,旨在提取图像中的边缘特征。其主要步骤如下:

高斯滤波 (Gaussian Filtering):


计算梯度 (Gradient Calculation):
使用Sobel算子计算图像的梯度强度和方向。Sobel算子分别在水平方向(Gx)和垂直方向(Gy)上计算梯度。


非极大值抑制 (Non-maximum Suppression):
在梯度方向上对梯度强度进行抑制,只保留局部最大值,以细化边缘,使边界更清晰。具体步骤包括:
对每个像素,沿梯度方向检查两个相邻像素的梯度强度。
如果当前像素的梯度强度大于相邻像素的梯度强度,则保留,否则抑制为0。
双阈值检测 (Double Thresholding):
使用两个阈值(低阈值和高阈值)进一步过滤边缘。
如果像素的梯度强度大于高阈值,则被认为是强边缘。
如果像素的梯度强度介于低阈值和高阈值之间,则被认为是弱边缘。
如果像素的梯度强度小于低阈值,则被抑制为非边缘。
边缘连接 (Edge Tracking by Hysteresis):
通过连接弱边缘和强边缘来形成最终的边缘。
从强边缘像素开始,沿着梯度方向搜索弱边缘,如果连接到强边缘,则将弱边缘视为真实边缘。
总结来说,Canny边缘检测算法通过这五个步骤实现了对图像边缘的准确检测,减少了噪声的影响,精确地定位边缘,并通过双阈值和边缘连接步骤保证了边缘检测的连贯性。

4.全连接神经网络结构:输入层、隐藏层、输出层
全联接网络的输出层什么的。设计一下手写字,激活函数选择 结构图画出

全连接神经网络(Fully Connected Neural Network, FCNN)是一种基础的神经网络结构,由输入层、隐藏层和输出层组成。每一层中的神经元与前一层的所有神经元相连接。以下是各个层的详细介绍:

1. 输入层(Input Layer)
输入层是神经网络的第一层,它接受外部数据并将其传递给网络的下一层。输入层的神经元数量取决于输入数据的特征数量。例如,如果输入的是一个28x28像素的灰度图像,输入层将有784个神经元(28x28=784)。

2. 隐藏层(Hidden Layers)
隐藏层位于输入层和输出层之间,可以有一个或多个隐藏层。每一层中的神经元通过权重与前一层的所有神经元相连接。隐藏层的作用是通过激活函数引入非线性,使网络能够学习和表示复杂的模式和特征。

a. 权重和偏置(Weights and Biases)
每个连接都有一个权重,用于调整输入信号的强度。每个神经元还有一个偏置,用于调整激活函数的输出。

b. 激活函数(Activation Function)
每个隐藏层的神经元通常使用非线性激活函数,如ReLU、Sigmoid、Tanh等,以引入非线性并使网络能够学习复杂的特征。

3. 输出层(Output Layer)
输出层是神经网络的最后一层,它将隐藏层的输出转换为网络的最终输出。输出层的神经元数量取决于具体任务。例如,对于二分类问题,输出层通常有一个神经元,输出一个表示类别概率的值。对于多分类问题,输出层的神经元数量等于类别数量,通

相关文章:

计算机视觉----基础概念、卷积

一、概述 1.计算机视觉的定义 计算机视觉(Computer Vision)是一个跨学科的研究领域,主要涉及如何使计算机能够通过处理和理解数字图像或视频来自动进行有意义的分析和决策。其目标是使计算机能够从视觉数据中获取高层次的理解,类似于人类的视觉处理能力。 具体来说,计算机…...

Problem E: List练习

1.题目描述 运用List完成下面的要求: 1) 创建一个List&#xff0c;在List中增加三个工人&#xff0c;基本信息如下&#xff1a; 姓名 年龄 工资 Tom 18 3000 Peter 25 3500 Mark 22 3200 2) 插入一个工人&#xff0c;信息为&#xff1a;姓名&#xff1a;Robert&#xff0…...

12-串口外设

一、串口外设的基本概述 1、基本定义 串口通信&#xff0c;通过在通信双方之间以比特位&#xff08;bit&#xff09;的形式逐一发送或接收数据&#xff0c;实现了信息的有效传递。其通信方式不仅简单可靠&#xff0c;而且成本很低。 2、stm32的串口 下面是两个MCU的数据交互&…...

C++(2)

二、面向对象基础 1. 类与对象 1.1 核心概念 类&#xff08;Class&#xff09; ​​定义​​&#xff1a;抽象描述具有共同特征和行为的对象模板​​本质​​&#xff1a;代码复用的蓝图&#xff0c;定义数据&#xff08;属性&#xff09;与操作&#xff08;行为&#xff0…...

GMT之Bash语言使用

GMT的操作有自己的逻辑和“命令”&#xff0c;但GMT是可以用Bash语言控制的&#xff0c;所以常常以.sh为后缀写GMT程序。 GMT程序运行步骤如下&#xff1a; 采用cd &#xff0c;定位到指定文件夹&#xff1b;以sh ***.sh运行GMT&#xff0c;得到结果。 另外&#xff0c;遇到…...

半成品的开源双系统VLA模型,OpenHelix-发表于2025.5.6

半成品的开源双系统VLA模型&#xff0c;OpenHelix https://openhelix-robot.github.io/ 0. 摘要 随着OpenVLA的开源&#xff0c;VLA如何部署到真实的机器人上获得了越来越多的关注&#xff0c;各界人士也都开始尝试解决OpenVLA的效率问题&#xff0c;双系统方案是其中一个非…...

fiftyone-dataset使用基础

1.创建dataset 将dataset写入数据库时&#xff0c;对于已有的dataset name会报错&#xff1a; 解决方法&#xff1a;指定覆盖写 添加参数overwriteTrue, 默认为False # 在写入数据集时&#xff0c;指定overwriteTrue&#xff0c;表示当dataset_name在数据库中已存在时&#…...

(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类

目录 1. Object类 1.1 equals 1.2 toString&#xff08;&#xff09; 2.final关键字 3.注解 4. 设计模式 4.1 单例模式 4.1.1 饿汉式 4.1.3 饿汉式 VS 懒汉式 5. 抽象类&抽象方法 6. 接口 1. Object类 1.1 equals 重写Object 的equals方法&#xff0c;两种实现方式…...

强力巨彩谷亚推出专业智慧显示屏,满足多元场景需求

LED显示屏作为信息传播与视觉展示的关键载体&#xff0c;其性能和品质的提升备受关注。为响应市场对高品质显示的迫切需求&#xff0c;强力巨彩旗下专业智慧显示高端品牌谷亚G-ART&#xff0c;携多款行业领先水平的LED显示屏产品亮相&#xff0c;为用户带来专业、高效且节能的显…...

基于Spring AI与Hugging Face TGI构建高效聊天应用:从配置到实践全解析

基于Spring AI与Hugging Face TGI构建高效聊天应用&#xff1a;从配置到实践全解析 前言 在人工智能技术蓬勃发展的当下&#xff0c;大语言模型&#xff08;LLM&#xff09;的应用场景日益丰富。如何快速将 Hugging Face 生态中的强大模型部署为可通过 API 访问的服务&#x…...

MySQL视图:虚拟表的强大功能与应用实践

在数据库管理系统中&#xff0c;视图(View)是一种极其重要却常被忽视的功能。作为MySQL数据库的核心特性之一&#xff0c;视图为开发者和数据库管理员提供了数据抽象、安全控制和查询简化的强大工具。本文将全面探讨MySQL视图的概念、工作原理、创建与管理方法&#xff0c;以及…...

matlab插值方法(简短)

在MATLAB中&#xff0c;可以使用interp1函数快速实现插值。以下代码展示了如何使用spline插值方法对给定数据进行插值&#xff1a; x1 [23,56]; y1 [23,56]; X 23:1:56*4; Y interp1(x1,y1,X,spline);% linear、 spline其中&#xff0c;x1和y1是已知数据点&#xff0c;X是…...

【拥抱AI】Deer-Flow字节跳动开源的多智能体深度研究框架

最近发现一款可以对标甚至可能超越GPT-Researcher的AI深度研究应用&#xff0c;Deer-Flow&#xff08;Deep Exploration and Efficient Research Flow&#xff09;作为字节跳动近期开源的重量级项目&#xff0c;正以其模块化、灵活性和人机协同能力引发广泛关注。该项目基于 La…...

基于开源AI大模型与S2B2C生态的个人品牌优势挖掘与标签重构研究

摘要&#xff1a;在数字文明时代&#xff0c;个人品牌塑造已从传统经验驱动转向数据智能驱动。本文以开源AI大模型、AI智能名片与S2B2C商城小程序源码为技术载体&#xff0c;提出"社会评价-数据验证-标签重构"的三维分析框架。通过实证研究发现&#xff0c;结合第三方…...

2025年PMP 学习十二 第9章 项目资源管理

2025年PMP 学习十二 第9章 项目资源管理 序号过程过程组1规划资源管理规划2估算活动资源规划3获取资源执行4建设团队执行5管理团队执行6控制资源监控 项目资源管理&#xff0c;包括实物资源和团队资源。 文章目录 2025年PMP 学习十二 第9章 项目资源管理项目团队和 项目管理团…...

AI生成功能测试文档|测试文档

AI生成功能测试文档&#xff1a;链接直达 计算机功能测试文档撰写教程 链接直达&#xff1a;生成功能测试文档工具 一、文档概述 &#xff08;一&#xff09;文档目的 明确计算机功能测试的流程、方法和标准&#xff0c;确保测试的有效性和可靠性&#xff0c;为软件的质量评…...

Python 常用模块(八):logging模块

目录 一、引言&#xff1a;日志模块在项目开发中的重要性二、从 Django 日志配置看 Logging 模块的核心组成三、logging模块核心组件详解3.1 记录器Logger3.2 级别Level3.3 根记录器使用3.4 处理器Handler3.5 格式化器Formatter3.6 日志流3.7 日志示例 四、日志模块总结 一、引…...

入门OpenTelemetry——可观测性与链路追踪介绍

可观测性 什么是可观测性 可观察性&#xff08;Observability&#xff09;是从外部输出知识中推断所获得&#xff0c;可理解为衡量一个系统内部状态的方法。可观测性是一种能力&#xff0c;它能帮助你回答系统内部发生了什么——无需事先定义每种可能的故障或状态。系统的可观…...

c#队列及其操作

可以用数组、链表实现队列&#xff0c;大致与栈相似&#xff0c;简要介绍下队列实现吧。值得注意的是循环队列判空判满操作&#xff0c;在用链表实现时需要额外思考下出入队列条件。 设计头文件 #ifndef ARRAY_QUEUE_H #define ARRAY_QUEUE_H#include <stdbool.h> #incl…...

【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)

前言 之前的文件分享过基于内存的STL缓存、环形缓冲区&#xff0c;以及基于文件的队列缓存mqueue、hash存储、向量库annoy存储&#xff0c;这两种属于比较原始且高效的方式。 那么&#xff0c;有没有高级且高效的方式呢。有的&#xff0c;从数据角度上看&#xff0c;&#xff0…...

77. 组合【 力扣(LeetCode) 】

文章目录 零、原题链接一、题目描述二、测试用例三、解题思路四、参考代码 零、原题链接 77. 组合 一、题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 二、测试用例 示例 1&#xff1a; 输入&…...

GpuGeek全栈AI开发实战:从零构建企业级大模型生产管线(附完整案例)

目录 背景一、算力困境&#xff1a;AI开发者的「三重诅咒」1.1 硬件成本黑洞‌1.2 资源调度失衡‌1.3 环境部署陷阱‌ 二、三大核心技术突破GpuGeek的破局方案2.1 ‌分时切片调度引擎&#xff08;Time-Slicing Scheduler&#xff09;‌2.2 ‌异构计算融合架构2.3 ‌AI资产自动化…...

LeetCode 热题 100_颜色分类(98_75_中等_C++)(技巧)(计数;双指针)

LeetCode 热题 100_颜色分类&#xff08;98_75_中等_C&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;计数&#xff09;&#xff1a;思路二&#xff08;双指针&#xff09;&#xff1a; 代码实现代码实现&a…...

【前端】:单 HTML 去除 Word 批注

在现代办公中&#xff0c;.docx 文件常用于文档编辑&#xff0c;但其中的批注&#xff08;注释&#xff09;有时需要在分享或归档前被去除。本文将从原理出发&#xff0c;深入剖析如何在纯前端环境下实现对 .docx 文件注释的移除&#xff0c;并提供完整的实现源码。最后&#x…...

TTS-Web-Vue系列:Vue3实现内嵌iframe文档显示功能

&#x1f5bc;️ 本文是TTS-Web-Vue系列的新篇章&#xff0c;重点介绍如何在Vue3项目中优雅地实现内嵌iframe功能&#xff0c;用于加载外部文档内容。通过Vue3的响应式系统和组件化设计&#xff0c;我们实现了一个功能完善、用户体验友好的文档嵌入方案&#xff0c;包括加载状态…...

AWS CloudTrail日志跟踪启用

问题 启用日志管理。 步骤 审计界面&#xff0c;如下图&#xff1a; 点击创建跟踪&#xff0c;AWS云就会记录AWS账号在云中的操作。...

PHP 编程:现代 Web 开发的基石与演进

引言 PHP&#xff08;Hypertext Preprocessor&#xff09;自1995年诞生以来&#xff0c;已成为全球最流行的服务器端脚本语言之一。尽管近年来Node.js、Python等语言在特定领域崭露头角&#xff0c;但PHP仍占据着超过78%的网站市场份额&#xff08;W3Techs数据&#xff09;。本…...

NAT/代理服务器/内网穿透

目录 一 NAT技术 二 内网穿透/内网打洞 三 代理服务器 一 NAT技术 跨网络传输的时候&#xff0c;私网不能直接访问公网&#xff0c;就引入了NAT能讲私网转换为公网进行访问&#xff0c;主要解决IPv4(2^32)地址不足的问题。 1. NAT原理 当某个内网想访问公网&#xff0c;就必…...

[已解决] VS Code / Cursor / Trae 的 PowerShell 终端 conda activate 进不去环境的常见问题

背景 PS C:\Users\Lenovo\WPSDrive\669715199_3\WPS云盘\课程\研一\ROAS5700 Robot Motion Planning and Control\Final\LaTex报告\final-v1> conda activate mpPS C:\Users\Lenovo\WPSDrive\669715199_3\WPS云盘\课程\研一\ROAS5700 Robot Motion Planning and Control\Fin…...

Kuka AI音乐AI音乐开发「人声伴奏分离」 —— 「Kuka Api系列|中文咬字清晰|AI音乐API」第6篇

导读 今天我们来了解一下 Kuka API 的人声与伴奏分离功能。 所谓“人声伴奏分离”&#xff0c;顾名思义&#xff0c;就是将一段完整的音频拆分为两个独立的轨道&#xff1a;一个是人声部分&#xff0c;另一个是伴奏&#xff08;乐器&#xff09;部分。 这个功能在音乐创作和…...

深度伪造对知识产权保护的新挑战与应对之策

首席数据官高鹏律师团队 在科技的飞速发展带来了诸多便利的同时&#xff0c;也引发了一系列复杂的法律问题&#xff0c;其中深度伪造技术对知识产权保护的冲击尤为显著&#xff0c;亟待引起广泛关注与深入探讨。 深度伪造&#xff0c;简单来说&#xff0c;是借助先进的人工智…...

【嵌入式开发-软件定时器】

嵌入式开发-软件定时器 ■ 1.■ 2.■ 3.■ 4. ■ 1. ■ 2. ■ 3. ■ 4....

3天重庆和成都旅游规划

重庆和成都都是大城市&#xff0c;各自都有丰富的旅游资源。如果要在三天内两头都游览&#xff0c;可能需要合理安排时间&#xff0c;确保既能体验到重庆的特色&#xff0c;又能在成都游览主要景点。然而&#xff0c;考虑到交通时间&#xff0c;如果从重庆到成都需要一定的时间…...

JAVA中的文件操作

文章目录 一、文件认识&#xff08;一&#xff09;文件的分类&#xff08;二&#xff09;目录结构 二、文件操作&#xff08;一&#xff09;File类1.属性2.构造方法3.方法 &#xff08;二&#xff09;File类的具体使用1.文件路径的查看2.文件的基本操作&#xff08;1&#xff0…...

深度解析网闸策略:构建坚固的网络安全防线

深度解析网闸策略&#xff1a;构建坚固的网络安全防线 在数字化浪潮中&#xff0c;网络安全已成为企业、机构乃至国家稳定发展的关键要素。随着网络攻击手段日益复杂多样&#xff0c;传统的网络安全防护措施难以满足日益增长的安全需求。网闸作为一种先进的网络安全设备&#x…...

【Rust trait特质】如何在Rust中使用trait特质,全面解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

滑动窗口算法笔记

力扣209 题目分析&#xff1a;想象一个窗口遍历着这个数组&#xff0c;不断扩大右边界&#xff0c;让r。往窗口中添加数字&#xff1a; 此时我们找到了这个窗口&#xff0c;它的和满足了大于等于target的条件&#xff0c;题目让我求最短的&#xff0c;那么我们就尝试来缩短它&…...

Problem A: 歌手打分

1.题目描述 在歌唱比赛中&#xff0c;共有10位评委进行打分&#xff0c;在计算歌手得分时&#xff0c;去掉一个最高分&#xff0c;去掉一个最低分&#xff0c;然后剩余的8位评委的分数进行平均&#xff0c;就是该选手的最终得分。输入每个评委的评分&#xff0c;求某选手的得分…...

容器安全-核心概述

文章摘要 本文探讨了容器安全的四个核心类别&#xff0c;包括环境基础设施安全、镜像安全、运行时安全和生态安全。尽管 EDR 能提供主机安全层面的部分防护&#xff0c;但无法覆盖容器的镜像安全和生态安全。容器的镜像安全和生态安全问题&#xff0c;如镜像漏洞、恶意镜像、容…...

Golang实践录:在go中使用curl实现https请求

之前曾经在一个 golang 工程调用 libcur 实现 https的请求&#xff0c;当前自测是通过的。后来迁移到另一个小系统出现段错误&#xff0c;于是对该模块代码改造&#xff0c;并再次自测。 问题提出 大约2年前&#xff0c;在某golang项目使用libcurl进行https请求&#xff08;参…...

nvrtc环境依赖

一 下载 1.1 添加nvidia的源&#xff08;不同于pypi&#xff09; pip install nvidia-pyindex 1.2 pip dowload 执行 pip download nvidia-cuda-runtime nvidia-cuda-python 会发现文件夹多了以下几个文件 而需要安装的则只有红框的三个文件&#xff0c; 二 安装 对红框的…...

【计算机视觉】OpenCV实战项目:GraspPicture 项目深度解析:基于图像分割的抓取点检测系统

GraspPicture 项目深度解析&#xff1a;基于图像分割的抓取点检测系统 一、项目概述项目特点 二、项目运行方式与执行步骤&#xff08;一&#xff09;环境准备&#xff08;二&#xff09;项目结构&#xff08;三&#xff09;执行步骤 三、重要逻辑代码解析&#xff08;一&#…...

Redis持久化存储

我们知道Redis是将数据放在内存中的,那怎么做到持久化存储呢?很简单,就是内存存一份,硬盘也存一份.那么两个地方都存会不会影响效率?答案是影响是不大的,要看具体的策略.同时也要注意内存的数据和硬盘中的数据可能会有一点不同.这也是取决于策略的不同. Redis持久化存储的两个…...

网络检测工具InternetTest v8.9.1.2504 单文件版,支持一键查询IP/DNS、WIFI密码信息

—————【下 载 地 址】——————— 【​本章下载一】&#xff1a;https://drive.uc.cn/s/295e068b79314 【​本章下载二】&#xff1a;https://pan.xunlei.com/s/VOQDXguH0DYPxrql5y2zlkhTA1?pwdg2nx# 【百款黑科技】&#xff1a;https://ucnygalh6wle.feishu.cn/wiki/…...

elpis-core: 基于 Koa 实现 web 服务引擎架构设计解析

前言 内容来源于抖音【哲玄前端】大佬的《大前端全栈实践》课程&#xff0c;此课程是从零开始做一个企业级的全栈应用框架。此框架是基于koa.js构建的服务引擎&#xff0c;对BFF层的框架封装&#xff0c;让我感受颇深。 整体elpis项目架构设计 elpis-core设计思路 可以看到elpi…...

计算机网络-MPLS LDP基础实验配置

前面我们学习了LDP的会话建立、标签发布与交换、LDP的工作原理&#xff0c;今天通过一个基础实验来加深记忆。 一、LDP基础实验 实验拓扑&#xff1a; 1、IGP使用OSPF进行通告&#xff0c;使用Lookback接口作为LSR ID&#xff0c;LDP ID自动生成。 2、实验目的&#xff1a;使…...

搜索二维矩阵 II

存储m和n&#xff0c;用i表示行&#xff0c;j表示列&#xff0c;i从最后一行开始遍历&#xff0c;j从0开始遍历&#xff0c;当前值比目标值小j&#xff0c;反之i-- class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int…...

C++中如何实现一个单例模式?

单利模式是指对象在整个程序中只有一个实例&#xff0c;提供一个访问方法供全局访问。实现单例模式有如下要求&#xff1a; 1.私有化构造函数&#xff1a;将构造函数定义为私有&#xff0c;以防外部通过构造函数创建其它实例。 2.静态实例&#xff1a;在内部提供一个静态实例…...

进程与线程

进程与线程:计算机世界的"公司与员工" 进程与线程的本质区别 进程(Process)是计算机中独立运行的程序实例,拥有自己的内存空间和系统资源;而线程(Thread)是进程内的执行单元,共享所属进程的资源,但拥有独立的执行路径。 🏢 生活类比:想象一个大型企业的运…...

JDK 命令行工具大全与学习方法总结 —— 从帮助文档到高效实践

JDK 命令行工具大全与学习方法总结 —— 从帮助文档到高效实践 Java开发与运维过程中&#xff0c;JDK自带的命令行工具是定位问题、性能调优、编译调试的基石。本文全面梳理JDK常用命令工具、帮助文档的获取方式&#xff0c;并总结类似Linux命令行的学习方法&#xff0c;助你系…...