Python图像处理:1.插值、频域变换与对比度增强

一、几何变换

7.图像的插值

(1)原理介绍

下面对比三种插值方法,分别是最近邻插值法、双线性插值法、卷积插值法,三种方法的前提和特点、优缺点、适用场景如下:

  1. 最近邻插值(Nearest Neighbor Interpolation)

    • 前提与特点:这是最简单的插值方法,不考虑相邻像素的影响,只取最近的像素值。对于每个新像素点,此方法找到最近的原始输入像素点并直接赋予其灰度值。
    • 优点:计算速度快,没有引入新的颜色(对于彩色图像),在某些应用中保留了像素的原始值。
    • 缺点:图像质量通常不是最优的,可能会出现锯齿状边缘和像素化的效果,特别是在放大较大比例时。
    • 适用场景:适用于需要实时处理的场景,或者当图像放大倍数较小,对图像细节要求不高时
  2. 双线性插值(Bilinear Interpolation)

    • 前提与特点:此方法考虑了像素周围的2x2邻域,通过线性插值算法基于周围四个最近的像素点,对于新的像素点进行灰度值的估算。
    • 优点:比最近邻插值算法图像质量更好,可以得到更加平滑的图像边缘,没有那么明显的锯齿、像素化现象。
    • 缺点:相比于最近邻插值,双线性插值计算量更大,处理速度稍慢。
    • 适用场景:适用于图像质量要求较高的场合,同时可以接受一定程度的模糊。
  3. 双立方插值(Bicubic Interpolation)

    • 前提与特点:此方法使用像素周围的4x4邻域进行插值,是一种更为复杂的算法,通过多项式插值,对图像中的像素值进行估算。
    • 优点:相比于最近邻和双线性插值,双立方插值通常可以得到更平滑、边缘更少锯齿的图像,并且在保留更多图像细节方面更为出色。
    • 缺点:计算量大,处理速度较慢,可能会引入一些伪影。
    • 适用场景:适合对图像质量要求非常高的应用,比如专业的图像编辑和打印。
(2)完整代码
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图片并转换为灰度图
image = cv2.imread('cell.jpg', cv2.IMREAD_GRAYSCALE)# 确保图片大小为224x234
if image.shape != (234, 224):image = cv2.resize(image, (224, 234), interpolation=cv2.INTER_LINEAR)# 最近邻插值法
nearest = cv2.resize(image, (448, 468), interpolation=cv2.INTER_NEAREST)# 双线性插值法
bilinear = cv2.resize(image, (448, 468), interpolation=cv2.INTER_LINEAR)# 双立方插值法(卷积插值法通常指的是双立方插值)
bicubic = cv2.resize(image, (448, 468), interpolation=cv2.INTER_CUBIC)# 创建一个横排的子图,显示三种不同的插值结果
fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(15, 5))# 设置每个子图的标题
axes[0].set_title('Nearest Neighbour')
axes[1].set_title('Bilinear')
axes[2].set_title('Bicubic')# 在子图中显示对应的插值结果图像
axes[0].imshow(nearest, cmap='gray')
axes[1].imshow(bilinear, cmap='gray')
axes[2].imshow(bicubic, cmap='gray')# 关闭子图各自的坐标轴
for ax in axes:ax.axis('off')# 调整子图之间的间隔
plt.subplots_adjust(wspace=0.05, hspace=0)# 显示图像
plt.show()
(3)运行结果

二、离散傅里叶变换

(1)原理介绍
1)原理:

在二维图像中,DFT将图像从空间域(其中每个像素位置表示一个点的亮度或颜色强度)转换到频域(其中每个点表示一个特定频率和方向上的信号强度)。这个频域表示让我们能够观察到图像中的周期性和非周期性模式。

图像的DFT生成复数输出,其中实部代表余弦(cosine)波的幅度,虚部代表正弦(sine)波的幅度。图像中的每一个点都可以看作是许多不同频率和方向的正弦和余弦波的叠加。

2)适用场景:
  1. 频域滤波:在频域中,可以对图像进行低通、高通和带通滤波等操作,用于平滑图像(去噪)或增强边缘等。

  2. 图像分析:通过分析图像的频域表示,可以识别图像中的周期性模式、分析纹理或者进行图像压缩。

  3. 图像增强:一些图像增强的技术,如锐化或对比度增强,也可以通过调整图像的频域成分来实现。

  4. 图像重建:利用逆傅里叶变换可以重建图像,这在图像压缩和传输中非常有用。

  5. 水印和隐写术:嵌入信息或水印到图像的特定频率成分中,这样在空间域中这些信息几乎是不可见的。

  6. 特征提取:在计算机视觉和图像处理中,频域特征可以用于图像识别和分类。

