ハフ変換の原理についてわかりやすく解説します

このQ&Aのポイント
  • ハフ変換は画像上の直線を検出するための手法です。直線の方程式を用いて様々な(p, θ)の組み合わせの式を作成し、画像上のピクセルがそれらの式を満たすかどうかを判定します。
  • 具体的には、画像上の各ピクセルの座標を(x, y)として、直線の方程式を p = xcosθ + ysinθ と表します。そして、様々な(p, θ)の組み合わせに対して、画像上のピクセルが方程式を満たすかどうかを調べます。
  • ハフ変換においては、全てのピクセルに対して方程式を満たすかどうかを判定する必要はありません。代わりに、ピクセルが方程式を満たすかどうかを判定する際に、(p, θ)の組み合わせを離散化し、一定の間隔で取るようにします。これにより、計算量を削減することができます。
回答を見る
  • ベストアンサー

ハフ変換(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, θ)の組み合わせの式を作成するとものすごい量の 種類の式ができると思います。これをプログラムで行うとハフ変換はかなり 重い処理ということになるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

ざっくりいうと、 1. 質問者の方のやり方だと、 - 考えられうる直線(つまり、全ての(θ,p)の組み合わせ)各々に対して、 - それぞれのデータ点が通るかを、データ点毎に計算する 為、計算量として (θの取りうる値)×(pの取りうる値)×(データの個数)分の計算が必要です。 2. それに対して、私が書いた方法では、 - 一つのデータに対して、θの取りうる値をすべて試し、それぞれのθに対応するpの値を(各θに対して)計算する - この計算を、全てのデータに対して行う 為、計算量としては(θの取りうる値)×(データの個数)となります。

unko347
質問者

お礼

ご回答ありがとうございます。 一つのデータ点に対して、θの取りうる値とそれぞれに対応するpを計算。 それを全てのデータ点に対して行うというのが肝ですね。 大変助かりました。丁寧な解説ありがとうございました。

その他の回答 (1)

回答No.1

そういう考え方(やり方)もあるのですが、その考え方(やり方)だと【疑問2】の通り重い処理になってしまうので、そういうやり方は普通しません。 どうするかというと、例えばデータ点 P[1] (x[1], y[1])を通る直線を考えた時に、仮にθを一つ決めると、p = x[1]cos(θ) + y[1]sin(θ)という関係式から、pの値は決まってしまいます。なので、普通は投票するべきθの範囲が決まっている時、例えば0≦θ≦πの範囲、π/6刻みで調べる、とかいう場合を考えた時に、θの値を 0, π/6, 2π/6, 3π/6, 4π/6, 5π/6, 6π/6と変え、それに対して p = x[1]cos(θ) + y[1]sin(θ)の関係式からpの値を(各々のθに対して)計算し、計算した6つの(θ, p)の組の所にそれぞれ一つずつ投票する、という方針でやります。これを、全てのデータ点 P[j]に対して計算するのです。 そうして(θ, p)平面に投票を繰り返したとき、もっとも得票を集めた(θ, p)の組み合わせに対応する直線が、もっともらしい直線として選ばれる、ということになります。 いずれにせよ、調べるべき(θ, p)平面の大きさが大きかったり、メッシュの刻み幅が細かかったりする場合には、Hough変換は重い計算になります。

unko347
質問者

お礼

ご回答ありがとうございます。 丁寧な解説ありがとうございました。

