使用机器学习检测Blob?

时间:2014-09-21 20:13:51

标签: python matlab machine-learning computer-vision feature-detection

我有一大堆图像显示一个带有一些黑色斑点的条形图,其位置随时间变化(见图b)。为了检测blob,我现在使用强度阈值(图中的c,其中低于阈值的所有强度值都设置为1)然后我使用下面的Matlab代码在二进制图像中搜索blob。如您所见,二进制图像非常嘈杂,使得斑点检测过程变得复杂。您对如何改进形状检测有任何建议吗,可能包括一些机器学习算法?谢谢!

代码:

se = strel('disk',1);
se_1 = strel('disk',3);
pw2 = imclose(IM,se);
pw3 = imopen(pw2,se_1);
pw4 = imfill(pw3, 'holes');

% Consider only the blobs with more than threshold pixels
[L,num] = bwlabel(pw4);
counts = sum(bsxfun(@eq,L(:),1:num));
number_valid_counts = length(find(counts>threshold)); 

enter image description here

2 个答案:

答案 0 :(得分:1)

这可能会有所帮助。

  1. 提取要提取的blob边界的纹理特征。这可以使用Local binary patterns完成。还有许多其他纹理功能,您可以获得详细的调查here

  2. 然后用它们来训练二元分类器。

答案 1 :(得分:1)

似乎数据像图像下方的脉冲一样,我建议得到一些图像,并切片垂直于脉冲方向的像素垂直线,每次你取一行数值,一点点高于和低于脉冲,条带宽度为一个像素,并且其高度比脉冲图像稍微大一些,以使一些光值低于和高于脉冲,您可以从像素420-490开始,每次保存70个灰度值,这些将形成特征向量,也从非blob区域获取行以保存为2级,在每个图像的几个图像和线上执行此操作。

现在您获得了训练数据,您可以使用任何机器学习算法来训练计算机中的脉冲和非脉冲,

在测试步骤中,您每次扫描图像,每次垂直扫描70个像素并根据训练模型进行测试,如果属于“bolob”类,则创建一个新的黑色图像从测试像素的下方开始绘制白色垂直线,否则在输出图像上什么都不绘制。

在扫描图像结束时:检查是否存在可能删除的孤立白线,并将其视为错误接受。如果你在一组白线中找到一条暗线,那么考虑到错误拒绝,将其转换为白线。

您可以使用我的分类器:https://www.researchgate.net/publication/265168466_Solving_the_Problem_of_the_K_Parameter_in_the_KNN_Classifier_Using_an_Ensemble_Learning_Approach

如果你决定我会送你男女同校去做。距离度量是一个问题,因为值在0到255之间变化,因此光值将主导距离,为了解决这个问题,您可以使用Hassanat距离度量:https://www.researchgate.net/publication/264995324_Dimensionality_Invariant_Similarity_Measure

因为数据中的比例不变,因为每个特征不再输出介于0和1之间的值,因此最高值不会占据最终距离。

祝你好运