C# a从一幅图像中提取斑点,并从另一幅图像中提取相同的位置

C# a从一幅图像中提取斑点,并从另一幅图像中提取相同的位置,c#,image,aforge,C#,Image,Aforge,我有一个图像,我做了一些处理,以分离背景和前景,创建一个二进制(黑/白)图像 使用Forge,我能够从处理过的图像中检测出所有斑点,并返回它们 所以,我把我的原始图像复制到“SourceImg”,做一些过滤来分离背景,使其成为二值图像,然后我可以正确地进行斑点提取 public static List<Bitmap> ApplyBlobExtractor(Bitmap SourceImg) { List<Bitmap> ImgLetters

我有一个图像,我做了一些处理,以分离背景和前景,创建一个二进制(黑/白)图像

使用Forge,我能够从处理过的图像中检测出所有斑点,并返回它们

所以,我把我的原始图像复制到“SourceImg”,做一些过滤来分离背景,使其成为二值图像,然后我可以正确地进行斑点提取

    public static List<Bitmap> ApplyBlobExtractor(Bitmap SourceImg)
    {
        List<Bitmap> ImgLetters = new List<Bitmap>();
        AForge.Imaging.BlobCounter blobCounter = new AForge.Imaging.BlobCounter();

        // Sort order
        blobCounter.ObjectsOrder = AForge.Imaging.ObjectsOrder.XY;
        blobCounter.ProcessImage(SourceImg);
        AForge.Imaging.Blob[] blobs = blobCounter.GetObjects(SourceImg, false);

        // Adding images into the image list            
        AForge.Imaging.UnmanagedImage currentImg;
        foreach (AForge.Imaging.Blob blob in blobs)
        {
            currentImg = blob.Image;
            ImgLetters.Add(currentImg.ToManagedImage());
        }
        return ImgLetters;
    }
public静态列表ApplyBlobExtractor(位图源img)
{
List ImgLetters=新列表();
AForge.Imaging.BlobCounter BlobCounter=新的AForge.Imaging.BlobCounter();
//排序顺序
blobCounter.ObjectsOrder=AForge.Imaging.ObjectsOrder.XY;
blobCounter.ProcessImage(SourceImg);
AForge.Imaging.Blob[]blobs=blobCounter.GetObjects(SourceImg,false);
//将图像添加到图像列表中
a arge.Imaging.UnmanagedImage currentImg;
foreach(一个rge.Imaging.Blob一个Blob一个Blob)
{
currentImg=水滴图像;
Add(currentImg.ToManagedImage());
}
返回ImgLetters;
}
我真正想做的是使用这些斑点的信息从原始的未处理图像中提取位置


理想情况下,我希望像饼干切割器一样使用斑点,并从我最初未处理的图像文件中提取它们。

假设图像处理的一部分没有调整原始图像的大小,为什么不对原始图像循环应用裁剪变换,将裁剪矩形设置为水滴的矩形属性?

假设部分图像处理没有调整原始图像的大小,为什么不将裁剪变换循环应用于原始图像,将裁剪矩形设置为blob的rectangle属性?

您可以使用blob图像和源图像来使用该类。

您可以使用blob图像和源图像来使用该类。

问题是我可以抓取边界框,但另一个水滴可能在边界框内。问题是我可以抓住边界框,但另一个水滴可能在边界框内。该死。。。有一个过滤器可以做到这一点?我只是手工做的。该死的。。。有一个过滤器可以做到这一点?我只是手工做的。