• ベストアンサー

ハフ変換についてですが・・・

n_tanの回答

  • ベストアンサー
  • n_tan
  • ベストアンサー率50% (3/6)
回答No.1

質問が漠然としているのでとりあえずこんなところを参照してはいかがかと... http://a-gamyl.hp.infoseek.co.jp/Clang/ip_hough.html

参考URL:
http://a-gamyl.hp.infoseek.co.jp/Clang/ip_hough.html
okku0121
質問者

お礼

どうもすみません、あまりにも漠然していました。 でもなんとなくわかりました。 有難うございます

関連するQ&A

  • ハフ変換について

    ハフ変換について勉強しているのですが、 直線抽出の方程式がなぜ、 ρ=xcosθ+ysinθ になるのかが、分かりません。 http://mikilab.doshisha.ac.jp/dia/research/person/shuto/research/0626/tyokusen.html この様なサイトを見たのですが、 ただ、式がでているだけでした。 詳しく解説・証明しているサイトがあれば、 教えていただけないでしょうか。 よろしくお願いします。

  • ハフ変換についてですが・・・

    ハフ変換ですが、その内容で「投票を行う」とよく書いている文献が多々あるのですが、どうのような意味なのでしょうか? どうぞ教えてください、お願いします。

  • ハフ変換(Hough変換)の原理について

    現在、ハフ変換の原理について下記サイトなどを参考に調べていますが いまいち原理がよくわかりません。 そこで2つ質問があります。 http://www.allisone.co.jp/html/Notes/image/Hough/index.html 【質問1】  ハフ変換の原理は以下の認識であっていますでしょうか。 [直線を検出するハフ変換の原理] 10個のピクセルで構成される画像があり、各々のピクセルの座標を (x1, y1)、(x2, y2)、(x3, y3)・・・(x10, y10) とする場合。 また、画像上の直線の式は p = xcosθ + ysinθで表すことができるため、 様々なpとθの組み合わせの式を作成(例えば下記3つの式) (1) 2 = xcos10 + ysin10 (2) 4 = xcos20 + ysin20 (3) 6 = xcos30 + ysin30 (1)の式に10個のピクセルの各々の座標(x1, y1)、(x2, y2)・・・(x10, y10) を代入 → 2つのピクセルの座標が(1)式を満たす 同様に(2)の式に10個のピクセルの各々の座標を代入 → 8つのピクセルの座標が(2)式を満たす 同様に(3)の式に10個のピクセルの各々の座標を代入 → 3つのピクセルの座標が(3)式を満たす (2)式を満たすピクセルが多数存在するためこの画像には 4 = xcos20 + ysin20 で表す直線が存在する 【疑問2】 上記の認識でよい場合、もう1つ疑問があります。 直線の式 p = xcosθ + ysinθ において様々な(p, θ)の組み合わせの式を作成 することになると思うのですがその(p, θ)はどのように決めるのでしょうか。 考えうる限りすべての(p, θ)の組み合わせの式を作成するとものすごい量の 種類の式ができると思います。これをプログラムで行うとハフ変換はかなり 重い処理ということになるのでしょうか。

  • ハフ変換により円の検出方法はhttp://a-gamyl.hp.inf

    ハフ変換により円の検出方法はhttp://a-gamyl.hp.infoseek.co.jp/Clang/ip_hough.htmlなどのサイトに掲載されているので理解できます。 しかし、楕円の検出の場合にどのようなプログラムを組めば描写できるかを知りたいです。 かなり難しいとは感じています。

  • 直線検出のハフ変換について(deiphi)

    こんにちわ。 ただいま直線検出のハフ変換をdelphiという言語で書いている者です。 ハフ変換もdelphiについてもまったくの初心者です。 C言語はそれなりに勉強してきました。 参考になるページを探しているのですが、なかなか分かりやすいページがなく悪戦苦闘しています。 どなたかこれに関するページや情報をご存じではないでしょうか? ご存じの方、提供お願い致します。 よろしくお願い致します。

  • ハフ変換(円の検出)について

    ハフ変換を用いて2値画像中の円を検出するプログラムを作りたいのです。直線の検出は ρ=xcosθ+ysinθ でxy平面の点をρθ平面に反映しましたが、円の場合はどういう代数方程式を用いればいいのでしょうか?

  • ハフの塗装

     5年前に塗装を行ったのですが、特に南西面ハフ板の塗装傷みがひどくなっています。  今回塗装し直そうと計画しているのですが、塗料や工法の工夫によって外壁(モルタル)塗装と同じぐらいの耐久性をハフに持たせることはできるでしょうか?

  • 画像情報処理についてです。(Hough変換です。)

    お忙しいところ申し訳ありません。大学の工学部の学生の者です。 大学の「画像情報処理」の講義で次のような課題が出題されました。 1.「画像内に平行な2直線が存在する。その2直線の中心に位置する直線を検出するアルゴリズムを考案せよ」 2.「画像内に中心の位置を同じくする幾つかの円と、それらの円と中心位置が異なる円が存在する(それらは交わっていない)。この時、中心の位置を同じくする幾つかの円の中心位置のみを検出するアルゴリズムを考案せよ(即ち、同心円でない円の中心は検出しない)。」 Hough変換を用いればいいというのは何となく分かるのですが、具体的なアルゴリズムが分かりません。 教えて頂けると幸いです。

  • 直線検出のハフ変換プログラム(delphi)

    ただいまdelphiで直線検出のハフ変換のプログラムを書いているのですが、コンパイルし、実行しようとするとスタックオーバーフローになってしまいます。 おそらく2次元配列のcounterの部分だと思うのですが、どなたか回避の仕方お分かりになるでしょうか? ご存じの方いらっしゃいましたら教えて下さい。 下記にハフ変換の部分のコードを載せます。 他にも何か気付いた点ありましたらご指摘お願いいたします。 ○直線検出のハフ変換○ var i, j, k, n: Integer; rx, ry: Integer; clr: tcolor; R: longint; counter_max: Integer; THETA_RESOLUTION, RHO_RESOLUTION, LNUMBER_MAX: Integer; pai: Double; theta, rho: Integer; theta_max, rho_max, count: Integer; theta_cut, rho_cut: Integer; counter:array[0..1023,0..1999] of Integer; //直線検出のためのカウンタ sn:array[0..1023] of Double; //sin cs:array[0..1023] of Double; //cos begin THETA_RESOLUTION:=1024; //thetaの範囲は0から1023まで RHO_RESOLUTION:=2000; //rhoの範囲は-1000から999まで LNUMBER_MAX:=15; //検索する電線の数は15まで pai:=PI / THETA_RESOLUTION; //π÷THETA_RESOLUTION for i:=0 to 1023 do //sinとcosのテーブルを用意 begin sn[i]:=Sin(pai*i); cs[i]:=Cos(pai*i); end; //ハフ変換の実行// for rx:=0 to 639 do begin for ry:=0 to 479 do begin clr:=image1.Canvas.Pixels[rx,ry]; R:=colortorgb(clr); if(getrvalue(R)=0)and(getgvalue(R)=0)and(getbvalue(R)=0) then //黒である for theta:=0 to 1023 do begin rho:=Trunc(rx*cs[theta]+ry*sn[theta]+0.5); counter[theta,rho+1000]:=counter[theta,rho+1000]+1; end; end; end; //ハフ逆変換の実行// for n:=0 to 14 do begin //counterが最大になるtheta_maxとrho_maxを求める// counter_max:=0; for theta:=0 to 1023 do begin for rho:=-RHO_RESOLUTION div 2 to RHO_RESOLUTION div 2-1 do begin if(counter[theta,rho+RHO_RESOLUTION div 2] > counter_max) then begin counter_max:=counter[theta,rho+RHO_RESOLUTION div 2]; theta_max:=theta; rho_max:=rho; count:=counter_max; end; end; end; //counter[theta_max,rho_max]の近傍を0にする// for i:=-20 to 20 do begin for j:=-10 to 10 do begin theta_cut:=theta_max+i; rho_cut:=rho_max+j; if(theta_cut < 0) then begin theta_cut:=theta_cut+THETA_RESOLUTION; rho_cut:=-rho_cut; end else if(theta_cut > THETA_RESOLUTION-1) then begin theta_cut:=theta_cut-THETA_RESOLUTION; rho_cut:=-rho_cut; end; counter[theta_cut,rho_cut+RHO_RESOLUTION div 2]:=0; //削除する end; end; //ハフ逆変換した結果の表示// if(theta_max<>0) then //垂線の線を描く begin for rx:=0 to 639 do begin ry:=Trunc((rho_max-rx*cs[theta_max])/sn[theta_max]+0.5); if(ry>=480)or(ry<0) then continue; image1.Canvas.Pixels[rx,ry]:=RGB(255,0,0); end; end; if(theta_max<>THETA_RESOLUTION div 2) then //水平の線を描く begin for ry:=0 to 479 do begin rx:=Trunc((rho_max-ry*sn[theta_max])/cs[theta_max]+0.5); if(rx>=640)or(rx<0) then continue; image1.Canvas.Pixels[rx,ry]:=RGB(255,0,0); end; end; //直線を形成するピクセルが60個未満になったら表示しない// if count<60 then break; end; end;

  • 平面上のデータから異常値を取り除きたい

    次のようなxy座標データがあります これを平面上にプロットして、人間が眺めると、6番目から12番目のデータが異常と判断できます コンピュータでこの異常値を取り除くにはどうすればよいでしょうか 例えば、最小二乗法で楕円近似 -> うまくいかない ハフ変換で楕円近似 -> メモリと時間が大量に必要 (565,444) (583,452) (597,464) (605,484) (611,504) (593,520) (587,539) (574,553) (554,564) (536,553) (524,540) (509,530) (497,514) (498,493) (503,472) (513,456) (529,447) (548,442)