在我的课堂上,我必须使用两个分类器创建一个应用程序,以确定图像中的对象是多孔菌(seasponge)的示例还是其他一些对象。
但是,当我涉及python中的特征提取技术时,我完全迷失了。我的顾问说服我使用课堂上没有讲到的图像。
谁能指导我寻找有意义的文档或阅读或提出建议的方法?
在我的课堂上,我必须使用两个分类器创建一个应用程序,以确定图像中的对象是多孔菌(seasponge)的示例还是其他一些对象。
但是,当我涉及python中的特征提取技术时,我完全迷失了。我的顾问说服我使用课堂上没有讲到的图像。
谁能指导我寻找有意义的文档或阅读或提出建议的方法?
Answers:
在图像中,一些常用的特征提取技术是二值化和模糊化
二值化:将图像数组转换为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功能。
正如Jeremy Barnes和Jamesmf所说,您可以使用任何机器学习算法来解决该问题。它们功能强大,可以自动识别功能。您只需要向算法提供正确的训练数据即可。由于需要在图像上进行处理,因此卷积神经网络将是您更好的选择。
这是学习卷积神经网络的一个很好的教程。您也可以下载代码,并可以根据问题定义进行更改。但是您需要学习python和theano库进行处理,并且您还将获得很好的教程。