gpt4 book ai didi

python - SIFT输入到ANN

转载 作者:行者123 更新时间:2023-12-02 17:42:55 25 4
gpt4 key购买 nike

我正在尝试使用人工神经网络对图像进行分类,而我想尝试的方法是:

  • 获取功能描述符(现在使用SIFT)
  • 使用神经网络分类

  • 我为此使用OpenCV3和Python。

    我是机器学习的新手,我有以下问题-

    我分析的每个图像将具有不同数量的“关键点”,因此二维“描述符”数组的尺寸也将有所不同。如何确定我的人工神经网络的输入。例如,对于一个样本图像,描述符的形状为(12211,128),那么我是否要将此数组弄平并用作输入,在这种情况下,我不得不担心每个图像的输入大小会有所变化,或者我还要为它计算其他值输入?

    最佳答案

    我不确定这是否是确切的解决方案,但这对我有用。主要思想如下:

  • 将图像划分为MxN网格。
  • 为每个子图像获取固定数量的特征点。
  • 连接所有子图像的结果,以获得整个图像的特征 vector 。

  • 支持代码大致如下(函数“pre_process_image”):
    def tiles(arr, nrows, ncols):
    """
    If arr is a 2D array, the returned list contains nrowsXncols numpy arrays
    with each array preserving the "physical" layout of arr.

    When the array shape (rows, cols) are not divisible by (nrows, ncols) then
    some of the array dimensions can change according to numpy.array_split.

    """
    rows, cols, channel = arr.shape
    col_arr = np.array_split(range(cols), ncols)
    row_arr = np.array_split(range(rows), nrows)
    return [arr[r[0]: r[-1]+1, c[0]: c[-1]+1]
    for r, c in product(row_arr, col_arr)]

    def pre_process_images(data, dimensions=(28, 28)):
    images = data['image']
    features = []
    count = 1
    nrows = dimensions[0]
    ncols = dimensions[1]
    sift = cv2.xfeatures2d.SIFT_create(1)
    for arr in images:
    image_feature = []
    cut_image = tiles(arr, nrows, ncols)
    for small_image in cut_image:
    (kps, descs) = sift.detectAndCompute(im, None)
    image_feature.append(descs.flatten())
    features.append(image_feature)
    print count
    count += 1

    data['sift_features'] = features
    return data

    但是,这 非常慢。我正在研究一种使用PCA最佳选择功能的方法。

    关于python - SIFT输入到ANN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42359440/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com