2016-11-21 11 views
0

画像の粒子数を数えたいと思います。 ImageJが私にはちょうどhttp://imagej.net/Particle_Analysisが必要であることがわかりましたが、それはJavaであり、統合する必要がある機能の1つで、JavaプログラムをC++アプリケーションから呼び出すことができません。 私はこれを実装する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/

代わりに、独自のアルゴリズムを実装できますか?ガウシアンカーネルのLaplacianを検索してください。パーティクルが不規則な形状の場合、パーティクルがより難しくなり、しきい値処理と制御が必要になることがあります。

+0

フィードバックに感謝します。はい、画像は宇宙のイメージです。私はOpenCVについて考えてみるたびに、そのサイズについて考えると、何年もかけて巨大になります。 SimpleBlobDetectorは私が探しているものに見えます、ありがとうございました。もちろん元の画像にはクリーンアップが必要です(不規則な背景を取り除き、コントラストを落とすなど)。 –

1

だと思います。CImgは、あなたにとって最適なソリューションです。それはhereです。これは単一のC++ヘッダーファイルです - ライブラリやリンクするものはなく、あらゆるプラットフォーム(Linux、OS X、Windows)上で動作します。

必要な機能はlabel()です。ここでは簡単な例です:私は、コマンドラインで次のようにImageMagickをでテスト画像を作っ

#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"); } 

enter image description here

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