所以我认为您在第 1 步中走在正确的轨道上(对图像应用一些算法,将其转换为一组特征)。
这个项目比大多数机器学习问题更具挑战性,因为在这里您实际上必须从原始数据(组成卡通的各个帧)创建训练数据集。例如,抓取一个帧,识别该帧中的两个字符,呆伯特和有角的字符(我相信呆伯特的老板,不知道他的名字),从该帧中提取这两个字符并附加到每个适当的类标签(例如,“1”代表 Dlibert)。
第 1 步
要从构成呆伯特卡通的每一帧中提取单个字符,我建议对每一帧进行光谱分解。如果您不熟悉这种技术,那么它的核心就是一个特征向量分解。
如果你喜欢 python(或 R,因为你可以使用像 RPy 这样的 python-to-R 绑定),那么我强烈建议你查看sklearn。特别是这个优秀的库(最初是在 SciPy scikits 项目伞下开发的,因此使用 NumPy + SciPy 进行矩阵计算)具有多种图像分割算法,其中一种基于@987654322 @。对于您项目中的这一步,您很可能希望查看这两个 scikits.learn 模块
这两个模块包含两个很好的示例脚本,一个 segmenting a digital photograph 和 other 分割由三个部分叠加的圆圈组成的图像,彼此之间的对比度最小,而 w/r/t背景-我怀疑两者都是您需要执行的分解的更困难的问题。换句话说,sklearn 在源代码分发中包含两个完整的、有据可查的示例脚本,它们都处理与您的数据相似的数据。任何一个或两者都将是此步骤的绝佳模板。
第 2 步
这是第一步;这是第二个:排序分解图像的所有组件成组,每个呆伯特字符一组。接下来,为每个组分配一个类标签,例如,如果分解步骤中有四个字符,那么类标签的合适选择是“0”、“1”、“2”和“3”。将这些类标签附加到组件矩阵(步骤 1 中的分解产物),以便将每个字符矩阵映射到其对应的类(Dilbert 字符)。
第 3 步
选择合适的机器学习技术。这一步你有很多选择;唯一的标准是该技术属于 监督 类别(因为您已为数据分配了类标签)并且它用作 分类器(即,它返回一个类标签,而不是输出数值的回归量)。鉴于这是一个个人项目,我会选择你觉得最有趣的一个。满足我刚才提到的标准的一些是:多层感知器(神经网络)、支持向量机(SVM)和k-最近邻 (kNN)。
第 4 步
训练、验证和测试您的分类器
替代技术:模板匹配
一旦步骤 1 完成(每个图像被分解成一组对象,其中一些无疑将代表角色),您可以手动筛选这些分解产物并为卡通中的每个角色收集样本。这些是模板。
接下来,您将从图像分割的对象与这组独特的模板进行比较。在scikit-image,另一个scipy scikit,你可以使用方法match_template,你传入一个模板图像和一个候选图像,这个方法返回一个二维数组显示逐像素相关性(-1 和 1 之间)。