从 SuperPixels 中提取特征的最佳方法,例如 gabor 和 HOG 特征
Posted
技术标签:
【中文标题】从 SuperPixels 中提取特征的最佳方法,例如 gabor 和 HOG 特征【英文标题】:Best way of extracting features from SuperPixels such as gabor and HOG features 【发布时间】:2020-04-25 12:24:33 【问题描述】:我使用 slic 聚类算法来创建生物医学图像的超像素(生物医学成像专家的整个幻灯片图像)。我想为超像素提取不同的特征、纹理和空间以创建特征表示,然后将其输入分类器(SVM、RF)以尝试对每个超像素进行分类,因为我有每个超像素的标签。最终目标是对每个超像素进行分类,然后使用它来构建分割。
对于每个超像素,我根据所有超像素的平均高度和宽度在所有超像素周围绘制一个大小一致的边界框,因为尺寸分布在平均值附近相当高(有些会切掉小部分,而其他部分会被剪掉)将包括一些填充。我有几个问题
关于每个超像素的 gabor 滤波器,我得到一个 gabor 特征,其中每个像素都有一个值,然后我取这些平均值以获得超像素 gabor 特征值。这是正确的方法吗?代码如下
def getGabor(img, ksize, sigma, theta, lamda, gamma, l, ktype):
kernel=cv2.getGaborKernel((ksize, ksize), sigma, theta, lamda, gamma, l, ktype=ktype)
fimg = cv2.filter2D(img, cv2.CV_8UC3, kernel)
filteredImage=fimg.reshape(-1)
return filteredImage
def getGabors(img):
ksize=5
thetas = list(map(lambda x: x*0.25*np.pi, [1, 2]))
gabors=[]
for theta in thetas:
for sigma in (1,3):
for lamda in np.arange(0, np.pi, np.pi*0.25):
for gamma in (0.05, 0.5):
gabor = getGabor(img.reshape(-1), ksize, sigma, theta, lamda, gamma, 0, cv2.CV_32F) .
gabors.append(np.mean(gabor))
return gabors
这将如何与 HOG 一起使用?我会采用相同的方法来平均特征向量吗?如何防止 HOG 描述符过大?
将超像素输入 CNN 以学习特征表示是否明智?
如果有人在对其他有用的图像特征描述符提出任何建议之前使用过此类数据,这将是一种数据类型的好方法?
任何关于构建特征或为超像素查看什么类型的特征的建议将不胜感激!
谢谢
【问题讨论】:
【参考方案1】:我不确定医学图像分割的最新技术是什么,但在所有深度学习模型出现之前,超像素、HOG 和 gabor 听起来确实像是 2012 年之前的特征工程方法。结果必然在很大程度上取决于超像素分割图像的方式(可能不太稳健)。
为什么不使用最近的图像分割 CNN,例如 DeepLab (https://github.com/tensorflow/models/tree/master/research/deeplab)?只需为其提供分割的训练示例(诚然,其中有很多),然后查看模型本身是否学习了正确的特征。它的可能性很高。
【讨论】:
感谢 DeepLab 的建议。我一直在使用诸如 UNET 和 FCN8 之类的深度学习分割模型,所以也会检查一下,但我也很想使用更传统的特征提取方法和分类器进行分析以上是关于从 SuperPixels 中提取特征的最佳方法,例如 gabor 和 HOG 特征的主要内容,如果未能解决你的问题,请参考以下文章