用Python进行机器学习(13)-图像特征提取

boyanx3个月前技术教程16

相对于前面的机器学习都是处理一些简单的数字,今天我们来用机器学习处理一点稍微高级的内容,我们进行图像的特征提取。图像的特征提取有很多的用途,比如图像分类、目标检测、图像检索、聚类分析、异常检测、图像生成、特征融合等,但是饭总是要一口一口吃,知识也是一点一点学,我们先看一下如何提取图像特征。

我们提取到的图像特征是patch,可以理解为是一个图像块,它是指从图像中提取的小区域,它可以包含物体的某个部分或者某个特定的纹理。这里还是使用sklearn加skimage,直接看实际代码吧,如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.feature_extraction import image
from skimage import data

# 使用skimage自带的硬币图像
original_image = data.coins()  

# 显示原始图像
plt.subplot(1, 2, 1)
plt.imshow(original_image, cmap='gray')
plt.title('Original Image')
plt.axis('off')

# 从图像中提取随机 patches
patches = image.extract_patches_2d(original_image, (32, 32), max_patches=25, random_state=42)

# 显示提取的patches
plt.subplot(1, 2, 2)
for i, patch in enumerate(patches):  
    plt.imshow(patch, cmap='gray', 
               extent=(i%5 * 32, (i%5 + 1) * 32, 
                      (i//5) * 32, (i//5 + 1) * 32))
plt.xlim(0, 5*32)
plt.ylim(5*32, 0)
plt.title('Extracted Patches')
plt.axis('off')

plt.tight_layout()
plt.show()

上面的代码还是比较好理解的,重点介绍两个地方吧:

第一个就是使用data.coins()来调用类库中已经有的硬币图像,当然也可以使用其他方法比如moon方法来查看月球表面的图像,或者加载自己的图片也可以。

第二个就是extract_patches_2d这个方法,它用来提取二维的图像特征,这里我们最多只抽取25个,每个都是32*32像素大小的。

然后我们来看一下展示的效果吧,如下所示:

需要说明的是,原始图像就是左边的图像,右边则是提取出来的25个特征,每行展示5个特征,每列展示5个特征,为了防止部分朋友看不清,我们再来对这个特征部分来个单独的截图看一下:

可以看到,这里提取到的特征大部分是硬币的边缘部分,不过方向和面积各不相同,有的只截取到了一点,有的则截取到了比较多的部分,下面对这两处做了具体的说明:

对于图片的特征提取,我们先介绍到这里吧,通过特征提取,我们可以更加关注到图片的纹理细节,为图片类型的更多应用打下基础。

相关文章

有哪些PLC编程的低代码工具推荐

PLC编程低代码工具推荐及功能对比一、西门子 TIA Portal核心低代码特性支持“拖拽式组态”与可视化编程,简化硬件配置与逻辑设计流程。集成 Mendix 低代码平台,实现 IT/OT 融合,支持...

深入详解Python的比较运算

在Python编程中,比较运算是构建逻辑判断的核心基础,无论是条件控制、数据筛选还是算法逻辑,都离不开对数据的比较操作。本文将从基础概念到高级应用,全面解析Python比较运算的细节,帮助开发者深入理...

几行代码,一窥上帝造物,帝国理工开源CAX,引爆人工生命新纪元

人工生命的革命来临!帝国理工的研究人员,开源了名为CAX的硬件加速工具。只需几行代码,就能复刻人工生命实验,模拟速度可提升2000倍,部分表现甚至超过了GPT-4!人工生命研究的新纪元!「人工生命」...

Go与Rust深度对比分析:从代码看本质

引言Go和Rust是近年来最受关注的两门现代系统编程语言,它们各自有着鲜明的设计哲学和适用场景。本文将通过大量代码示例,从多个维度深入对比这两门语言的异同,帮助开发者根据项目需求做出合适的选择。1....

Python 事件驱动:观察者、发布 - 订阅模式的代码实现与场景对比

事件驱动编程是一种编程范式,程序的执行流程由事件的发生来决定。事件可以是用户的操作,如鼠标点击、键盘输入,也可以是系统发生的特定状况,像定时事件、网络数据到达等。在事件驱动编程里,程序会等待事件的触发...

VBA信息获取与处理:如何在多个工作表中查找某个给定值

《VBA信息获取与处理》教程(版权10178984)是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。