[画像エッジ検出] matlab最小二乗法に基づく楕円エッジ検出[Matlabソースコード079を含む]

1.はじめに

古典的な楕円検出法
長年の研究開発の後、楕円検出アルゴリズムは基本的に比較的完全なシステムを形成しました。それらは、投票(クラスタリング)、最適化、およびアークベースの方法の3つのカテゴリに大別できます。
投票(クラスタリング)法
楕円には、中心位置座標、長軸と短軸の長さ、傾斜角の5つのパラメーターがあるため、標準のハフ変換は強力なロバスト性を備えていますが、メモリ要件が高く、計算効率が低くなります。これは現実的ではありません。ハフ変換アルゴリズムは、ハフ変換に基づいています。さまざまな国の研究者による長年の絶え間ない努力の結果、多くの改善されたアルゴリズムが導き出されましたが、それぞれに長所と短所があります。標準のハフ変換と比較して、ランダムハフ変換アルゴリズムの計算速度は大幅に向上しますが、相互に遮蔽された楕円を検出する場合の精度は低くなります。

ランダムハフ変換楕円検出アルゴリズム
ランダム楕円検出は、最小二乗法とハフ変換アルゴリズムの組み合わせを使用します。最初のステップは、より理想的なエッジマップを取得するための前処理です。2番目のステップは、3つの点をランダムに選択し、これらの3つの点を中心と同じサイズの近傍にあるすべての点と見なし、最小二乗法で楕円に合わせます。図2-3に示すように。3番目のステップは、エッジポイントから4番目のポイントをランダムに選択して、このポイントがフィットした円上にあるかどうかを判断することです。その場合、楕円は実際の楕円である可能性が高いと見なされ、楕円の信憑性を検証するための証拠が収集されます。
ここに画像の説明を挿入
アルゴリズムの具体的なプロセスは次のとおりです(2番目のステップから開始)
。1。エッジ検出によって取得されたポイントをセットVに収集し、障害カウンターfの初期値を0に設定します。5つのしきい値を設定します。これは、許容できる障害の最大数Tf、検出中のVのエッジポイント数に必要なしきい値Tem、ランダムに選択された3つのポイント間の最小距離Ta、およびランダムに選択された4番目の4番目の最大値です。ポイントから可能な楕円の境界までの距離Td、および楕円欠陥率のしきい値Tr。
2. npは、セットVに残っているポイントの数を表します。npがTemより小さい場合、または失敗の数fがTfより大きい場合、アルゴリズムは停止し、アルゴリズムは終了します。それ以外の場合、Vから4つのポイントがランダムに選択されます。 Vから削除されました。
3.楕円パラメータを解くために使用される3点間の距離がTaより大きい場合は、楕円をフィットさせ、4番目の点から楕円の境界までの距離を計算します。距離がTdより小さい場合は、手順4に進みます。 ; 2つのうちの1つを満たさない場合は、これらの4つのポイントをVに戻し、失敗の数に1を加えて、ステップ2に戻ります。
4. Eをステップ3で適合した楕円とし、しきい値Tdを満たす点の数numを初期化します。Vの中点をトラバースし、それらと楕円Eの境界との間の距離がTd未満であるかどうかを計算して判断し、そうである場合は、num = num + 1で、トラバースが完了するまでVからポイントを削除します。
5. num> = Tr * Kの場合(Kは楕円Eの円周)、手順6にジャンプします。それ以外の場合、楕円Eは実際の楕円ではないと見なされ、手順4と2でnum +4が削除されます。各ポイントはVに戻り、ステップ2にジャンプします。
6.楕円Eが実際の楕円であると考え、fを0に設定して、手順2にジャンプします。
ランダムハフ変換の長所と短所は次のとおりです。
まず、アルゴリズムは最小二乗法に基づいているため、検出結果は実際の楕円よりも小さいことが多く、ノイズに敏感ですが、他方では一方、前処理効果が良いと検出精度が高くなります。
第二に、アルゴリズムはランダムサンプリングに基づいているため、一方では選択されたポイントが比較的近く、フィットした楕円の偏差が大きくなる状況が発生する可能性がありますが、他方では検出速度が向上します。ランダムサンプリングの柔軟性のため。
第三に、一方ではパラメータが適切に選択されている場合、検出は高速で正確です。他方では、アルゴリズムはパラメータTa、Td、Trによって厳密に制御され、これらのパラメータは適切な値を取得するのが容易ではないためです。 、不適切なパラメータが表示されます計算量が増えるだけでなく、誤検出の可能性も高まります。