関連するQ&A

  • ハフ変換について

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

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

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

  • ニュートンの法則についての質問です

    一つの座標系(X,Y,Z)とそれをθだけ回転したもう一つの座標系(X´,Y´,Z´)がある。座標の変換式と力の変換式はそれぞれ X´=Xcosθ+Ysinθ Y´=Ycosθ-Xsinθ Z´=Z F´x=Fxcosθ+Fysinθ F´y=Fycosθ-Fxsinθ F´z=Fz であたえられる この時二つの座標系でニュートンの方程式の形が変わらないことを示せ この問題がわかりません…

  • 線形変換

    こんにちは。y1 = x1 + 2x2, y2 = 2(x1 + 2x2) という線形 変換を座標変換という立場でみたとき、新しいy1,y2座標系の y1軸、y2軸とも、同じ直線(古い座標系で見ると、x1 + 2x2=0 )になるそうですが、何故そうなるのかという事が分かりませ ん。  ちなみにこれは、参考書の逆変換を説明するセクションで 、A^(-1)が存在しない時、y = Ax の逆変換は考えられない ことを幾何的に説明する時の説明の一部です。  y1,y2,x1,x2の、1,2は添え字です。  よろしくお願いします。

  • 座標の回転

    x,y座標で表されるある点を反時計回りにα°回転したX、Y座標に変換しました。 かつてこのサイトで教えていただいたとおり (x、y)=(rcosθ,rsinθ)とおき,αだけ回転した座標なので (X,Y)=(rcos(θ+α),rsin(θ+α)) 加法定理を使って X=xcosα-ysinα Y=xsinα+ycosα と計算しました。 ところが,ある本に同様の計算がついていたのですが, X=xcosα+ysinα Y=-xsinα+ycosα となっており正負が異なります。(私と同じように反時計回りの回転)  私の計算が違っているのでしょうか。それとも何かの仮定が異なっているのでしょうか。 (ちなみにある本は作図により上記の結果を求めています。)  分かりにくいかもしれませんが,適切な指摘をお願いいたします。

  • 左手系のオイラー角で説明しているのでしょうか

    オイラー角の説明で、 z軸まわりにφだけ回転させると、添付図のように (x,y,z)軸は(x',y',z')軸の位置まで運動する。 そしてこの回転による座標系の変換式は x'=xcosφ+ysinφ y’=-sinφ+ycosφ とあるのですが、これは左手系で 説明していると考えて宜しいですか。

  • 二次曲線の問題です

    y^2+3x+4y+1=0上の点P(-3、2√3-2)における接線の方程式を求めよ この問題わかりません>_<  まず、私は題意の式を整理しました y^2+3x+4y+1=0 ⇔(y+2)^2-4+3x+1=0 ⇔(y+2)^2+3x-3=0 ⇔(y+2)^2+3(x-1)=0 ⇔(y+2)^2=-3(x-1) よってy^2=-3xの放物線の式とみました。 そのあと、 いまax^2+by^2+2qx+2fy+c=0 という曲線が、接線の方程式を求める時に ax1x+by1y+q(x1+x)+ f(y1+y)+c=0の形にするのを練習しているので、 y^2=-3xの式を同じようにしてみて>_< y1y=-3(1/2x1 +1/2x)と変形してみました。 そしてここのx1とy1に題意のPの座標 P(-3、2√3-2)をそれぞれx1とy1に代入したのですけど、コレを整理しても、教科書の答えになりませんでした。答えは3x+4√3y-15+8√3=0です。 あと、もう一つ質問なのですけど、 もし上の解き方でよかったら、Pの座標をx1とy1に代入した後の式は  3x-4(√3-1)y-9=0 でした。 これは、y^2=-3xの式にPの座標を代入した結果です。なので、題意のy^2+3x+4y+1=0の式にしないと駄目だと思い、 y^2=-3xの式から、平行移動した、 (x、y)=(1、-2)を足さないと ダメだと思いました。 これで、いいのでしょうか>_<??  もしあっていたら、どうやってこの *3x-4(√3-1)y-9=0の式から (1、-2)を足した式を書く事ができますか???  このやり方がわからないです>_< 誰か教えてください!

  • 接線の公式の導き方の教科書の説明>_<?

    放物線y^2-4px (1)上の1点(x1、y1)における接線の式はy1y=2p(x1+x) (ただしy1^2=4px1) (2) {導き方}y1≠0のとき、曲線上の点(x1、y1)を通る直線は、傾きをmとして y=m(x-x1)+y1  (3) とあらわれる。ただし(x1、y1)は(1)上の点であるから y1^2=4px1 (4) ここで(1)と(3)の共有点のx座標が満たす方程式を作ると m^2x^2-2{m(mx1-y1)+2p}x+(mx1-y1)^2=0 よって、(3)y=m(x-x1)+y1は(1)放物線y^2=4pxの接線であるから、この方程式の判別式は0であり、その時の重複解がx1である。よって x1=m(mx1-y)+2p±√0 / m^2 (この分数が出来ません>_<!!)   これからm=2p/y1 これを(3)y=m(x-x1+y1 に当てはめて、y=(2p/y1)(x-x1)+y1 ∴y1y=2p(x-x1)+y1^2 ここへ、(4)y1^2-4px1を用いればよい y1=0の時は接線は直線x=0であり、(2)の特別な場合である。 質問です!! 一つ目は、放物線のy^2=4px(1)に直線y=m(x-x1)+y1(3)の式を代入した後に出来た長い式から、x1=。。。 とm^2が分母になっている長い分数の式にする方法がわかりません>_<教科書では省いているので、自分で頑張っても出来ません>_<誰か教えてください!! 二つ目の質問は、mの値が求まって、直線の式(3)に当てはめた後、y1y=2p(x-x1)+y1^2と得られたまでは解ったのですけど、そのあと、「ここへ(4)を用いればよい」っていう部分が良くわかりません>_< (4)を用いれば何が良いのですか!?>_<??? そしたら、「y1=0の時は接線は直線x=0であり、(2)の特別な場合である」って書いてあるんですけど、意味が解りません>_<????????? 

  • 変数変換についての質問です

    f(x,y)をu=xcosα-ysinα v=xsinα+ycosα と変数変換しu,vの関数g(u,v)とみなす この時∂²f/∂x² +∂²f/∂y²=∂²g/∂x² +∂²g/∂y² となることを示せ この問題が分かりません…

  • 円外の点から円に引いた接線(難)

    円外の点から円に引いた接線(難) 円と直線の共有点の座標 1円x^2+y^2=50・・・・・Aと次の直線の共有点はあるか。あるときはその座標を求めよ (1)y=-3x+20 y=-3x+20・・・・(1)をAに代入するとx^2(-3x+20)^2=50 整理して x^2-12x+35=0 ゆえに (x-5)(x-7)=0 よってx=5,7 この求まったx=5をAに代入してyについて解くと、yの値が2つでます。しかし、このどちらか一方は答えではありません。 なぜなら、円の図形の性質上、x=5を満たす点は2つあるから接線との交点じゃないほうの点も考えてしまうからでした。 x=7も同様です。 点P(ー5、10)を通り、円x^2+y^2=25に接する直線の方程式を求めよ。 2接点をQ(x1,y1)とするとx1^2+y1^2=25・・・・(1) 点Qにおける接線の方程式はx1x+y1y=25・・・・・(2) この直線が点P(ー5、10)を通るから-5x1+10y1=25 ゆえにx1=2y1-5・・・・(3) (1)に代入して(2y1-5)^2+y1^2=25 整理して y1^2-4y1=0 ゆえに y1=0,4 以下省略 しかし、2番目の問題も1番目のように(1)に代入すると答えにならない解2つでてきます。 ですが、今回はx,yという変数でなく定数です。ですから、1番目のように円を考えて解決することができません。 どうすれば(1)に代入すると答えにならない解が2つでてくることの理由を考えることができますか?? (わかりずらい文章ですいません)