C ++图像处理,计算粒子

时间:2016-11-21 14:11:57

标签: c++ algorithm image-processing

我想计算图像中的粒子数量。 我发现ImageJ正是我需要的http://imagej.net/Particle_Analysis,但它只是Java,它只是我需要集成的功能之一,因此从我的C ++应用程序调用Java程序毫无价值。 我正在寻找一个实现这个的C ++库,任何综合算法都非常受欢迎。 一切顺利

2 个答案:

答案 0 :(得分:1)

看一下openCV http://opencv.org/。它们具有与计算机视觉相关的大量功能和算法。根据图像中粒子的形状和结构,SimpleBlobDetector()可能有用,也可能没用。这里有一个很好的教程:https://www.learnopencv.com/blob-detection-using-opencv-python-c/

另外你可以尝试实现自己的算法吗?搜索高斯核拉普拉斯算子。如果你的颗粒是不规则的形状,它可能会变得更加困难,需要进行阈值处理和修复。

答案 1 :(得分:1)

我认为 CImg 对您来说是一个很好的解决方案 - 它是here。它是单个C ++头文件 - 没有库或任何链接,它几乎可以在任何平台上运行 - Linux,OS X,Windows。

您需要的功能是label()。这是一个简短的例子:

#include <iostream>
#include "CImg.h"
using namespace std;
using namespace cimg_library;

int main(int argc, char** const argv)
{
    CImg<int> img("input.png");
    img.label(0,0);
    img.save_png("result.png");
}

我在命令行中使用 ImageMagick 制作了一个测试图像:

convert -size 1000x1000 xc:black -fill white \
  -draw "rectangle 10,10 50,50"              \
  -draw "rectangle 100,200 300,400"          \
  -draw "rectangle 800,25 900,900" input.png

看起来像这样:

enter image description here

然后,当你运行程序时,它会用越来越多的数字标记每个blob(即矩形),即每个blob都比最后一个更亮。

enter image description here