最適化手法最適化手法
のメリットは精度ですが、デメリットは一度に1つのグラフしか処理できないことです。つまり、画像情報を分類して分離する必要があります。Andrew Fitzgibb et al。は、直接最小二乗楕​​円フィッティングアルゴリズムを提案しました。この方法により、適合した楕円が確実に一致するようになります。ただし、この方法は孤立点とノイズ点の影響を受けます。現在、ほとんどの最適化アルゴリズムは他のアルゴリズムと組み合わせて使用​​されています。

アークベースの方法
境界クラスタリングに基づく楕円検出方法は、アークベースの方法と最小二乗法を組み合わせたものです。円弧は境界マップから抽出され、フィルタリングされてクラスター化され、最後に楕円が最小二乗法で近似されます。この方法は、複数の楕円、相互の楕円のオクルージョン、および広く注目されている楕円の部分的な欠陥などの複雑な状況に効果的に対処できます。

境界クラスタリングアルゴリズムプロセス
境界クラスタリングアルゴリズムは、ボトムアップアルゴリズムです。アルゴリズムのステップは、主に3つのステップに分けられます。これらは、前処理、境界クラスタリング、および楕円に適合する直接最小二乗です。フローチャートは次のとおり
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
です。4番目のステップは2値化です。二値化の効果は、ほぼ完全にセグメンテーションしきい値の選択に依存します。したがって、最適なセグメンテーションしきい値を自動的に見つける方法は非常に重要です。画像の二値化に適したセグメンテーションしきい値を見つける1つの方法は、画像のグレー特性に従って、画像を背景とターゲットの2つの部分に分割することです。背景とターゲットの平均間のクラス間分散が最大のセグメンテーション誤分類の最小の確率。MATLABのGraythresh関数は、このメソッドを使用して、2値化の基礎として適応しきい値を取得します。
二値化後の5番目のステップでは、楕円弧の近くの非相関ピクセルが検出結果に深刻な影響を与えるため、非相関ピクセルを大幅に削減するために、この論文では形態腐食操作を使用して洗練された境界を取得します。

境界ピクセル接続
Kovesiの境界接続アルゴリズム使用して、バイナリイメージが8隣接接続基準に従って上から下、左から右にスキャンされ、境界ピクセルが有向境界列に接続されます。次に、境界列のピクセル数のしきい値条件を使用して、ピクセル数の少ないセットを削除します。境界列のピクセル数がしきい値より少ない場合は、ノイズまたは背景である可能性が高いため、削除する必要があります。具体的な手順は次のとおり
です。1。8隣接接続基準に従ってバイナリ画像を上から下、左から右にスキャンし、接続された領域に従って画像内のピクセルをクラスター化します。
2.接続された各ドメインの境界ピクセル内のすべての端点と分岐点を見つけ(分岐点は3つ以上の曲線の交点です)、それらを保存します。
3.これらのエンドポイントと分岐ポイントをエンドサインとして使用して、接続された各ドメインのピクセルのセットを、エンドポイントと接続ポイントに遭遇したときに切断される小さなセットに分割します。
4.ピクセル数が特定のしきい値より少ないこれらのセットの部分を削除します。

