2016-11-01 11 views
-2

イメージには単純な円があります。イメージ内の単純な円を検出し、その半径をnumpyを使用して検索します。

numpyを使用して円を検出し、その半径を見つけるにはどうすればよいですか?

私は学習を試みたがcouldnt。あなたがここで答えるプログラムから学びたいと思います。私は今のよう知っている

だけの事はある:ここでは

from scipy import misc 
f = misc.imread("/path/to/file.png") 
# then dont know what to do 

はイメージです - https://c2.staticflickr.com/6/5476/14135136623_3973d3f03c_b.jpg

+0

アウト[リンク](http://scikit-image.org/docs/dev/auto_examples/plot_circular_elliptical_hough_transform.html)その中の例。 –

+0

イメージは常に白い円のあるシンプルな黒い背景になることをご存じですか?それとも、それは別のものかもしれませんか?イメージが常に白黒のピクセルだけを持ち、他の白いピクセルがない白い単色のサークルが1つしかない場合は、はるかに簡単です。 –

+0

背景は黒で、円の内側は黒ですが、円の境界は赤のような色になります – user2349115

答えて

0

私は今、イメージは常にで正確に一つの非黒丸で構成されていることのために仮定していますそうでなければ黒い画像。

また、アルゴリズムの効率性について特に気にしないと仮定しています。

すべての白いピクセルのx座標とy座標の合計、カウント、最小値、および最大値を保持して画像のすべてのピクセルをループします(xまたはyにのみ必要な最小値/最大値。このような何か(ちょうどおよそ - 私はscipyのダウンロードインストール気圧を持っていません):

circle_count = 0 

circle_sum_x = 0 
circle_sum_y = 0 

circle_min_x = 0 
circle_max_x = 0 

for y in range(image_height): 
    for x in range(image_width): 
     if pixel(x,y) is not black: 
      circle_count += 1 

      circle_sum_x += x 
      circle_sum_y += y 

      circle_min_x = min(circle_min_x, x) 
      circle_max_x = max(circle_max_y, y) 

if circle_count == 0: 
    print "No circle found!" 
else: 
    circle_center_x = circle_sum_x/circle_count 
    circle_center_y = circle_sum_y/circle_count 
    circle_radius = (circle_max_x - circle_min_x)/2