2016-11-21 52 views
0

我想計算圖像中的粒子數量。 我發現ImageJ正是在做我所需要的http://imagej.net/Particle_Analysis,但它是Java,它只是我需要集成的一個功能,使得從我的C++應用程序中調用Java程序毫無價值。 我正在尋找一個實現這個的C++庫,任何全面的算法都是值得歡迎的。 全部最好C++圖像處理,計數粒子

+0

我的回答或任何其他問題是否解決了您的問題?如果是這樣,請考慮接受它作爲您的答案 - 通過點擊投票計數旁邊的空心綠色勾號/複選標記。如果沒有,請說出什麼不起作用,以便我或其他人可以進一步幫助您。謝謝。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

回答

1

看看openCV http://opencv.org/。它們具有與計算機視覺相關的大量功能和算法。根據圖像中粒子的形狀和結構,SimpleBlobDetector()可能不是有用的。這裏有一個很好的教程:https://www.learnopencv.com/blob-detection-using-opencv-python-c/

另外你可以嘗試實現自己的算法?搜索高斯內核的拉普拉斯算子。如果你的粒子是不規則的形狀,它可能變得更加困難,需要閾值和控制。

+0

感謝您的反饋,是的圖像來自太空圖像。每次我想到OpenCV時,我都會考慮它的大小,它會在數年內變得巨大。 SimpleBlobDetector看起來是我正在尋找的,非常感謝你。當然,原始圖像需要一些清理(去除不規則背景,增加對比度等)。 –

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