用Python提取图像特征


18

在我的课堂上,我必须使用两个分类器创建一个应用程序,以确定图像中的对象是多孔菌(seasponge)的示例还是其他一些对象。

但是,当我涉及python中的特征提取技术时,我完全迷失了。我的顾问说服我使用课堂上没有讲到的图像。

谁能指导我寻找有意义的文档或阅读或提出建议的方法?


您提到了顾问,所以我认为这是研究生院工作的一部分吗?您是否可以使用任何商业软件,或者只希望使用Python和开源软件包来进行此操作?您目前在课堂上学到什么,这堂课的名字是什么?此外,就给出答案所需的时间方面是否有性能要求?
MLowry

我应该只使用Python和开源软件包。甚至不鼓励编写自己的源代码。这是硕士学位课程。该课程是数据科学入门课程。我们讨论的最后一件事是功能选择,尽管几乎所有讨论都与文本数据有关。精度不超过70%时没有性能要求
Jeremy Barnes

Answers:


11

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

二值化:将图像数组转换为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()

并且模糊的图像是:

在此处输入图片说明

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


1
非常感谢。我在一些地方发布了有关此问题的信息,而您的问题是迄今为止提供最多信息的答案。我意识到我误解了图像的特征提取在概念上是如何工作的。
杰里米·巴恩斯

很高兴我的回答对您
有所

8

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

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


1

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.