Python中图像的特征提取

数据挖掘 Python 特征提取 图像识别
2021-09-20 00:07:54

在我的课程中,我必须使用两个分类器创建一个应用程序来确定图像中的对象是 phylum porifera(海海绵)还是其他对象。

但是,当谈到 python 中的特征提取技术时,我完全迷失了。我的导师说服我使用课堂上没有涵盖的图像。

任何人都可以指导我阅读有意义的文档或阅读或建议考虑的方法吗?

3个回答

在图像中,一些常用的特征提取技术是二值化模糊

二值化:将图像数组转换为 1 和 0。这是在将图像转换为 2D 图像时完成的。甚至也可以使用灰度。它为您提供图像的数字矩阵。存储在光盘上时,灰度占用的空间要少得多。

这就是你在 Python 中的做法:

from PIL import Image

%matplotlib inline  

#Import an image
image = Image.open("xyz.jpg")

image

示例图像:

在此处输入图像描述

现在,转换成灰度:

im = image.convert('L')

im

将返回此图像:

在此处输入图像描述

通过运行这个矩阵可以看到:

array(im)

数组看起来像这样:

array([[213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 176, 176, 176],
       [213, 213, 213, ..., 175, 175, 175],
       ..., 
       [173, 173, 173, ..., 204, 204, 204],
       [173, 173, 173, ..., 205, 205, 204],
       [173, 173, 173, ..., 205, 205, 205]], dtype=uint8)

现在,使用直方图和/或等高线图查看图像特征:

from pylab import *

# create a new figure
figure()
gray()
# show contours with origin upper left corner
contour(im, origin='image')
axis('equal')
axis('off')


figure()


hist(im_array.flatten(), 128)

show()

这将返回一个情节,看起来像这样:

在此处输入图像描述 在此处输入图像描述

模糊:模糊算法采用相邻像素的加权平均,将周围的颜色融入每个像素。它可以更好地增强轮廓,并有助于更好地理解特征及其重要性。

这就是你在 Python 中的做法:

from PIL import *


figure()
p = image.convert("L").filter(ImageFilter.GaussianBlur(radius = 2))
p.show()

模糊的图像是:

在此处输入图像描述

因此,这些是您可以进行特征工程的一些方法。对于高级方法,您必须了解计算机视觉和神经网络的基础知识,以及不同类型的过滤器及其意义和背后的数学原理。

这个很棒的教程涵盖了卷积神经网络的基础知识,目前在大多数视觉任务中都达到了最先进的性能:

http://deeplearning.net/tutorial/lenet.html

python 中的 CNN 有许多选项,包括 Theano 和基于它构建的库(我发现 keras 易于使用)。

如果您更喜欢避免深度学习,您可以研究 OpenCV,它可以学习许多其他类型的特征、线 Haar 级联和 SIFT 特征。

http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_feature2d/py_table_of_contents_feature2d/py_table_of_contents_feature2d.html

正如 Jeremy Barnes 和 Jamesmf 所说,你可以使用任何机器学习算法来处理这个问题。它们功能强大,可以自动识别功能。您只需要为算法提供正确的训练数据。由于需要处理图像,卷积神经网络将是您更好的选择。

这是学习卷积神经网络的好教程。您也可以下载代码,并可以根据您的问题定义进行更改。但是你需要学习 python 和 theano 库来进行处理,你也会得到很好教程