3)注意事项:
  • 离散傅里叶变换对于数据的周期性和非周期性特征都非常敏感,因此在应用DFT之前通常需要对图像边缘进行处理,如使用窗函数,以减少边界效应。
  • DFT变换后的图像一般将低频部分放在图像中心,因为在自然图像中,高频通常代表着边缘和噪声,而低频则对应于图像的整体构成。
(2)完整代码
import numpy as np
import matplotlib.pyplot as plt
import cv2# 读取图像
image = cv2.imread('cell.jpg', cv2.IMREAD_GRAYSCALE)# 检查图像是否正确读取
if image is None:raise ValueError("Could not open or find the image. Check the path.")# 对图像进行离散傅里叶变换
dft = np.fft.fft2(image)
# 将DFT输出中的低频成分移动到数组的中心
dft_shifted = np.fft.fftshift(dft)
# 计算幅度谱
magnitude_spectrum = 20 * np.log(np.abs(dft_shifted))# 创建一个横排的显示图像和频域图像的新图
plt.figure(figsize=(12, 6))# 显示原始图像
plt.subplot(1, 2, 1) # (rows, columns, panel number)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')# 显示频域图像
plt.subplot(1, 2, 2)
plt.imshow(magnitude_spectrum, cmap='gray')
plt.title('Magnitude Spectrum')
plt.axis('off')# 显示图像
plt.tight_layout() # 调整子图,使之填充整个图像区域
plt.show()
(3)运行结果

(4)与沃尔什-哈达玛变换(WHT)和离散余弦变换(DCT)的对比

        说到DFT,有的教材就会提到另外两种频域变换方法:沃尔什-哈达玛变换(WHT)和离散余弦变换(DCT),三者最主要的区别就是:WHT最快,并且对二值化图像处理效果最好,但图片尺寸必须2的幂(或你愿意预处理成2的幂);DCT常用于JPEG图像的图像压缩,但不涉及复数运算;DFT慢一点,但是常用于滤波、去噪、复原。详细的对比如下:

1. 离散傅里叶变换(DFT)

适用场景

  • 频域分析:如果您需要分析图像中的频率成分,例如确定图像的纹理信息或频率特征,DFT是理想的选择。
  • 频域滤波:如果您的目的是移除图像中的噪声(通常在高频区域)或强调某些纹理(低频信息),使用DFT之后可以应用各种频域滤波器。
  • 图像去噪:通过DFT,可以设计滤波器来抑制噪声频率,然后通过逆变换恢复图像。
  • 图像复原:在图像复原中,通过频域分析可以识别并补偿成像系统的模糊函数。

选择条件

  • 需要分析或处理图像的频率内容。
  • 计算复杂度不是主要关心的问题,或者可以接受稍长的计算时间。
2. 沃尔什-哈达玛变换(WHT)

适用场景

  • 快速计算:当需要非常高效的计算时,WHT由于其简单的+1和-1操作,可以比DFT或DCT更快地实现。
  • 二值图像:对于二值图像或其他只有两种值的图像,WHT可能尤其有用。
  • 数据加密和水印:WHT可用于快速加密信息或嵌入水印,因为它对图像的局部变化不敏感。

选择条件

  • 计算效率是优先考虑的问题,特别是对于实时系统。
  • 图像尺寸必须是2的幂,或者您愿意对图像进行相应的预处理。
3. 离散余弦变换(DCT)

适用场景

  • 图像压缩:DCT在JPEG图像压缩中非常常用,它能够将图像能量集中在较少的系数中,使得压缩效率高。
  • 去噪:类似于DFT,DCT也可以用于图像去噪,但通常更有效,因为实际图像的能量大多集中在DCT的低频系数中。
  • 图像增强:如果要增强图像的某些特征,DCT可以帮助分离出重要的频率成分并进行处理。

选择条件

  • 对图像执行压缩或需要高效的能量集中变换。
  • 对实数操作有偏好,因为DCT不涉及复数计算。
