使用Python和SciPy进行图像处理

3
我正在尝试使用Python进行图像处理。 我的目标是识别人脸或检测圆形(基本上是人脸),而我手头有一张带有人类的图片。 到目前为止,我已经完成了以下事情:
1. 使用Sobel边缘检测对图像进行了边缘检测。 2. 然后将图像转换为二进制图像,保存二进制图像并打印出图像的数组,它是0或255(黑白)。 3. 现在我很困惑,在这之后,我该怎么做才能检测图像中的圆形,并打印出图像中的人数。 4. 我正在使用静态图片,因此我正在为图像提供输入。
我使用的工具包括Python、PIL、NumPy和SciPy。我不想使用OpenCV来检测人脸,并计算图像中的人数并打印出人数。
import numpy
import scipy
from scipy import ndimage

im = scipy.misc.imread('test5.jpg')
im = im.astype('int32')
dx = ndimage.sobel(im, 0)  # horizontal derivative
dy = ndimage.sobel(im, 1)  # vertical derivative
mag = numpy.hypot(dx, dy)  # magnitude
mag *= 255.0 / numpy.max(mag)  # normalize (Q&D)
scipy.misc.imsave('sobel.jpg', mag)

上面的代码不是我写的,我从网上找到的。

我也在其他论坛上问过这个问题。这里


3
你会后悔的,如果不使用OpenCV这个好工具的话 ;) - berak
我不能使用OpenCV,因为我的老师严格告诉我不要使用,所以没有选择。 :( @berak - user2096230
你的数据集是什么样子的?你需要在人群中识别一个脸,还是需要在画面中识别一个脸? - David Marx
你更有可能错过所有的人脸而检测到大量的非人脸。我真的不认为这种方法会有什么好处,你有任何证据(论文、可工作的代码等)证明它能行吗? - mmgp
没有,我没有这样的东西,我的老师告诉我要尝试这种方式,我只知道一些基本的numpy和其他库,而且我也没有太多时间去深入学习 :( @mmgp - user2096230
显示剩余7条评论
3个回答

3
你想要做的事情可以通过使用scipy、numpy和sklearn来实现。
首先,你需要收集大量的人脸数据以及许多不是人脸的随机数据。
例如,你有2000张人脸图像和10000张非人脸图像。然后,你需要加载它们,并对它们的大小和强度进行归一化处理,然后将它们传递给SVM进行分类。人脸照片的标签应该为1,非人脸的标签应该为0。
images = [image1, image2, image3... imagen]
labels = [0 1 1 ... 0]

当你完成以上步骤后,需要将其传递给一个支持向量机(svm):
faceclassifier = SVC()
faceclassifier.fit(images, labels) 

请点击这里了解更多。
然后,在每个新的查询图像中,使用滑动窗口获取所有块,并将每个块通过 SVM 进行处理。
如果 SVM 的结果很高,则将其分类为代表人脸的块;否则,它不是一个人脸。
总的来说,您无法仅使用图像处理技术构建准确的人脸检测器,您应该使用计算机视觉和机器学习技术。

1

你应该研究一下Viola Jones算法。OpenCV库本身有一个不错的实现。这是目前最好的用于检测图像中面部的算法之一。虽然在构建深度架构时还有更好的算法。


0

我同意entropiece的观点。在解决这类问题时,使用计算机视觉和机器学习是常规方法。

然而,如果你仍然想尝试使用圆形检测来实现此目的,你可以尝试看看圆形霍夫变换。它很容易进行编码,甚至可以从头开始编写代码,而不必使用其他任何库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接