在机器学习中,灰度图像的特征提取是一个难题。
我有一个灰色的图像,是用这个从彩色图像转换而来的。
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算法基于立体图像对的密集筛选匹配示例:
读取输入图像并分割立体图像
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()
主成分分析是一种降维方法,通过将一个大的特征集转换成一个较小的特征集,这个特征集仍然包含了原始数据中的大部分信息,从而降低了原始数据的维数。换句话说就是减少数据集的特征数量,同时尽可能地保留信息。降维是将训练数据中的样本(实例)从高维空间转换到低维空间,该过程与信息论中有损压缩概念密切相关。同时要明白的,不存在完全无损的降维。
我一直在和一个朋友争论“特征提取”。他说,ML的主要任务是提取特征。但我不同意。一般来说,特征提取不是一项ML任务。如果我们认为wx b是表示ML的最简单的方法,那么ML的任务就是找到最好的w和b。x是特征。ML试图找出给定x的最佳w和b值,它与训练数据匹配,从而学习如何找到w和b。 我的朋友说提取特征是ML的核心任务。但据我所知,特征提取主要是一项数据预处理任务。
假设我有两组不同的特性A和B。我正在尝试确定哪一组特性是最好的。由于我的数据集很小,所以我使用了漏掉一个交叉验证作为最终指标。我正试图弄清楚我的实验装置,我在以下几种方式中做出选择: 1) 将特征集A赋予我的分类器(并可选地运行特征选择),将特征集B赋予同一分类器(也可选地运行特征选择),然后比较这两个分类器之间的LOOCV错误? 2) 将特征集A和B赋予分类器,然后明确地对其进行特征选择,然后根
主要作者:@徐英凯|闪银机器学习工程师 审校顾问:@卢誉声|Autodesk 软件研发工程师、@高扬|欢聚时代资深大数据技术专家、@罗远飞|第四范式机器学习工程师 Toolbox C/C++ Vowpal Wabbit MultiBoost Shogun Java Mahout Weka Mallet JSAT Python Scikit-learn PyBrain nltk Theano Pyl
Python 有着海量的可用于数据分析、统计以及机器学习的库,这使得 Python 成为很多数据科学家所选择的语言。 下面我们列出了一些被广泛使用的机器学习及其他数据科学应用的 Python 包。 Scipy 技术栈 Scipy 技术栈由一大批在数据科学中被广泛使用的核心辅助包构成,可用于统计分析与数据可视化。由于其丰富的功能和简单易用的特性,这一技术栈已经被视作实现大多数数据科学应用的必备品了。
主要内容 前言 课程列表 推荐学习路线 数学基础初级 程序语言能力 机器学习课程初级 数学基础中级 机器学习课程中级 推荐书籍列表 机器学习专项领域学习 致谢 前言 我们要求把这些课程的所有Notes,Slides以及作者强烈推荐的论文看懂看明白,并完成所有的老师布置的习题,而推荐的书籍是不做要求的,如果有些书籍是需要看完的,我们会进行额外的说明。 课程列表 课程 机构 参考书 Notes等其他资