4.完整代码
import numpy as np
import matplotlib.pyplot as plt
import cv2
from scipy.fftpack import dct, idct
from scipy.linalg import hadamard# 读取图像
image = cv2.imread('cell.jpg', cv2.IMREAD_GRAYSCALE)# 检查图像是否正确读取
if image is None:raise ValueError("Could not open or find the image. Check the path.")# 离散傅里叶变换 (DFT)
dft = np.fft.fft2(image)
dft_shift = np.fft.fftshift(dft)  # 将低频分量移动到中心
dft_magnitude = np.log(np.abs(dft_shift))# 离散余弦变换 (DCT)
dct_transformed = dct(dct(image.T, norm='ortho').T, norm='ortho')# 沃尔什-哈达玛变换 (WHT)
# 由于WHT需要尺寸为2的幂,因此可能需要调整图像尺寸
dim = 2 ** int(np.ceil(np.log2(max(image.shape))))
padded_image = np.pad(image, ((0, dim - image.shape[0]), (0, dim - image.shape[1])), 'constant', constant_values=0)
hadamard_transformed = hadamard(dim)
wht_transformed = hadamard_transformed @ padded_image @ hadamard_transformed
wht_magnitude = np.log(np.abs(wht_transformed))# 显示图像
plt.figure(figsize=(18, 6))# 显示DFT
plt.subplot(1, 3, 1)
plt.imshow(dft_magnitude, cmap='gray')
plt.title('Discrete Fourier Transform')
plt.axis('off')# 显示DCT
plt.subplot(1, 3, 2)
plt.imshow(dct_transformed, cmap='gray')
plt.title('Discrete Cosine Transform')
plt.axis('off')# 显示WHT
plt.subplot(1, 3, 3)
plt.imshow(wht_magnitude, cmap='gray')
plt.title('Walsh-Hadamard Transform')
plt.axis('off')plt.tight_layout()
plt.show()
5.运行结果

6.方法选择

假设您有一张照片,您需要根据照片的特点和您要实现的功能来确定使用哪种方法。以下是一些指导性的问题:

  1. 您的目标是什么?

    • 如果您需要压缩或者进行简单的频域去噪,DCT可能是最佳选择。
    • 如果是进行深入的频域分析或者复杂的频域滤波,DFT可能更合适。
    • 如果需要快速变换或者数据加密,并且图像大小合适,WHT可能是一个好的选择。
  2. 图像的特性是什么?

    • 对于典型的自然图像,DCT通常是最有效的,因为它能够集中图像能量。
    • 对于含有大量细节或者高频信息的图像,DFT可能会提供更多的信息。
    • 对于二值图像或者图像尺寸已经是2的幂的情况,WHT可能更有优势。
  3. 计算效率要求如何?

    • 如果需要快速处理,WHT可能是最快的,尤其是在尺寸合适的情况下。
    • 如果效率不是主要关心点,那么DFT和DCT都是可行的,具体取决于上述的其他因素。

三、图像增强

1.对比度增强

(1)灰度线性变换与灰度分段线性变换
1)原理介绍

灰度线性变换

原理: 灰度线性变换涉及将图像的每一个像素值按照一个简单的规则进行调整,这个规则会让所有像素变得更亮或更暗,并且可以改变图像的对比度。换句话说,这种变换就像调整电视或者显示器的亮度和对比度控制钮。

使用场景

  • 当整张图像看起来太暗或者太亮时,可以通过灰度线性变换来统一调整图像的亮度。
  • 当整个图像的对比度不够,显得很平淡无力时,可以通过这种变换来提高对比度,使得图像中的明暗部分更加突出。

灰度分段线性变换

原理: 灰度分段线性变换比灰度线性变换复杂一些,它允许你对图像中不同亮度区域进行不同方式的调整。这意味着你可以选择只提亮图像中的暗部分,而保持亮部分不变,或者反过来,也可以对亮度中等的区域进行调整,而不影响其他区域。

使用场景

  • 对于一张图像,如果某些部分太暗而另一些部分又太亮,灰度分段线性变换可以分别调整这些部分,达到一个较好的整体视觉效果。
  • 在需要特别强调或隐藏图像一部分细节时,这种变换可以局部地增强或减弱对比度。

