C# 如何使用RGE.NET BlobCounter垂直排序Blob?

C# 如何使用RGE.NET BlobCounter垂直排序Blob?,c#,feature-detection,aforge,C#,Feature Detection,Aforge,我有斑马条纹图像,其中每个条纹都将被视为一个斑点进行进一步处理,但其中也包含不应考虑的斑点。我正在使用一个org.NET/C#/VisualStudio2010。一个典型的例子是: 计划是这样做的: 选择定义垂直线的某个X坐标 取穿过这条垂直线的每个白色斑点 输出应该是一个垂直排序的blob或blob索引列表(这是必要的),以便白色条纹从高到低排序 我有这个代码,它成功地只隔离了穿过参考垂直线的条纹: using AForge.Imaging; using AForge.Imaging.Fil

我有斑马条纹图像,其中每个条纹都将被视为一个斑点进行进一步处理,但其中也包含不应考虑的斑点。我正在使用一个org.NET/C#/VisualStudio2010。一个典型的例子是:

计划是这样做的:

  • 选择定义垂直线的某个X坐标
  • 取穿过这条垂直线的每个白色斑点
  • 输出应该是一个垂直排序的blob或blob索引列表(这是必要的),以便白色条纹从高到低排序
  • 我有这个代码,它成功地只隔离了穿过参考垂直线的条纹:

    using AForge.Imaging;
    using AForge.Imaging.Filters;
    
    Bitmap threshold_binary = gimme_threshold_image();
    var blob_counter = new BlobCounter();
    blob_counter.ProcessImage(threshold_binary);
    var blobs = blob_counter.GetObjects(threshold_binary, true);
    
    int midline_x_coord = threshold_binary.Width/2;
    int counter = 1;
    foreach (var blob in blobs)
    {
        // This saves an image for each blob (white fringe) which crosses the vertical reference line,
        // but the fringes are not sorted vertically!
        if (blob.Rectangle.X < midline_x_coord & (blob.Rectangle.X + blob.Rectangle.Width) > midline_x_coord) {
            blob_counter.ExtractBlobsImage(threshold_grayscale, blob, true);
            var blobimage = blob.Image.ToManagedImage();
            blobimage.Save(String.Format("{0}singlefringes/{1}_singlefringe.png", base_input_dir, counter));
            counter++;
        }
    }
    
    使用大图像;
    使用热成像滤光片;
    位图阈值\二进制=给我阈值\图像();
    var blob_counter=新的blob计数器();
    blob_计数器.ProcessImage(阈值_二进制);
    var blobs=blob\u counter.GetObjects(阈值二进制,true);
    int midline_x_coord=阈值_binary.Width/2;
    int计数器=1;
    foreach(blob中的var blob)
    {
    //这将为穿过垂直参考线的每个斑点(白色条纹)保存图像,
    //但是条纹不是垂直排列的!
    if(blob.Rectangle.Xmidline\ux\uCoord){
    blob_计数器。提取BLOBSIMAGE(阈值_灰度,blob,真);
    var blobimage=blob.Image.ToManagedImage();
    保存(String.Format(“{0}singlefranges/{1}_singlefrange.png”,base_input_dir,counter));
    计数器++;
    }
    }
    
    由于上面的块不返回排序的条纹,另一种方法是逐像素垂直扫描中线,识别有序的斑点,但我很难弄清楚怎么做。一个命题应该是这样的:

    for (int y = 0; y < threshold_binary.Height; y++) {
        if (threshold_binary.GetPixel(midline_x_coord, y)) {
            // somehow create a List of blobs or blob indexes,
            // but only if I can find out which blob
            // this pixel is in (brute-force would be ugly, right?)
        }
    }
    
    for(int y=0;y

    谢谢你的建议

    您可以通过选择要按面积或大小或x或y(您必须选择y)获得斑点的方式来进行垂直排序。选择:

    BlobCounter bc = new BlobCounter();
    bc.ObjectsOrder = ObjectsOrder.YX;
    

    您可以通过选择按面积或大小或x或y(您必须选择y)获取水滴的方式来进行垂直排序

    BlobCounter bc = new BlobCounter();
    bc.ObjectsOrder = ObjectsOrder.YX;