在我的课程中,我必须使用两个分类器创建一个应用程序来确定图像中的对象是 phylum porifera(海海绵)还是其他对象。
但是,当谈到 python 中的特征提取技术时,我完全迷失了。我的导师说服我使用课堂上没有涵盖的图像。
任何人都可以指导我阅读有意义的文档或阅读或建议考虑的方法吗?
在我的课程中,我必须使用两个分类器创建一个应用程序来确定图像中的对象是 phylum porifera(海海绵)还是其他对象。
但是,当谈到 python 中的特征提取技术时,我完全迷失了。我的导师说服我使用课堂上没有涵盖的图像。
任何人都可以指导我阅读有意义的文档或阅读或建议考虑的方法吗?
在图像中,一些常用的特征提取技术是二值化和模糊
二值化:将图像数组转换为 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 库来进行处理,你也会得到很好的教程