对比

  • 简单与复杂:灰度线性变换比较简单,适用于全局性的图像调整;而灰度分段线性变换更复杂,适用于更细致和定制化的调整。
  • 灵活性:线性变换对所有像素使用相同的规则,不够灵活;分段线性变换可以对图像的不同部分使用不同的规则,更具灵活性。
  • 应用范围:灰度线性变换适用于整个图像需要改善的情况,例如整体亮度调整;灰度分段线性变换适用于图像的局部区域需要不同程度的调整,例如同时调整阴影和高光。
2)完整代码
import cv2
import numpy as np
import matplotlib.pyplot as plt# 读取图像
image = cv2.imread('cell.jpg', cv2.IMREAD_GRAYSCALE)
if image is None:raise ValueError("Could not open or find the image. Check the path.")# 灰度线性变换
def linear_transform(image, alpha=1.5, beta=0):# 新图像 = alpha * 原图像 + betanew_image = cv2.convertScaleAbs(image, alpha=alpha, beta=beta)return new_image# 灰度分段线性变换
def piecewise_linear_transform(image):# 这里定义了一个简单的分段线性函数,实际函数可能需要根据需求调整new_image = np.zeros_like(image)for i in range(image.shape[0]):for j in range(image.shape[1]):if image[i, j] < 128:new_image[i, j] = image[i, j] * 0.5else:new_image[i, j] = image[i, j] * 1.5# 确保值在0-255之间new_image[new_image > 255] = 255return new_image# 应用变换
linear_image = linear_transform(image)
piecewise_image = piecewise_linear_transform(image)# 显示图像
plt.figure(figsize=(15, 5))# 显示原始图像
plt.subplot(1, 3, 1)
plt.imshow(image, cmap='gray')
plt.title('Original Image')
plt.axis('off')# 显示线性变换后的图像
plt.subplot(1, 3, 2)
plt.imshow(linear_image, cmap='gray')
plt.title('Linear Transformation')
plt.axis('off')# 显示分段线性变换后的图像
plt.subplot(1, 3, 3)
plt.imshow(piecewise_image, cmap='gray')
plt.title('Piecewise Linear Transformation')
plt.axis('off')plt.tight_layout()
plt.show()
3)运行结果

(2)灰度对数变换与灰度指数变换
1)原理介绍

灰度对数变换

原理: 灰度对数变换的基本思想是对图像的低亮度值进行更强的变换而对高亮度值进行较弱的变换。这种变换能够将图像中的暗区域中的细节拉伸,而压缩亮区域的对比度。这有助于在图像的暗部分透露更多细节。

使用场景

  • 当图像中有很多阴暗区域,并且这些区域中的细节被隐藏时,灰度对数变换可以使这些细节变得更明显。
  • 在图像的动态范围较大时(即图像中同时包含很亮和很暗的区域),这种变换有助于降低动态范围,让整个图像的细节都能够较好地显示出来。

灰度指数变换

原理: 灰度指数变换与对数变换相反,它对图像高亮度区域的影响比暗区域要大。这意味着它可以增加图像亮区域的对比度,使得图像的亮部分更加明亮

使用场景

  • 当图像的高亮区域细节不是很重要,而希望突出显示暗部细节时,可以使用灰度指数变换。
  • 在某些情况下,如果需要模拟图像的视觉效果,使之看起来更亮或者更有光泽感,灰度指数变换也很有用。

对比

  • 灰度对数变换通常用于增强图像中的暗部细节,它能够将暗区域的对比度提高,让这些区域的内容更易于观察。
  • 灰度指数变换则相反,它更多地增强了亮部的对比度,通常会使图像的亮部更加亮丽。
2)完整代码
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image# 读取图像并转换为灰度
image_path = 'cell.jpg'
original_image = Image.open(image_path).convert('L')
image_array = np.array(original_image)# 灰度对数变换
log_transformed = np.log1p(image_array)  # np.log1p对数组中的每个元素进行log(1+x)运算
log_transformed = (log_transformed / log_transformed.max()) * 255  # 归一化并扩展到0-255范围
log_image = Image.fromarray(np.uint8(log_transformed))  # 将数组转换回图像格式# 灰度指数变换
# 为了避免数值过大,通常会将图像数据先归一化,指数变换后再还原
image_array_normalized = image_array / 255
exp_transformed = np.exp(image_array_normalized)  # np.exp对数组中的每个元素进行e^x运算
exp_transformed = (exp_transformed / exp_transformed.max()) * 255  # 归一化并扩展到0-255范围
exp_image = Image.fromarray(np.uint8(exp_transformed))# 创建一个画布显示原图和变换后的图像
fig, axes = plt.subplots(1, 3, figsize=(15, 5))# 显示原图
axes[0].imshow(original_image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].axis('off')# 显示对数变换图像
axes[1].imshow(log_image, cmap='gray')
axes[1].set_title('Log Transformation')
axes[1].axis('off')# 显示指数变换图像
axes[2].imshow(exp_image, cmap='gray')
axes[2].set_title('Exponential Transformation')
axes[2].axis('off')# 展示图像
plt.tight_layout()
plt.show()
3)运行结果

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

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

