使用 Python 从图像数据构建特征

发布日期:2026-07-19 08:54:05  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-19 08:54:05  
0

介绍

随着计算机视觉的广泛应用,了解如何处理图像变得非常重要。图像中存储了大量信息,对其进行预处理有助于提取有用的信息。这有助于图像增强、图像检索、图像识别和可视化。

在本指南中,您将学习使用 Python 从图像中提取特征的技术。这可应用于医学图像分析、地理空间计算、机器人视觉和人工智能。

加载图像

在本指南中,您将使用功能强大的scikit-image库来处理图像。scikit -image包专用于图像处理,并使用原生numpy数组作为对象来理解和存储图像。包中有许多内置图像,您将在本指南中使用它们。

下面的前两行代码导入了scikit-image包和内置数据集。最后两行代码绘制了图像。

      import skimage
from skimage import data, io
import numpy as np
from matplotlib import pyplot as plt
%matplotlib inline
    

加载所需的库后,下一步是加载一些图像。您将绘制的第一幅图像是火箭的图像。这是通过以下代码完成的。

      rocket = data.rocket() 
io.imshow(rocket)
plt.show()
    

您还将使用以下代码加载硬币的图像。

      coins = data.coins()
io.imshow(coins)
plt.show()
    

您已加载上面的图像,接下来将学习几个重要的转换。

颜色变换

有时你需要将图像颜色转换为灰度。这可以通过skimagecolor模块完成。下面的代码使用color.rgb2gray()模块对火箭图像执行此转换。

      from skimage import color 
grayscale = color.rgb2gray(rocket) 

io.imshow(grayscale)
plt.show()
    

翻转

您可能还想翻转图像。np.fluidup()函数可用于垂直翻转。 以下代码执行此任务。

      # Flip the image in up direction 
verticalflip = np.flipud(rocket)

io.imshow(verticalflip)
plt.show()
    

在这种情况下,图像是反转的,但在许多情况下,您会收到反转的图像并需要翻转它。 此功能在这些情况下会很方便。

特征提取:灰度像素值

图像由像素表示,这意味着创建图像特征的最简单方法是使用这些原始像素值作为单独的特征。首先打印硬币图像的形状。

      coins.shape
    

输出:

      (303, 384)
    

特征的数量将与像素的数量相同,在本例中是 303 乘以 384,即 116,352。

要将这些像素排列为特征,您将使用numpy 中的reshape()函数。第一行代码使用 reshape 函数创建特征对象,该函数将图像及其尺寸作为输入。第二行打印形状和特征。

      features = np.reshape(coins, (303*384))
features.shape, features
    

输出:

      ((116352,), array([ 47, 123, 133, ...,   4,  10,   7], dtype=uint8))
    

上面的输出表明您具有该特征,它是一个长度为 116,352 的一维数组。

阈值

阈值处理是一种将图像划分为前景和背景的技术。这是最简单的图像分割方法,其中对图像像素值应用截止值来分割背景。要了解其工作原理,请先使用以下代码加载相机图像。

      camera = data.camera()
io.imshow(camera)
plt.show()
    

下一步是应用阈值来分割图像。这是通过下面的代码完成的。第一行任意分配阈值 100。第二行将其应用于图像像素值。最后四行代码显示原始图像和阈值图像以显示差异。

      threshold_value = 100 
camera_threholded = camera > threshold_value 
 
# Show the original image
io.imshow(camera)
plt.show()

# Show the thresholded image
io.imshow(camera_threholded)
plt.show()
    

下面的例子说明了选择阈值的重要性,其中阈值保持在200。

      threshold_value = 200 
camera_threholded = camera > threshold_value 
 

io.imshow(camera)
plt.show()

io.imshow(camera_threholded)
plt.show()
    

显然,选择错误的阈值会扭曲图像,使其变得毫无用处。

解决方案是,您可以使用Otsu方法而不是任意阈值,该方法使用简单的启发式方法来查找最佳阈值。

为此,第一步是导入threshold_otsu模块,该模块在下面的第一行代码中完成。第二行使用threshold_otsu ()函数获取最佳阈值,而第三行将其应用于图像。最后四行代码显示原始图像和阈值图像以显示差异。

      from skimage.filters import threshold_otsu 
 
threshold_value = threshold_otsu(camera)  

camera_threholded = camera > threshold_value  

# Show the original image
io.imshow(camera)
plt.show()

# Show the thresholded image
io.imshow(camera_threholded)
plt.show()
    

边缘检测

高级图像处理应用之一是一种称为边缘检测的技术,其目的是识别图像中亮度急剧变化或不连续的点。这些点被组织成一组称为边缘的曲线段。您将使用硬币图像来探索这种技术,使用 Canny 边缘检测技术,该技术被广泛认为是边缘检测技术的标准。

第一行代码从功能模块导入 Canny 边缘检测器。第二行将图像转换为灰度,这是 Canny 检测器的要求。第三行将 Canny 边缘检测器模块应用于硬币图像最后四行代码绘制原始图像和带有边缘的结果图像。

      from skimage.feature import canny 
coins = color.rgb2gray(coins) 
 
# Apply Canny detector 
coins_edges = canny(coins) 

io.imshow(coins)
plt.show()

io.imshow(coins_edges)
plt.show()
    

在上图中,你现在可以更清楚地看到边缘。边缘检测广泛应用于人脸检测、指纹匹配和医疗诊断等应用。

结论

在本指南中,您学习了如何使用 Python 从图像数据构建特征。您学习了包括图像转换、阈值处理、特征提取和边缘检测在内的技术。最后,您学习了如何使用 Python 中流行且功能强大的scikit-image库执行这些任务。

要了解有关使用 Python 进行数据科学的更多信息,请参阅以下指南。

  1. Scikit 机器学习

  2. 使用 scikit-learn 进行线性、套索和岭回归

  3. 使用 scikit-learn 实现非线性回归树

  4. 使用 scikit-learn 进行神经网络机器学习

  5. 使用 scikit-learn 验证机器学习模型

  6. 使用 scikit-learn 进行集成建模

  7. 使用 scikit-learn 准备建模数据

  8. <a href="https://www-pluralsight-com.translate.goog/resources/blog/guides/data-science-be

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据