gpt4 book ai didi

machine-learning - 机器学习图像特征提取

转载 作者:行者123 更新时间:2023-12-05 06:51:43 29 4
gpt4 key购买 nike

在机器学习中灰度图像的特征提取存在一个问题。

我有一张灰色图像从彩色图像转换而来。

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)

输出是: enter image description here

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

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

有一些方法,例如 SIFT ORB FAST...但我真的不知道如何才能为我的目标提取特征。

#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 的匹配的示例:

输入图像: enter image description here

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

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]])

获取灰度图的特征和关键点(我的顺序颠倒了,别搞混了。)

f1, kp1 = dense_sift(g_im1)
f2, kp2 = dense_sift(g_im2)

使用 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])

并列两张图片并连接关键点

visualize_sift_matches = cv2.drawMatchesKnn(im1, kp1, im2, kp2, common_matches,
visualize_sift_matches, flags=2)

可视化

plt.imshow(visualize_sift_matches)
plt.show()

enter image description here

关于machine-learning - 机器学习图像特征提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66109499/

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