線分抽出
画像のラスタライズから正確な接線を取得することは困難であり、円弧の接線は後続のプロセスで必要になるため、線分フィッティングが必要です。つまり、元の円弧を置き換えるためにマルチセグメントポリラインが使用されます。具体的な手順は次のとおりです
。1。境界ピクセルで接続されたi番目の有向境界列を取得し、境界列の総数を超えているかどうかを判断します。超えていない場合は、アルゴリズムを終了する場合は手順2に進みます。 。
2.境界列が処理されたかどうかを確認します。処理されていない場合は、手順3に進みます。処理されている場合はi = i + 1で、手順2を繰り返し
ます。3。3番目の点から始めて、最初の点からこの点までを計算します。 (点jとして示されます)、最初の点とこの点と線の間のすべての点の間の距離を順番に決定します。すべての距離が特定のしきい値未満の場合、j = j + 1、手順3に進みます。 、それ以外の場合、有向境界列はそこから切断され、最初の点とj番目の点のみが前部に保持され、前のj点によって形成される線は最初の点とj番目の点の間の直線になります。行;後者の部分は引き続き境界列iとして記録されます
。4 手順3で壊れた有向境界列の後ろのピクセル数が特定のしきい値未満であるかどうかを判断します。そうでない場合は削除します。そうでない場合は削除されません。処理されました。最後に、ステップ1にスキップします。
このプロセスを完了すると、接続されたドメインのピクセルによって形成される曲線は、いくつかのピクセルによって形成されるポリラインになります。この処理を行うとピクセル情報の一部が失われますが、ラスタライズ効果がないため、ある意味でアークタンジェントの取得精度が向上します。また、データが少なくて済み、処理が簡単になります。次に、線分しきい値条件を使用して、短い線分列を削除します。線分の数がしきい値より少ない場合は、ノイズやバックグラウンド、フィッティング時のエラーが大きすぎる可能性があるため、削除する必要があります。

線分列の回転方向を統一
この記事では、すべての線分列の回転方向を反時計回りに統一します。
図3-4の黒い点が線分列の点であるとすると、矢印は線分列の方向を表し、P1(x1、y1)、P2(x2、y2)、P3(x3、y3)は次のようになります。線分列の3つの連続する線。ピクセル、ピクセルがz座標に導入され、0とすると、P1(x1、y1、0)、P2(x2、y2、0)、P3(x3、y3、 0)、空間ベクトル
ここに画像の説明を挿入
ここに画像の説明を挿入
アーククラスター
サークルアーククラスタリングは、同じ楕円に属するが分離されている2つ以上の楕円アークをクラスター化することです。クラスタリングの前に、まずアークの完全性を判断する必要があります。一般に、円弧の終点P1、P3と中点P2によって形成される2つのベクトルP2P1とP2P3の間の角度が判断に使用されます。角度が小さいほど、楕円弧はより完全になり、角度が大きいほど、楕円弧の欠陥は一般に深刻であると見なされます。しきい値を設定します。夾角がしきい値未満の場合、円弧は十分に完成していると見なされ、実際の楕円は円弧上の点によってのみ正確にフィットできます。したがって、円弧はに参加する必要はありません。次のクラスタリングプロセス。しきい値を適応させる場合は、クラスター化する楕円弧とクラスター化する必要のない弧(より完全な弧)を分割する前に、しきい値を決定する必要があります。直接最小二乗法を使用して、円弧のある楕円に合わせます。丸い場合は、誤差を減らすために、しきい値の角度を90度など、少し大きくする必要があります。円弧のある楕円の場合は、しきい値角度は、60度など少し小さくする必要があります。次に、適応閾値に従ってアーク判定が行われる。しきい値よりも大きい場合は、円弧上の点が少なすぎて正確な楕円を合わせるには不十分であると考えられ、円弧と同じ楕円に属する円弧を見つけてから見つける必要があります。すべてのポイントを使用して、楕円を合わせます。この判断プロセスの後、楕円弧は2つのグループに分けられます。クラスタリングに参加する必要のある楕円弧を点数の降順で並べ、数の多い弧を優先して以下の処理を行います。
楕円円弧をクラスター化するには、最初に検索領域を定義する必要があります。楕円は閉じた図形であるため、楕円全体が、円弧の任意の部分と接線で囲まれた領域の楕円に属していると判断できます。円弧の両端。他の円弧は、対応する弦の光線と円弧の端の接線で囲まれた領域にあると判断されます。これが私たちの検索エリアです。図のa1の検索領域は、光線l1、l2、コードl3、および画像のエッジ内の領域です。この領域で円弧を見つけると、検索範囲が狭くなり、効率が向上します。円弧がクラスター化される楕円弧の検索領域にあるかどうかを判断するには、この円弧の最初と終点j3とj4が検索領域にあるかどうかを確認するだけで済みます。方法は、線に平行な2つの点の交点と、別々にクラスター化される楕円弧の弦l3の接線を見つけることです。2つの交点がある場合、交点は光線上にあり、2つの端点にあります。対応する2つの交点の間にあり、円弧は検索領域にあります。この図では、a2、a3、およびa4がa1の検索領域にあるのは明らかですが、a5はそうではありません。
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
上図(a)に示すように、フィッティングに関係するほとんどの点はフィッティングされた楕円上にあるため、制約2の条件を満たす可能性が高くなります。(b)フィッティングされたポイントのほとんどはフィッティングされた楕円から分離されます。境界特定の距離では、制約条件2が満たされない可能性が高くなります。
これらの2つのしきい値を適応させたい場合、方法は最初に楕円をフィットさせ、楕円のサイズを決定することです。楕円が小さい場合は、制限を適切に下げる必要があります。つまり、距離のしきい値を増やして比例しきい値を下げます。楕円が大きい場合は、制限を適切に増やす必要があります。つまり、距離のしきい値を減らして、比例を増やします。しきい値。このアルゴリズムでは、楕円の短軸が50未満の場合、距離のしきい値は0.05、比率のしきい値は0.7に設定されます。それ以外の場合、前者は0.03、後者は0.8になります。


