【火炉炼AI】机器学习050-提取图像的Star特征

【火炉炼AI】机器学习050-提取图像的Star特征

(本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2 )

对于图像的特征点,前面我们讨论过边缘检测方法,Harris角点检测算法等,这些检测算法检测的都是图像的轮廓边缘,而不是内部细节,如果要进一步提取图像内部细节方面的特征,需要用到SIFT特征提取器和Star特征提取器。上一篇我们讲解了SIFT特征提取器,下面我们来介绍Star特征提取器。

在博文特征点的基本概念和如何找到它们中提到,OpenCV中具有以下特征点模型:(这些函数的使用也同样适用于OpenCV-Python)

1、Harris-Shi-Tomasi特征检测器和cv :: GoodFeaturesToTrackDetector

最常用的角点定义是由哈里斯[Harris88]提出的, 这些角点,被称为哈尔角点,可以被认为是原始的关键点;而后被Shi和Tomasi [Shi94]进行了进一步扩展,后者被证明对于大多数跟踪应用来说是优越的。由于历史原因,在OpenCV中叫做”GoodFeatures";

2、简单的blob检测器和cv :: SimpleBlobDetector

提出“斑点”的概念。斑点本质上没有那么明确的局部化,而是表示可能预期随时间具有一定稳定性的感兴趣区域。

3、FAST特征检测器和cv :: FastFeatureDetector

最初由Rosten和Drummond [Rosten06]提出的FAST(加速段测试的特征),其基本思想是,如果附近的几个点与P类似,那么P将成为一个很好的关键点。

4、SIFT特征检测器和cv :: xfeatures2d :: SIFT

由David Lowe最初于2004年提出的SIFT特征(尺度不变特征变换)[Lowe04]被广泛使用,是许多随后开发的特征的基础;SIFT特征计算花销很大,但是具有高度的表达能力。

5、SURF特征检测器和cv :: xfeatures2d :: SURF

SURF特征(加速鲁棒特征)最初由Bay等人于2006年提出[Bay06,Bay08],并且在许多方面是我们刚刚讨论的SIFT特征的演变。SURF所产生的特征不仅计算速度快得多,并且在许多情况下,它对SIFT特征观察到的方向或照明变化的鲁棒性也更强。

6、Star / CenSurE特征检测器和cv :: xfeatures2d :: StarDetector

Star特征,也被称为中心环绕极值(或CenSurE)功能,试图解决提供哈尔角点或FAST特征的局部化水平的问题,同时还提供尺度不变性。

7、BRIEF描述符提取器和cv :: BriefDescriptorExtractor

BRIEF,即二进制鲁棒独立基本特征,是一种相对较新的算法,BRIEF不找到关键点;相反,它用于生成可通过任何其他可用的特征检测器算法定位的关键点的描述符。

8、BRISK算法

Leutenegger等人介绍的BRISK40描述符,试图以两种不同的方式改进Brief(Leutenegger11)。 首先,BRISK引入了自己的一个特征检测器(回想一下,Brief只是一种计算描述符的方法)。 其次,BRISK的特征本身虽然与BRIEF原则相似,却尝试以提高整体功能的鲁棒性的方式进行二值比较。

9、ORB特征检测器和cv :: ORB

创建了ORB功能[Rublee11],其目标是为SIFT或SURF提供更高速的替代品。ORB功能使用非常接近于FAST(我们在本章前面看到的)的关键点检测器,但是使用了基本上不同的描述符,主要基于BRIEF。

10、FREAK描述符提取器和cv :: xfeatures2d :: FREAK

FREAK描述符最初是作为Brief,BRISK和ORB的改进引入的,它是一个生物启发式的描述符,其功能非常类似于BRIEF,主要在于它计算二进制比较的领域的方式[Alahi12]。

11、稠密特征网格和cv :: DenseFeatureDetector类

cv :: DenseFeatureDetector class53的目的只是在图像中的网格中生成一个规则的特征数组。


1. 使用Star提取图像特征点

具体代码和我上一篇文章很类似,可以先看看【火炉炼AI】机器学习049-提取图像的SIFT特征点

star = cv2.xfeatures2d.StarDetector_create() # 构建Star特征点检测器对象
keypoints = star.detect(gray, None) # 用Star特征点检测器对象检测灰度图中的特征点
# 将keypoints绘制到原图中
img_sift = np.copy(img)
cv2.drawKeypoints(img, keypoints, img_sift, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
#画在原图上,第一个是原图,第二个image是目标图,这个flags既包括位置又包括方向,也有只有位置的flags
#圆圈的大小表示特征的重要性大小,主要在桌子腿上,腿上边缘和棱角比较多,更有代表性

# 显示绘制有特征点的图像
plt.figure(12,figsize=(15,30))
plt.subplot(121)
img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.imshow(img_rgb)
plt.title('Raw Img')

plt.subplot(122)
img_sift_rgb=cv2.cvtColor(img_sift,cv2.COLOR_BGR2RGB)
plt.imshow(img_sift_rgb)
plt.title('Img with Star features')

########################小**********结###############################

1,Star特征点的提取方法在代码上很容易实现,cv2.xfeatures2d.StarDetector_create()这个函数就可以构建Star检测器并用detect方法就可以实现。

2,Star特征点提取器和SIFT特征点提取器的结果有很多相似之处,都是在桌腿附近有很多特征点。

#################################################################


注:本部分代码已经全部上传到(我的github)上,欢迎下载。

参考资料:

1, Python机器学习经典实例,Prateek Joshi著,陶俊杰,陈小莉译

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
K-means是一种经典的聚类算法,可以将数据集分成不同的簇。在图像处理中,K-means可以用于将图像中的颜色聚类成不同的簇,从而实现图片的矢量量化操作。 具体来说,我们可以将每个像素的RGB值看作一个三维向量,然后使用K-means算法将这些向量聚类成不同的簇。聚类完成后,我们可以将每个簇的中心作为该簇的代表颜色,然后将图片中的像素替换为最近的簇中心颜色,从而实现矢量量化。 以下是使用Python实现K-means进行图片的矢量量化的示例代码: ```python import numpy as np import cv2 # 读取图片 img = cv2.imread('test.jpg') # 将图片像素转换为向量 pixels = np.float32(img.reshape(-1, 3)) # 定义K-means模型 kmeans = cv2.Kmeans(nclusters=16, init='kmeans++') # 训练K-means模型 kmeans.fit(pixels) # 获取簇中心 centers = np.uint8(kmeans.cluster_centers_) # 将像素替换为最近的簇中心颜色 quantized = centers[kmeans.labels_] # 将量化后的像素转换回图片格式 result = quantized.reshape(img.shape) # 显示原图和量化后的图片 cv2.imshow('Original', img) cv2.imshow('Quantized', result) cv2.waitKey() cv2.destroyAllWindows() ``` 在上面的代码中,我们首先将图片像素转换为向量,然后使用K-means训练模型并获取簇中心。接着,我们将每个像素替换为最近的簇中心颜色,最后将量化后的像素转换回图片格式并显示原图和量化后的图片。 注意,K-means算法的聚类结果可能会受到初始聚类中心的影响,因此我们可以尝试不同的初始化方法来得到更好的结果。另外,选择合适的簇数也是一个需要考虑的问题,如果簇数太少,可能会导致量化后的图片失真;如果簇数太多,可能会导致量化后的图片过于细节化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值