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);

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

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)

入力引数

すべて折りたたむ

バイナリ イメージ。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 より前に導入

すべて展開する