【问题标题】:How to perform labelling in the 3D extracted features in classification?如何在分类中提取的 3D 特征中进行标记?
【发布时间】:2014-05-29 20:45:52
【问题描述】:

我从许多 3D 图像中提取了特征。 那么提取特征的形式(例如):

 Image 1 --> 10 x 12 x 30
 Image 2 --> 15 x 10 x 30
 Image 3 --> 13 x 12 x 30
 Image 4 --> 14 x 19 x 30
 .
 .
 So on

其中,第一维和第二维一直在变化,但第三维不变(特征的维数)。

要进行分类,我需要用标签标记从每个图像中提取的每个特征。 为了方便起见,我必须将这些特征(来自每张图像)保持在一行中。

所以我将特征重塑为

  feat_reshape= reshape(feature,[size(feature,1)*size(feature,2) size(feature,3)]); 

在这种情况下,我将有 2D 特征矩阵。
但是,我仍然需要它是一维的。

我已经尝试使用“imhist”并将每行中每个图像的每个特征保留在矩阵中。但仍然没有给出好的结果。可能是因为有很多0值。

然后我尝试连接每个特征的每一列(每个图像),所以变成 1 行。但问题在于连接矩阵中列的大小不同(每行中的元素)。

例如:

  Image 1 --> 10 x 12 x 30 = 3600 elements
  Image 2 --> 15 x 10 x 30 = 4500 elements

任何建议,我如何存储我提取的 3D 特征,然后标记它以在 LibSVM MATLAB 中使用?

【问题讨论】:

    标签: matlab matrix label libsvm


    【解决方案1】:

    如果要将标签分配给每张图像,您将需要一些方法来聚合或汇集每张图像的密集特征。简单直方图是一种方法。替代品是

    • 只需调整原始 3D 图像的大小以适应固定大小,然后计算特征。
    • bag-of-words:首先对每个像素的特征进行聚类,并通过其对应的聚类索引(视觉词)表示每个像素。然后按直方图汇总图像。
    • spatial-pyramid:不是整个图像的直方图,而是将图像分割成具有不同分辨率(1x1、2x2 等)的网格,通过直方图(或其他池化)汇总每个单元格中的特征,然后将它们连接起来。池化是一种简单的统计数据,例如最小值、最大值、平均值等。

    如果没有一个效果很好,请怀疑您的功能设计。也尝试通过交叉验证找到 SVM 的最佳训练参数(查看 LibSVM 文档)。

    【讨论】:

    • 我执行 HOG 描述符来提取特征。但正如我之前提到的,从每张图像中提取的特征的大小是不同的 M X N X 32(每张图像只有这 32 个相同)
    • 聚合是为了处理不同的图片尺寸,从而为每张图片提供不同的M和N。
    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 2019-06-09
    • 2012-03-08
    • 2013-04-23
    • 2011-06-28
    • 2020-10-19
    • 2014-08-26
    相关资源
    最近更新 更多