アーククラスタリングの後にアークに追加し、より完全またはより完全な2つの楕円アークが同じに属する場合がありますが、それらは前のステップでのみ分離され、ペアになっていないため、マッチングプロセス、検出を増やす必要があります正確さ。マッチング方法は、制約2の方法でもあります。この方法は元のアルゴリズムの偽造防止プロセスに類似しているため、この方法の後に偽造を解除する必要はありません。

直接最小二乗楕​​円フィッティング
の前のステップの多くは、ピクセル数の少ないセットを削除するか、境界列の多くのポイントを少数のポイントに置き換えるか、セグメンテーション後にポイントの少ないセットを削除します。これらの操作は、実際には基本的に楕円フィッティングステップです。すべての背景とノイズを取り除き、いくつかの有用な情報も含まれています。したがって、ノイズや孤立点に敏感な直接最小二乗法でも楕円の適合に使用できます。この方法は楕円の欠陥に敏感ではないため、非常に適しています。

第二に、ソースコード

clc;
clear all;
im=imread('1.jpg');
im0=rgb2gray(im);%变彩色为黑白
im1=medfilt2(im0,[3 3]);%中值滤波函数
BW = edge(im1,'sobel'); %边缘检测,边缘为1,其余为0
[imx,imy]=size(BW);%获取矩阵行数和列数
L = bwlabel(BW,8);% Calculating connected components
mx=max(max(L))
% There will be mx connected components.Here U can give a value between 1 and mx for L or in a loop you can extract all connected components
% If you are using the attached car image, by giving 1,23 to L you can extract the number plate completely.
[r,c] = find(L==3); 
rc = [r c];
[sx sy]=size(rc);
n1=ones(imx,imy);%zeros
for i=1:sx
    x1=rc(i,1);
    y1=rc(i,2);
    n1(x1,y1)=0;
end % Storing the extracted image in an array
figure,imshow(n1);
title('边缘提取');
[S]=ellipsefit(c,r)
a=S.Phi;
jdg(S.Xc,S.Yc,S.A,S.B,a,n1)%plot ellipse
 
   

3、実行中の結果

ここに画像の説明を挿入

四、備考

完全なコードまたは書き込み追加QQ2449341593過去のレビュー
>>>>>>
[Matlab 024] [画像処理1] Matlab画像処理チュートリアルシリーズの画像圧縮[ Matlab025
] [画像処理2] Matlab画像処理チュートリアルシリーズ画像セグメンテーション(1)
[Matlab026号] [画像処理3] Matlab画像処理チュートリアルシリーズの画像セグメンテーション(2)
[Matlab 029] [画像処理4] Matlab指紋認識
[Matlab030] [画像処理5]銀行カード番号認識matlabソースコード
[ Matlab 074] [画像処理6] [画像クラスタリング] FCMと改良されたFCM脳CT画像クラスタリング処理に
基づく[Matlab075] [画像処理7] [画像評価] CCFアルゴリズムに基づく画質評価
[Matlab076] [画像処理8] [画像強調]局所コントラスト強調に基づくCLAHEアルゴリズム-ヒストグラム強調
[ Matlab077 ] [画像処理9] [画像融合]周波数分割に基づく画像融合
[MatlabIssue 078] [画像処理10] [画像評価]画像svmに基づく参照なしの品質評価

おすすめ

転載: blog.csdn.net/TIQCmatlab/article/details/112986616
おすすめ