相关文章

Linux网络套接字补充

(&#xff61;&#xff65;∀&#xff65;)&#xff89;&#xff9e;嗨&#xff01;你好这里是ky233的主页&#xff1a;这里是ky233的主页&#xff0c;欢迎光临~https://blog.csdn.net/ky233?typeblog 点个关注不迷路⌯▾⌯ 目录 一、地址转换函数 二、TCP协议通讯流程 三、…

线上应用部署了两台load为1四核服务器

线上应用部署了两台服务器。 项目发布后&#xff0c;我对线上服务器的性能进行了跟踪&#xff0c;发现一台负载为3&#xff0c;另一台负载为1&#xff0c;其中一台四核服务器已经快到瓶颈了&#xff0c;所以我们紧急排查原因。 1、使用TOP命令查看占用CPU较大的负载和进程&…

JavaWeb基础入门——(二)MySQL数据库基础(2-SQL 结构化查询语言)

四、MySQL逻辑结构 4.1 逻辑结构 4.1 记录 五、SQL 结构化查询语言 5.1 SQL概述 SQL&#xff08;Structural Query Language&#xff09;结构化查询语言&#xff0c;用于存取、查询、更新数据以及管理关系型数据库系统 5.1.1 SQL发展 SQL是在1981年由IBM公司推出&#xff0c;…

深入理解 Webpack 热更新原理:提升开发效率的关键

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

了解华为(PVID VLAN)与思科的(Native VLAN)本征VLAN的区别并学习思科网络中二层交换机的三层结构局域网VLAN配置

一、什么是二层交换机&#xff1f; 二层交换机&#xff08;Layer 2 Switch&#xff09;是一种网络设备&#xff0c;主要工作在OSI模型的数据链路层&#xff08;第二层&#xff09;&#xff0c;用于在局域网内部进行数据包的交换和转发。二层交换机通过学习MAC地址表&#xff0…

计算机服务器中了locked勒索病毒怎么解密,locked勒索病毒解密流程

科技的发展带动了企业生产&#xff0c;越来越多的企业开始利用计算机服务器办公&#xff0c;为企业的生产运营提供了极大便利&#xff0c;但随之而来的网络安全威胁也引起了众多企业的关注。近日&#xff0c;云天数据恢复中心接到许多企业的求助&#xff0c;企业的计算机服务器…

arthas之生产环境排查问题常用功能

背景 生产环境调试使用。对问题进行高效排查。 目录 一、watch idea安装arthas插件 idea插件下载代理配置 A. 选择Http Proxy Settings, 打开配置页面B. 选择 Auto-detect proxy settingC. 上图中选择Ok即可, plugin 列表 刷新得到插件内容 启动arthas客户端watch监听 通过art…

(关键点检测)YOLOv8实现多类人体姿态估计的输出格式分析

&#xff08;关键点检测&#xff09;YOLOv8实现多类人体姿态估计的输出格式分析 任务分析 所使用的数据配置文件 网络结构 导出模型 用 netron 可视化 输出格式分析 参考链接 1. 任务分析 判断人体关键点时一并给出关键点所属的类别&#xff0c;比如男人&#xff0c;女…

【Redis知识点总结】(二)——Redis高性能IO模型剖析

Redis知识点总结&#xff08;二&#xff09;——Redis高性能IO模型及其事件驱动框架剖析 IO多路复用传统的阻塞式IO同步非阻塞IOIO多路复用机制 Redis的IO模型Redis的事件驱动框架 IO多路复用 Redis的高性能的秘密&#xff0c;在于它底层使用了IO多路复用这种高性能的网络IO&a…

vue 自定义组件绑定model+弹出选择支持上下按键选择

参考地址v-modelhttps://v2.cn.vuejs.org/v2/guide/components-custom-events.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E7%9A%84-v-model 原文代码 Vue.component(base-checkbox, {model: {prop: checked,event: change},props: {checked: Boolean},template: `…

2.4_3 死锁的处理策略——避免死锁

文章目录 2.4_3 死锁的处理策略——避免死锁&#xff08;一&#xff09;什么是安全序列&#xff08;二&#xff09;安全序列、不安全状态、死锁的联系&#xff08;三&#xff09;银行家算法 总结 2.4_3 死锁的处理策略——避免死锁 银行家算法是“避免死锁”策略的最著名的一个…

Elasticsearch架构原理

一. Elasticsearch架构原理 1、Elasticsearch的节点类型 在Elasticsearch主要分成两类节点&#xff0c;一类是Master&#xff0c;一类是DataNode。 1.1 Master节点 在Elasticsearch启动时&#xff0c;会选举出来一个Master节点。当某个节点启动后&#xff0c;然后使用Zen D…

时间感知自适应RAG(TA-ARE)

原文地址&#xff1a;Time-Aware Adaptive RAG (TA-ARE) 2024 年 3 月 1 日 介绍 随着大型语言模型&#xff08;LLM&#xff09;的出现&#xff0c;出现了新兴能力的概念。前提或假设是LLMs具有隐藏的和未知的能力&#xff0c;等待被发现。企业家们渴望在LLMs中发现一些无人知晓…

论文笔记 - 基于振动信号的减速器故障诊断方法

1.论文摘要 基于振动信号的减速器故障诊断方法, 沈晴,《起重运输机械》,2018 原作者联系方式: shenqing@zmpc.com 这篇文章包含了一个从工程到数据处理和故障定位的完整过程。是一篇综述文档。它介绍了机械设备常见的三类故障(轴,齿轮、轴承)的故障特征,并在一个故障追…

指针数组和数组指针(详细解释)

指针数组 指针数组的作用 指针数组和数组指针是C语言中常用的概念&#xff0c;它们分别有不同的作用和用法。 指针数组&#xff1a; 指针数组是一个数组&#xff0c;其中的每个元素都是指针类型。它可以用来存储多个指针&#xff0c;每个指针可以指向不同的数据类型或者相同…

xxl-job学习记录

1、应用场景 例&#xff1a; 某收银系统需要在每天凌晨统计前一天的财务分析、汇总 某银行系统需要在信用卡还款日前三天发短信提醒等 2、为什么需要使用任务调度 spring中提供了注解Scheduled的注解&#xff0c;这个注解也可以实现定时任务的执行 我们只需要在方法上使用这…

人工智能|机器学习——K-means系列聚类算法k-means/ k-modes/ k-prototypes/ ......(划分聚类)

1.k-means聚类 1.1.算法简介 K-Means算法又称K均值算法&#xff0c;属于聚类&#xff08;clustering&#xff09;算法的一种&#xff0c;是应用最广泛的聚类算法之一。所谓聚类&#xff0c;即根据相似性原则&#xff0c;将具有较高相似度的数据对象划分至同一类簇&#xff0c;…

2024 年中国高校大数据挑战赛赛题 D:行业职业技术培训能力评价完整思路以及源代码分享

中国是制造业大国&#xff0c;产业门类齐全&#xff0c;每年需要培养大量的技能娴 熟的技术工人进入工厂。某行业在全国有多所不同类型&#xff08;如国家级、 省级等&#xff09;的职业技术培训学校&#xff0c;进行 5 种技能培训。学员入校时需要 进行统一的技能考核&#xf…

数字化转型导师坚鹏:科技金融政策、案例及数字化营销

科技金融政策、案例及数字化营销 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好政策&#xff1f; 不知道科技金融有哪些成功案例&#xff1f; 不知道科技金融如何数字化营销&#xff1f; 课程特色&#xff1a; 以案例的方式解读原…

【个人开发】llama2部署实践(二)——基于GPU部署踩坑

折腾了一整天&#xff0c;踩了GPU加速的一堆坑&#xff0c;记录一下。 1.GPU加速方式 上篇已经写了llama2部署的大概流程&#xff1a;【【个人开发】llama2部署实践&#xff08;一&#xff09;】——基于CPU部署 针对llama.cpp文件内容&#xff0c;仅需再make的时候带上参数…