序文
このメモは主にDIP理論➕openCVの実装に基づいています。このメモを学習するには、まずDIP理論をよく読み、関連する知識を自分の言葉で説明し、openCVで関連する演算子を習得する必要があります。
これは主にVS2017 / 2019に基づいて、openCV3.4.10バージョンの操作を実現します
画像処理は、従来の画像処理と深層学習ベースの画像処理に分けられます。特定の章またはセクションに深層学習が含まれる場合は、タイトルの後に(深層学習)を追加して区別します。
第1章特徴抽出
特徴抽出では、従来の画像処理はそれ自体で固定特徴を抽出するように設計されています。深層学習では、CNNネットワークは主に画像特徴を広く抽出するために使用されます。この章では、主に従来の画像処理の古典を紹介します。特徴の説明と抽出方法、Haar、LBP、SIFT、HOG、DPM機能など。DPM機能は、特徴抽出の分野における従来のDIPの上限です。
画像の浅い特徴は主に色、質感、形です
最初のセクションハールの特徴(黒と白のブロック)
Haar機能は、黒と白のピクセル領域に基づいています。各黒または白の領域は、複数のピクセルを含むピクセルブロックです。ピクセルブロック間の違いにより、次の図のように、どのブロック間にどのタイプのエッジが存在するかが決まります。説明の垂直エッジ、2番目は水平エッジです。
長方形のハール機能は、長方形のいくつかの領域のピクセルの合計の違いを定義します。これは、任意のサイズと任意の位置にすることができます。この違いは、画像の特定の領域のいくつかの特性を示しています
Haar機能は、顔認識シナリオでよく使用されます
セクション2LBP機能(ローカルバイナリモード)
LBPはLocalBinary Patternの略語であり、LBP機能は画像のローカル機能を表し、LBP機能は回転不変性とグレースケール不変性を特徴としています。
顔認識とターゲット検出で一般的に使用されます
LBPの回転不変性と灰色不変性は、多くの場合、照明や回転などに対してロバストである可能性があります。
2.1元のLBP機能
写真または関心のある領域では、そのLBP機能には次の説明手順があります。
- グレースケール画像では、3x3ピクセルの近傍で、中心ピクセルがしきい値Tとして使用され、中心点の8つの近傍ピクセルの8つの値がそれぞれTと比較されます。Tより大きい場合は、は1に設定され、0未満の場合
- 最初のステップの8つの比較結果を行に配置して、8ビットのバイナリシーケンスを形成し、それを10進値に変換します。
- 10進数の結果は、中央のピクセルのLBP特性値です。
明らかに、1つのピクセルで2 ^ 8 = 256LBPの特徴値を生成できます
元のLBPは、比較オブジェクトとして固定近傍ピクセルを使用するため、回転の不変性は言うまでもなく、サイズ変換に直面すると堅牢性が失われることがよくあります。
2.2CircularLBPの機能
元のLBPには回転不変性とスケール不変性がないため、改善されています。
CircularLBPの機能では、LBPの基本的な考え方が保持されており、次の説明手順があります。
- グレースケール画像では、特定のピクセルを中心点とし、Rを半径として円を描きます。円の円周で覆われているピクセルは、中心点と比較されるピクセルです。
- 円周で覆われているピクセルが画像にない場合は、差分アルゴリズムを使用する必要があります。これは通常、双線形差分です。
- CircularLBPで記述された円で覆われた隣接ピクセルについて、特定のステップ長に従って角度を回転させて一連のシーケンスを取得し(下図の白い点は1、黒い点は0)、これはに変換されます。 LBP値の場合、各ピクセルには複数のLBP値があります
- 上記のLBP値の中で最小の値を中央のピクセルのCircularLBPフィーチャ値として使用します
セクション3SIFT機能(不変スケール回転)
SIFTは、スケール回転不変の略語で、主に局所的な特徴の記述と抽出に使用されます。SIFT記述子は、画像の回転、スケール変更、スケーリング、明るさによって特徴が変更されたときに強力な堅牢性を備えています。
2.3.1SIFT特徴抽出法
まず、SIFT特徴抽出のフローチャートを直接示し、次に1つずつ分析します。
スケールスペースの確立は、主に2つのステップに分かれています。最初のステップは、画像に対してGaussionピラミッド操作を実行することです。通常のピラミッドがダウンサンプリングされるたびに、1層になりますが、ここではグループと呼ばれます。写真のグループ、それらはファジースケールに従って階層化されます。、2番目のステップは、各グループの上部と下部の画像に対してピクセル差分操作を実行して、ガウス差分ピラミッドDOGピラミッドを取得することです。
フローチャートの2番目の大きなステップは、極値を見つけることです。各オクターブで、各ピクセルの3x3x3近傍で26の近傍ピクセルを探し、その最大値または最小値を見つけます。この極値は一時的にキーポイントです。
3番目の大きなステップは、上記の粗い位置を正確に特定することです。ここでは、サブピクセルレベル差処理は、主に正確なキーポイント位置情報を取得するために使用されます。
4番目のステップは、キーポイントの方向の初期割り当てです。これが回転不変性の基礎です。最初に、各キーポイントが半径3.05σで描画され、円形領域でカバーされるすべてのピクセルが計算され、対応する勾配が計算されます。サイズから勾配方向を取得し、領域の0〜360°の勾配方向ヒストグラムをカウントし、360°を36のビンに分割します。各ビンは10°を表し、ヒストグラムのピークの方向がメインです。キーポイントの方向であり、ピーク値は80です。%の角度はキーポイントの補助方向です。
最後のステップ、つまりキーポイントの正確な方向キャリブレーションが最も重要です。この時点で、正確な位置情報+スケール情報+粗い方向情報が取得されているため、方向を正確に修正する必要があります。以下の通り:
- 回転不変性を強化し、キーポイントを中心として、近傍ピクセルの座標軸をキーポイントの主方向角度に回転させて、新しい座標を取得します。
- 新しい座標で、キーポイントを中心として、16x16ピクセルのウィンドウを取得します。
- ウィンドウでは、4x4ピクセルが1つのセルとして使用され、4x4セルに分割されます。
- 各セルの16ピクセルの勾配ヒストグラムをカウントし、360°を45°で8つのビンに分割します。つまり、各セルは8つの特徴情報を取得できます。
- このキーポイントは、16x16ピクセルの近傍で、合計16x8 = 128の勾配特徴情報が取得されます。つまり、各キーポイントは128次元のSIFT特徴ベクトルを生成します。
2.3.2openCVでのSIFT機能の実装方法
シンプルな演算子APIは、openCVで引き続き使用されます。
cv::xfeatures2d::SIFT::create(int nfeatures = 0, 关键点总个数
int nOctaveLayers =3, octave层数
double contrastThreshold = 0.04, 对比度阈值
double edgeThreshold= 10, 边缘阈值
double sigma=1.6)高斯模糊因子σ
4番目のセクションHOG機能(勾配ヒストグラム)
HOGは、Histograms of OrientedGradientsの略語です。
SVMでのHOGの適用は、従来の画像処理における歩行者検出の分野で大きな成功を収めており、従来の歩行者検出の基礎と言えます。
一般に、歩行者検知では、人それぞれの固有の特性が明らかに異なるため、人体の特性を十分に記述できる記述子が必要であり、HOGはこの基本的な考え方に基づいて設計されています。
HOGオペレーターは、ローカルターゲットの外観と形状は、エッジの勾配または方向密度分布によって適切に記述できると考えています(もちろん、勾配は勾配であり、勾配はエッジに存在することがよくあります)。
HOG特徴抽出のプロセスは、画像の勾配分布ヒストグラムを描画し、アルゴリズムを使用して勾配ヒストグラムを正規化することです。エッジがどこにあるかを効果的に検出するのはこの正規化アルゴリズムです。標準化後、勾配ヒストグラムは次のようになります。特徴ベクトルに圧縮されます。これはHOG特徴記述子であり、大量のエッジ情報を格納し、最終的にSVM分類器の入力として機能します。
HOGをよりよく理解するために、次の図を使用してHOG記述子の処理プロセスを説明してください。
上の図によると、HOG記述子の長さ=ブロックの数✖️ブロックによってカバーされるセルの数✖️各セルのヒストグラム内のビンの数。
画像に複数のDetectionWindowが含まれている場合、画像内のHOG記述子の長さ=ウィンドウの数✖️HOG記述子の長さ
openCVでは、次の歩行者検出の場合など、HOG記述子に関するケースが提供されます。次の場合、HOGDescriptorはHOG記述子のクラス、hogはクラスオブジェクト、このクラスのコンストラクターはデフォルトのコンストラクターです。 .HOGDescriptorクラスにはsvmDetectorのパブリックプロパティがあります。これは、HOG記述子に入力されるSVM分類器の係数値を構成するために使用されます。
上記のhogクラスオブジェクトでは、64 * 128、DetectionWindow、16 * 16ブロック、8 * 8セルがデフォルトで作成され、各セルのHOGには9つのビンが含まれています。
HOGDescriptorクラスの詳細については、https://docs.opencv.org/3.4.10/d5/d33/structcv_1_1HOGDescriptor.html#ac0544de0ddd3d644531d2164695364d9を参照してください。
ケースの説明:
Mat gray;
Mat dst;
resize(src, dst, Size(64,128));
cvtColor(dst, gray, COLOR_BGR2GRAY);
HOGDescriptor detector(Size(64,128), Size(16,16), Size(8,8), Size(8,8), 9);
vector<float> descriptors;
vector<Point> locations;
detector.compute(gray, descriptors, Size(0,0),Size(0,0),locations);
cout<<“result number of HOG = “<<descriptors.size()<<endl;
APIの紹介:
// HOG描述子
cv2.HOGDescriptor( win_size = (64, 128), //前5个最常用
block_size = (16, 16),
block_stride = (8, 8), //这个是块之间的x距离和y距离
cell_size = (8, 8),
nbins = 9,
win_sigma = DEFAULT_WIN_SIGMA,
threshold_L2hys = 0.2,
gamma_correction = true,
nlevels = DEFAULT_NLEVELS)
// 计算描述子数值类方法
HOGDescriptor::compute(image) //输入图像
virtual void cv::HOGDescriptor::compute
(
InputArray img,
std::vector< float > &descriptors,//输出HOG描述子
Size winStride = Size(), //窗口与窗口之间的距离
Size padding = Size(), //窗口的步长
const std::vector< Point > &locations = std::vector< Point >()d
)const
セクション5DPM機能(変形可能なコンポーネントモデル)
DPM特徴は、変形可能パーツモデルの変形可能パーツモデルです。DPMは、従来のターゲット検出アルゴリズムの上限です。これは、HOG特徴検出アルゴリズムの拡張と改良です。HOGは、高緯度の特徴ベクトルをもたらすことが多いため、これらの特徴ベクトルは、 SVM分類器の入力。、多くの場合、大量の計算が生成されます。HOGは通常PCA主成分分析を使用して次元を削減しますが、DPMはHOGアルゴリズムの改善として、PCAを近似する次元削減方法を採用しています。
まず、前提を定めます。DPMは勾配方向を180度と360度で符号付きと符号なしに分けます。符号は正と負の符号があることを示し、0〜360度の角度範囲の勾配は次のように見なされます。 18に分割される方向性ビン0〜180は、方向性のない9つのビンに分割されます。明らかに方向性はなく、各ビンの角度は20度です。
プロセスの理解には逸脱があるかもしれませんが、最終的な結果は同じです。別の理解の角度は次のとおりです。
- HOGのセルのアイデアを使用して、8✖️8ピクセルごとにセルが作成され、画像が複数のセルに分割され、すべてのピクセルの勾配サイズと方向が計算され、各セルのすべてのピクセルの勾配ヒストグラムがカウントされます。
- 図1234に示すように、各セルの4つの近傍にある4つのセル、つまり対角線上の4つのセルの場合(上の図の緑色のブロックはセルの内部状況であり、黄色のブロックは単純なストロークです)セルの)、およびセルと4つの隣接セルドメインの4つのセルは、正規化処理に対応します。次の手順を参照してください。
- 中央のセルと4つの近傍の4つのセルは、それぞれ正規化された処理ステップです。
- 符号付き勾配の場合:中央のセルとi番目のセル(i = 1,2,3,4)の勾配方向ヒストグラムを計算します。符号付き勾配方向ヒストグラムには18個のビンがあり、4個のセルのヒストグラムが累積されます。 18個のビンは18個の機能です
- 符号なし勾配の場合:図の右側では、上の図のオレンジ色のブロック、つまり36個の特徴が行列と見なされ、行の合計と列の合計が実行され、合計4+になります。 9 = 13の機能が取得されます**
- 正規化後、合計18 + 13 = 31の特徴が取得されます。つまり、8✖️8ピクセルの各セルが31次元の特徴ベクトルを生成します。
DPM検出
次の図に示すように、ターゲット検出アルゴリズムの上限として、DPMには独自の検出プロセスがあります。