パターンマッチングプロファイル:
パターンマッチングは - >マッチング画像と画像全体が、一般的に物体検出タスクで使用される最も類似する部分、であることがわかりました。パターンマッチングは、最も基本的な物体検出方法でタスクより良い結果を行うためのオブジェクト検出畳み込みニューラルネットワークを使用するが、しかし、それは非常に重要な、非常に基本的なものです。
第二に、パターンマッチングアルゴリズム:
原画像は、画像に一致する、I(H X W)であるT(高さ×幅)。
範囲(HH)におけるjに対する画像I :, 1.:(Wwの)iに対する範囲です。ピクセルは、元画像の演算部を移動させる過程においてI [J:J + H、I、W I +]類似画像T Sと照合します
注:このようなパターンマッチングなどの操作が、ラスタ走査(ラスタスキャン)と呼ばれる画像、又はスライディングウィンドウスキャン(スライディングウィンドウ)の左上から右の順序を見つけることを始めます。
2. Sは一致した位置の局所的な最大値または最小値です。
、SAD(絶対差の合計:絶対誤差)、NCC(正規化相互相関:正規化相互相関):主にSSD(二乗誤差の合計二乗差の合計)を計算S、ZNCC(ゼロ平均正規化相互相関:ゼロ平均正規化相互相関)は、異なるアプローチのために、我々は、Sの最大値または最小値を選択し、原画像の値Sに対応する位置を見つける必要があります。
III。種々の標準パターンマッチング(異なるS)
S = SSD(差分自乗の和)、Sは最小値をとります。
( - TEMP)** 2(IMG [X + Y重量:Y +のHt、X])_v = np.sum:Pythonは、コアコードを達成しました
Sは、= SAD(絶対差の合計)は、Sは最小値をとります。
_v = np.sum( - TEMP)np.abs(IMG [X + Y重量:::Y +のHt、X])Pythonは、コアコードを達成しました
S = NCC(正規化相互相関)は、Sが最大値をとります。2つの画像の類似度が得られ、Sの範囲は[-1,1]、Sは変化に非常に敏感です。
_v = np.sum(IMG [Y:Y +のHt、X:X +重量] * TEMP)Pythonは、コアコードを達成しました
_V / =(np.sqrt(np.sum(IMG [Y:Y +のHt、X:X + WT] ** 2))* np.sqrt(np.sum(TEMP ** 2)))
S = ZNCC(ゼロ平均正規化相互相関)、Sは最大値をとります。これは、正規化相互相関よりも敏感です。私はM_Iある画像の平均、平均画像Tがm_tあります。Sは、範囲[-1,1]です。
Pythonは、コアコードを達成:_v = np.sum((IMG [Y:Y +のHt、X:X +重量] -mi)*(TEMP-MT))
_V / =(np.sqrt(np.sum((IMG [Y:Y +のHt、X:X +重量] -mi)** 2))* np.sqrt(np.sum((TEMP-MT)* * 2)))
四。Pythonはゼロ平均正規化相互相関を達成します。読者が類推によって学ぶことができる別のS、
1インポートCV2 としてCV 2 3インポートnumpyのようNP 4 5 #読み取られた画像 6 7 IMG = cv.imread(" ../bird.png " .astype(np.float32)) 8 9 H、W、C = IMG。形状 10 11マイル= np.mean(IMG) 12 13 #読むtemplete画像 14 15 TEMP = cv.imread(" ../bird_e.png " ).astype(np.float32) 16 17のHt、重量、のCt = TEMP .shape 18 19 = MTをnp.mean(TEMP) 20 21 #Templete整合 22 23 I、J = - 1、 - 1つの 24 25 - V = 1 26 27 のために Y における範囲(H- :HT) 28 29 のために X における範囲(W- 重量): 30 31 _v = np.sum((IMG [Y:Y +のHt、X:X +重量] -mi)*(temp- MT)) 32 33 _v / =(np.sqrt(np.sum(( IMG [Y:Y +のHt、X:X +重量] -mi)** 2))* np.sqrt(np.sum((TEMP-MT)** 2 ))) 34 35 なら _v>V: 36 37 V = _v 38 39 I、J = X、Y 40 41 アウト = img.copy() 42 43 cv.rectangle(アウト、PT1 =(i、j)は、PT2 =(+重量I、J + HT)、色=(0、0、255)、厚さ= 1 ) 44 45 アウト = うち.astype(np.uint8) 46 47 #保存結果 48 49 cv.imwrite(" out.jpg "、アウト) 50 51cv.imshow(" 結果"、アウト) 52 53 cv.waitKey(0 ) 54 55 cv.destroyAllWindows()
V.結果:
六。パイソン=誤差絶対値和Sを達成。読者が類推によって学ぶことができる別のS、
1 インポートCV2 2 3インポートnumpyのようNP 4 5 #読み取り画像 6 7 IMG = cv2.imread(" ../baby.png " ).astype(np.float32) 8 9 H、W、C = img.shape 10 11 #読み取りtemplete画像 12 13 TEMP = cv2.imread(" ../baby_m.png " ).astype(np.float32) 14 15のHt、重量、のCt = temp.shape 16 17 #templete一致 18 19 Iは、J = - 1、 -1 20 21 V = 255 * H * W * C 22 23 用の Y における範囲(H- HT): 24 25 のために X における範囲(W- WT): 26 27 _v = np.sum(np.abs(IMG [ Y:Y +のHt、X:X +重量] - TEMP)) 28 29 なら _v < V: 30 31 V = _v 32 33 I、J = X、Y 34 35 アウト = img.copy() 36 37(#0、0、255 )代表红色 38 39 cv2.rectangle(アウト、PT1 =(i、j)は、PT2 =(I + Wtが、J + HT)、色=(0、0、255)、厚さ= 2 ) 40 41 アウト = うち.astype(np.uint8) 42 43 #保存結果 44 45 cv2.imwrite(" out.jpg "、アウト) 46 47 cv2.imshow(" 結果"、アウト) 48 49 cv2.waitKey(0 ) 50 51 cv2.destroyAllWindows()
七つの結果:
最後の言葉で書かれエイト:
この記事を読んでいただきありがとうございます、あなたが良い感じている場合、あなたはああのように指すことができます!
ナイン著作権:
作者の許可なしに転載しませ盗作、剽窃深刻なケースを行ってください、著者はその法的責任を追及検討し、作成は容易ではありません、ご理解とご協力をお願いいたします!