Machine learning 机器学习图像特征提取

Machine learning 机器学习图像特征提取,machine-learning,image-processing,feature-extraction,Machine Learning,Image Processing,Feature Extraction,在机器学习中,灰度图像的特征提取是一个难题 我有一个灰色图像转换成彩色与此 from PIL import Image img = Image.open('source.png').convert('LA') img.save('greyscalesource.png') image2 = imread('greyscalesource.png') print("The type of this input is {}".format(type(image))) print

在机器学习中,灰度图像的特征提取是一个难题

我有一个灰色图像转换成彩色与此

from PIL import Image
img = Image.open('source.png').convert('LA')
img.save('greyscalesource.png')

image2 = imread('greyscalesource.png')
print("The type of this input is {}".format(type(image)))
print("Shape: {}".format(image2.shape))
plt.imshow(image2)

输出为:

我实际上需要从这张灰色图片中提取特征,因为下一部分将训练一个具有该特征的模型,以预测图像的彩色形式

我们不能使用任何深度学习库

有一些方法,如筛选球快速。。。 但我真的不知道如何才能为我的目标提取特征

#ORB
orb = cv2.ORB_create()
#keypoints and descriptors
kpO, desO = orb.detectAndCompute(img, None)
img7 = cv2.drawKeypoints(img, kpO, 1, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imwrite('_ORB.jpg',img7)

以上代码的输出就是真的


有什么解决方案或想法吗?我该怎么办?

您行中的描述符
des0

kpO, desO = orb.detectAndCompute(img, None)
是您需要用于ML算法的功能

下面是使用ML的knn算法基于立体图像对的密集SIFT匹配示例:

输入图像:

读取输入图像并分割立体图像

import cv2
import matplotlib.pyplot as plt
import numpy as np

def split_input_image(im):
    im1 = im[:,:int(im.shape[1]/2)]
    im2 = im[:,int(im.shape[1]/2):im.shape[1]]
    # Convert to grayscale
    g_im1 = cv2.cvtColor(im1, cv2.COLOR_BGR2GRAY)
    g_im2 = cv2.cvtColor(im2, cv2.COLOR_BGR2GRAY)
    return im1, im2, g_im1, g_im2

im = cv2.imread('../input_data/Stereo_Pair.jpg')
im1, im2, g_im1, g_im2 = split_input_image(im)
密筛的写函数

def dense_sift(gray_im):
    sift = cv2.xfeatures2d.SIFT_create()
    step_size = 5
    kp = [cv2.KeyPoint(x,y,step_size) for y in range(0,gray_im.shape[0],step_size)
                                      for x in range(0,gray_im.shape[1],step_size)]
    k,feat = sift.compute(gray_im,kp) # keypoints and features
    return feat, kp
创建类似维度的空模板图像,以可视化筛选匹配

visualize_sift_matches = np.zeros([im1.shape[0],im1.shape[1]])
获取灰度图像的特征和关键点(我的顺序颠倒了。不要混淆。)

使用kNN从两个功能集获取匹配

bf = cv2.BFMatcher()
matches = bf.knnMatch(f1,f2,k=2)
查找最小阈值的常见匹配项

common_matches = []
for m,n in matches:
    if m.distance < 0.8 * n.distance:
        common_matches.append([m])
想象

plt.imshow(visualize_sift_matches)
plt.show()

我需要使用这些功能作为输入,使用彩色(有点类似)图像作为输出来训练ml模型。因此,这并不是我想要做的。我必须使用我转换成灰色的照片的特征来创建彩色照片。我必须将这些功能作为模型的输入。您可以直接使用
des0
作为ML模型的输入。上面的例子只是一个如何使用它的例子。我一步一步地做了这些,首先我的转换灰度图像与转换(“LA”)矩阵形状是(422750),使用这个灰度图像与ORB函数后,输出des0形状是(500,32)。之后,我想用这个来训练我的模型。这是我的模型的输入,输出是我的图像的彩色版本。
visualize_sift_matches = cv2.drawMatchesKnn(im1, kp1, im2, kp2, common_matches,
visualize_sift_matches, flags=2)
plt.imshow(visualize_sift_matches)
plt.show()