画像の真円度の検出(顕微鏡写真の例)

みなさんこんにちは! 私の職業(厳密に言えば、私の将来の職業)によって、私は実際に化学者です。 比較的最近、興味深い作品が登場し、デジタル顕微鏡で多くの作業を行い、大量の写真を撮り、特定の方法で処理する必要性が現れました。 すなわち:粒子の線形サイズ(通常は形状が円形で、最初は目で見る)を見つけて、それらを実験室ジャーナルに注意深く入力します。

最初の100枚の画像の後で、少なくともこのプロセスの何らかの自動化について一生懸命に考えたのは驚くことではありませんが、1つの落とし穴がありました。「オブジェクト指向プログラミングは非常に良い」ことをよく知っていましたが... TurboPascal、大学のVB、および手続きバージョンのPHPでの高速コーディング。 フォーラムに出くわし、1日に少なくとも2つのOSで作業する時間があるという事実を考慮して(Mac / Windows / Ubuntuは多幸共生)、私はあまり考えず、Javaで書くことにしました。

空き時間に1週間ほど詳細を省略し、オブジェクト指向プログラミングのパラダイムと「はい、機能します」などの考えで眠れない夜について頭を叩き、そのシンプルで速い「アルゴリズム」について簡単に話そうとします。私が生まれたこと。 かなり鮮明な画像にのみ適しているとすぐに言う価値があります。

ちなみに、ここに、典型的な代表者(または、その約10分の1)があり、処理する必要があります。







オブジェクトが円であることはすぐにわかります。最初に頭に浮かぶのは(はい、大学のおかげで、 化学者もそれを知っており、すぐに頭に浮かぶ) ハフ変換です。 しかし...繰り返しますが、「しかし」:オブジェクトは互いに衝突する可能性があり、円とはまったく異なります。 公平に言えば、ハフ変換とUbuntuのPython(zdorovskogo言語)へのOpenCVライブラリを使用してこれを実行しようとしたと言います。 GIMPで以前に選択された境界やその他のさまざまなトリックの後でも。



一般的に、私は自分の自転車を書くことにしました。 そのため、まず境界を強調する必要があります。 いくつかの方法を試してみましたが(通常はあまり多くないので、すべて試してみました)、「キャニーエッジディテクター」方法(ロシア語ではわかりませんが、ヒットしません)で最も受け入れられる結果が得られ、その後の結果が判明しましたなど:







しばらくの創造的な苦痛の後、私は最終的に関心のある分野が閉じられていることに気づきました。 しかし、これらの点が閉じた曲線を形成していること、そしてこれらを確認する方法-いいえ? 私はこの問題について多くの時間を費やし、ある種の非人間的な計算を構築し、少し前に教えられた数学的装置を適用しようとしました(そして非常に高品質であることが判明しました)。 そして、それが私に夜明けになったら...記入してください!!! グラフィックのOpen Sourseプロジェクトで「塗りつぶし」ツールがどのように機能するかを確認する必要があります。 それで、私は自分のために幅優先の検索アルゴリズムを発見しました。 後で、それにもかかわらず、これらの目的のために、インターネット上にある既製のクラスを使用しました。

塗りつぶした後の画像を次に示します。







はい! 関心のあるすべてのオブジェクトを強調しました! しかし、それらの中には奇妙なタッチがあります。 この問題を解決する方法を考え始めるとすぐに(同じ日に)Habrahabrの数学的形態(非常にタイムリーな記事 )に出会いました(今では普通のユーザーにはアクセスできません)。 すぐに言ってやった!

これが現在の画像の外観です(「侵食」法、標準の3x3十字形マトリックスがマトリックスを使用しました):







やった! できた! 次に、BFSアルゴリズムを再度使用して、粒子の中心と極点の座標を見つける必要があります。

合計すると、自動ロギング用のすぐに使用できるプログラムが手に入りました:) 顕微鏡には通常のUSBコードが付属しているため、プログラムでカメラの画像をすぐに見て、すぐに写真を撮って認識したいです。 しかし、これはすでに私の次の眠れない夜の主題です。

そして、これが最終結果です(クリック可能):



-2011年2月22日22:05-ブログ「画像処理」に転送



All Articles