Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

hough

説明

[H,theta,rho] = hough(BW) はバイナリ イメージ BW の標準的なハフ変換 (SHT) を計算します。関数 hough はラインを検出するように設計されています。関数はラインのパラメトリック表現 rho = x*cos(theta) + y*sin(theta) を使用します。この関数は、ラインに垂直なベクトルに沿った原点からラインまでの距離 rho と x 軸とこのベクトルとの間の角度 theta (度単位) を返します。また、この関数は、行と列がそれぞれ rho と theta の値に対応するパラメーター空間行列になる、SHT H を返します。詳細については、アルゴリズムを参照してください。

[H,theta,rho] = hough(BW,Name,Value) は、計算に影響を与える名前と値の引数を使用して、バイナリ イメージ BW の SHT を計算します。

すべて折りたたむ

イメージを読み取り、グレースケール イメージに変換します。

RGB = imread('gantrycrane.png');
I  = im2gray(RGB);

エッジを抽出します。

BW = edge(I,'canny');

ハフ変換を計算します。

[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89);

元のイメージとハフ行列を表示します。

subplot(2,1,1);
imshow(RGB);
title('gantrycrane.png');
subplot(2,1,2);
imshow(imadjust(rescale(H)),'XData',T,'YData',R,...
      'InitialMagnification','fit');
title('Hough transform of gantrycrane.png');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(gca,hot);

Figure contains 2 axes objects. Axes object 1 with title Hough transform of gantrycrane.png, xlabel \theta, ylabel \rho contains an object of type image. Axes object 2 with title gantrycrane.png contains an object of type image.

イメージを読み取ってグレースケールに変換します。

RGB = imread('gantrycrane.png');
I  = im2gray(RGB);

エッジを抽出します。

BW = edge(I,'canny');

限られた範囲の角度にわたってハフ変換を計算します。

[H,T,R] = hough(BW,'Theta',44:0.5:46);

ハフ変換を表示します。

figure
imshow(imadjust(rescale(H)),'XData',T,'YData',R,...
   'InitialMagnification','fit');
title('Limited Theta Range Hough Transform of Gantrycrane Image');
xlabel('\theta')
ylabel('\rho');
axis on, axis normal;
colormap(gca,hot)

Figure contains an axes object. The axes object with title Limited Theta Range Hough Transform of Gantrycrane Image, xlabel theta, ylabel rho contains an object of type image.

入力引数

すべて折りたたむ

バイナリ イメージ。2 次元 logical 行列または 2 次元数値行列として指定します。数値入力の場合、非ゼロのピクセルは 1 (true) であると見なされます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: [H,theta,rho] = hough(BW,RhoResolution=0.5)

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: [H,theta,rho] = hough(BW,"RhoResolution",0.5)

rho 軸に沿ったハフ変換ビンの間隔。0 より大きく、norm(size(BW)) より小さい正の数値として指定します。

データ型: double

SHT 用の Theta 値。[-90, 90) の範囲内の数値ベクトルとして指定します。

例: -90:0.5:89.5

データ型: double

出力引数

すべて折りたたむ

ハフ変換行列。nrho 行 ntheta 列の数値行列として返されます。行と列は rhotheta の値に対応します。詳細については、アルゴリズムを参照してください。

x 軸と rho ベクトルの間の角度 (度単位)。数値行列として返されます。詳細については、アルゴリズムを参照してください。

データ型: double

ラインに垂直なベクトルに沿った原点からラインまでの距離。数値配列として返されます。詳細については、アルゴリズムを参照してください。

データ型: double

アルゴリズム

標準的なハフ変換 (SHT) はラインのパラメトリック表現を使用します。

rho = x*cos(theta) + y*sin(theta)

座標系の原点は、左上隅のピクセルの中心にあると仮定されます。

変数 "rho" は、原点からラインまでの垂直距離です。

変数 "theta" は、原点からラインまでの垂直な投影を正の "x" 軸から時計回りに測定した角度です。theta の範囲は –90° ≤ θ < 90° です。ライン自体の角度は θ + 90° で、正の x 軸に対して時計回りに測定されています。

Graphical representation of how theta and rho are defined for a line, in green, relative to the perpendicular projection, in black.

SHT は、行と列がそれぞれ "rho" 値と "theta" 値に対応するパラメーター空間行列です。SHT の要素は積和セルを表します。当初、各セルの値はゼロです。次に、イメージの背景以外のすべての点で、rhotheta ごとに計算されます。rho は SHT 内の最も近似する行に丸められます。積和セルは増分されます。この手順の終了時に、SHT(r,c)Q の値は、xy 平面の Q 点が theta(c)rho(r) によって指定されたライン上にあることを意味します。SHT のピーク値は入力イメージの潜在的なラインを表します。

ハフ変換行列 Hnrhontheta 列の行列です。ここで、

nrho = 2*(ceil(D/RhoResolution)) + 1 および
D = sqrt((numRowsInBW - 1)^2 + (numColsInBW - 1)^2) です。
rho 値は -diagonal から diagonal までの範囲です。ここで、
diagonal = RhoResolution*ceil(D/RhoResolution) です。

ntheta = length(theta)

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する