2012-03-06 33 views
7

テキストイメージにHough transformを実装するにはどうすればよいですか?私は擬似コードを探しています(結局これはjavaになります)。ここハフ変換の実装方法は?

は、いくつかの背景情報がある:イメージ考える

、ラインy = mx + bの方程式を決定します。典型的には、ハフ変換は、極座標で表して、Rho = y*sin(theta) + x*cos(theta)と表される。 (私は実際にXYの値が画像に対応しているかどうかは分かりません)。

Rhothetaの値にのみ興味があり、それらをプロットします。アキュムレータ内に多くの点がある場所(私は実行ではなく実装の一部を知っています)はラインとみなされます。

私が理解していない問題は、アキュムレータを更新するrhothetaを見つける方法です。

+0

を抽出することができます! ;) – Matteo

答えて

5

ハフ変換の最も簡単なケースは、直線を検出するための線形変換です( )。画像空間において、直線はY = MX + bと 説明することができ、グラフィカルだからこれは何xy対応を指示像点(x、y)は

の各対 に対してプロットすることができます画像に戻る。ハフ変換で

変換、主なアイデアはない点で、代わりの画像点(X1、Y1)、(X2、Y2)、...、しかし 、と直線の特性 を考慮することですスロープパラメータmおよび のインターセプトパラメータbのようなそのパラメータの値。

このことから、直線y = mx + bは、パラメータ空間における点(b、m)として表すことができる。 しかし、縦線がパラメータmおよびbの無制限の値 をもたらすという問題に直面しています。計算上の理由から、 ハフ変換の行には、 と(theta)と表記された異なるパラメータのペアを使用する方がよい。

パラメータrhoは、線と の起点との間の距離を表し、thetaは、起点から最も近い点までのベクトルの角度です( )。

これは、あなたが何をrhothetaを伝えるには、に対応しています。彼らはあなたのイメージで説明しようとしている直線の傾きと切片の極座標で表現したものです。


SourceForge上では、ハフのC++実装変換を見つけることができます。あなたは、私が以前のリンクで指摘コードを解釈することができるはず、そこから

説明は、次のことがあります。

ハフ変換アルゴリズムを、アキュムレータと呼ばれる配列を、使用しています に検出線y = mx + bの存在。

たとえば、線形ハフ変換問題には、2つの未知パラメータ、mとbがあります。

各ピクセルおよびその近傍について、ハフ変換アルゴリズム は、そのピクセルにエッジの十分な証拠があるかどうかを判断します。 の場合は、その行のパラメータを計算し、パラメータが入っているアキュムレータのビンを と探し、そのビンの値を に増やします。最高値でビンを見つけることによって

は、通常、アキュムレータ空間で 極大値を探すことにより、最も可能性の高いラインは は答えが有用であったなら、私を知ってみましょう