2012-02-04 198 views
8

私はエッジ検出の問題が(Javaの場合:Count the number of objects in an Image、言語には依存しません:Image edge detection)前に投稿されていますが、Pythonで実装する方法を知りたいと思います。Pythonのエッジ検出と曲率計算

私はいくつかの単純な形状(いくつかのノイズを持つバイナリ形状)でエッジの周りのエッジ検出と曲率計算を行っています。 OpenCV用のラッパーがあるのは分かっていますが、どちらが優れているかはわかりません:pyopencv、pycv、pycvf?

私は基本的にこの2つの作業しか行っていないので、ライブラリを使用するよりも自分で実装する方が速いかどうかもわかりません。

+1

[Webサイト](http://opencv.willowgarage.com/wiki/)からOpenCVをダウンロードすることをお勧めします。指示を使ってコンパイルすると自動的にpythonラッパー( 'import cv2')が得られます。 –

+2

また、 'scipy.ndimage'を見てください。http://docs.scipy.org/doc/scipy/reference/ndimage.html –

答えて

11

私たちは、あなたが役立つことがあり、積極的に開発scikit-imageにセグメンテーションとエッジ検出アルゴリズムを持っている:

Scikit Images Examples

+0

エッジ検出はクールです。曲率計算を実装しますか? – clwen

+0

@clwenどのように曲率を定義しますか?あなたが私に論文や例を与えたら、それを撃つことができます。 –

+0

私は永遠にpythonでcannyエッジ検出を探してきました!わたしは、あなたを愛しています... – tylerthemiler

3

scikit画像とpythonで輪郭を見つけるための非常に簡単な方法があります。

これは等高線のベクトル表現を返します。各行ごとに別々の配列。また、近似を計算することによって、ライン内のポイント数を減らすことも簡単です。ここでは、ソースコードで少し長めの説明です:image vectorization with python

3

あなたは簡単にpyipyでpythonでエッジ検出を達成することができます。

from scipy import ndimage 
edge_horizont = ndimage.sobel(greyscale, 0) 
edge_vertical = ndimage.sobel(greyscale, 1) 
magnitude = np.hypot(edge_horizont, edge_vertical) 

ここでは、エッジ検出後の元画像と画像の例を示します。 enter image description here

scikit-imageには、エッジ検出を行う方法のspecial page with explanationsがあります。