[youcansの200のOpenCVルーチン]145。形態学的エッジとコーナー検出

「youcans'OpenCVルーチン200」シリーズへようこそ。継続的に更新される「youcans'OpenCV学習コース」シリーズに
注目して、引き続き更新してください。


[youcansの200のOpenCVルーチン]145。形態学的エッジとコーナー検出


5.7形態学的エッジおよびコーナー検出

エッジとコーナーは、画像の重要な特徴を保持するだけでなく、情報量を大幅に削減するため、情報エントロピーが大きくなります。視野は重要な役割を果たします。コーナー検出の方法は、主に画像のエッジまたは画像のグレースケールに基づいており、後者は、ハリス演算子、モラベック演算子、スーザン演算子など、より広く使用されています。

このセクションでは、形態ベースのエッジ検出とコーナー検出の方法を紹介します。コーナーは水平方向と垂直方向の両方で大きく異なります。つまり、x方向とy方向の勾配が大きく、エッジはx方向とy方向のいずれかで大きな勾配があり、平坦な領域は水平方向と垂直方向の両方にあります。方向。勾配は小さいです。

形態学的エッジ検出の原理は、画像内のオブジェクトが拡大すると周囲に拡大し、侵食すると縮小し、変更された領域はオブジェクトのエッジでのみ発生することです。画像の形態勾配演算は、拡張された画像と侵食された画像の差であり、画像の輪郭を取得することができます。これは通常、オブジェクトのエッジを抽出するために使用されます。

形態学的コーナー検出の原理は、元の画像のエッジが変化せず、十字、ダイヤモンド、正方形、X形状などのさまざまな形状の構造要素の膨張と腐食によって焦点のみが侵食されることです。

このケースは、形態学的方法の機能を実証するためだけのものであり、効率的で正確なコーナー検出方法ではないことに注意してください。


ルーチン10.36:グレースケール形態に基づくエッジとコーナーの検出

形態学的エッジ検出の原理は、画像内のオブジェクトが拡大すると周囲に拡大し、腐食すると縮小し、変更された領域はオブジェクトのエッジでのみ発生することです。画像の形態勾配演算は、拡張された画像と侵食された画像の差であり、画像の輪郭を取得することができます。これは通常、オブジェクトのエッジを抽出するために使用されます。

(1)まず、十字型の構造要素を使用して拡大し、画像を水平方向と垂直方向に拡大しますが、45度と135度の斜め方向には拡大せず、腐食もあります。 45度と135度の斜め方向の腐食。

(2)まず、X字型の構造要素を使用して拡大し、画像を水平、垂直、45度、135度の斜め方向に拡大します。次に、正方形のチェックを使用して拡大結果を腐食し、コーナーが元の画像のが復元され、水平方向の垂直方向のエッジが侵食されます。

(3)2を引いて、コーナー検出結果を求めます。

    # 10.36: 基于灰度形态学的拐角检测
    # 基于灰度形态学的复杂背景图像重建
    img = cv2.imread("../images/imgBuilding1.png", flags=1)
    imgSign = img.copy()
    imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 图片格式转换:BGR(OpenCV) -> Gray
    # ret, imgBin = cv2.threshold(imgGray, 127, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)  # 二值化处理

    # 边缘检测
    element = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    imgEdge = cv2.morphologyEx(imgGray, cv2.MORPH_GRADIENT, element)  # 形态学梯度

    # 构造 5×5 结构元素,十字形、菱形、方形、X 型
    cross = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))  # 十字型结构元
    square = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 5))  # 矩形结构元
    xShape = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))  # X 形结构元
    diamond = cv2.getStructuringElement(cv2.MORPH_CROSS, (5, 5))  # 构造菱形结构元
    diamond[1, 1] = diamond[3, 3] = 1
    diamond[1, 3] = diamond[3, 1] = 1
    print(diamond)

    imgDilate1 = cv2.dilate(imgGray, cross)  # 用十字型结构元膨胀原图像
    imgErode1 = cv2.erode(imgDilate1, diamond)  # 用菱形结构元腐蚀图像

    imgDilate2 = cv2.dilate(imgGray, xShape)  # 使用 X 形结构元膨胀原图像
    imgErode2 = cv2.erode(imgDilate2, square)  # 使用方形结构元腐蚀图像

    imgDiff = cv2.absdiff(imgErode2, imgErode1)  # 将两幅闭运算的图像相减获得角点
    retval, thresh = cv2.threshold(imgDiff, 40, 255, cv2.THRESH_BINARY)  # # 二值化处理

    # 在原图上用半径为 5 的圆圈标记角点
    for j in range(thresh.size):
        y = int(j / thresh.shape[0])
        x = int(j % thresh.shape[0])
        if (thresh[x, y] == 255):
            cv2.circle(imgSign, (y, x), 5, (255, 0, 255))

    plt.figure(figsize=(9, 6))
    plt.subplot(131), plt.title("Origin"), plt.axis('off')
    plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    plt.subplot(132), plt.title("Edge"), plt.axis('off')
    plt.imshow(imgEdge, cmap='gray', vmin=0, vmax=255)
    plt.subplot(133), plt.title("Corner"), plt.axis('off')
    plt.imshow(cv2.cvtColor(imgSign, cv2.COLOR_BGR2RGB))
    plt.tight_layout()
    plt.show()

ここに画像の説明を挿入


(このセクションの終わり)


著作権表示:

Youcans @ xuptのオリジナル作品、再版にはオリジナルのリンクを付ける必要があります:(https://blog.csdn.net/youcans/article/details/123786155)

Copyright 2022 youcans、XUPT
Crated:2022-3-30


「youcans'OpenCVルーチン200」シリーズへようこそ。継続的に更新される「youcans'OpenCV学習コース」シリーズに
注目して、引き続き更新してください。

[YoucansのOpenCVルーチン200]01.画像の読み取り(cv2.imread)
[youcansのOpenCVルーチン200] 02.画像の保存(cv2.imwrite)
[youcansのOpenCVルーチン200] 03.画像の表示(cv2.imshow)
[youcansのOpenCVルーチン200] 04. matplotlib(plt.imshow)
[youcansのOpenCVルーチン200] 05.画像属性(np.shape)
[youcansの200OpenCVルーチン]06。ピクセル編集(img.itemset)
[youcansのOpenCVルーチン200] 07.画像の作成(np.zeros)
[youcansのOpenCVルーチン200] 08.画像の複製(np.copy)
[YoucansのOpenCVルーチン200] 09.画像のトリミング(cv2.selectROI)
[youcansのOpenCVルーチン200] 10.画像のステッチ( np.hstack)
[youcansのOpenCVルーチン200] 11.画像チャネルの分割(cv2.split)
[youcansの200OpenCVルーチン]12。画像チャネルのマ​​ージ(cv2.merge) [youcans
の200OpenCVルーチン]13。画像の追加(cv2 .add)
[youcansの200のOpenCVルーチン] 14.画像とスカラーの追加(cv2.add)
[youcansの200のOpenCVルーチン]15。画像の加重加算(cv2.addWeight)
[youcansの200のOpenCVルーチン]16。異なるサイズの画像の追加[youcansの
200のOpenCVルーチン]17。2つの画像勾配切り替え
[youcansのOpenCVルーチン200 ]18.画像マスクの追加
[youcansのOpenCVルーチン200]19.画像円形マスク
[youcansのOpenCVルーチン200]20.画像プレスビット操作
[youcansのOpenCVルーチン200]21.画像オーバーレイ
[youcansのOpenCVルーチン200]22.画像追加非-中国語のテキスト
[youcansのOpenCVルーチン200]23.画像の追加中国語のテキスト
[youcansの200OpenCVルーチン]24。画像のアフィニティ変換
[youcansのOpenCVルーチン200]25.画像の変換
[youcansのOpenCVルーチン200]26.画像の回転(中心原点)
[youcansの200OpenCVルーチン]27。画像の回転(任意の点を中心とする)
[youcansのOpenCVルーチン200] 28.画像の回転(直角回転)
[youcansのOpenCVルーチン200] 29.画像の反転(cv2.flip)
[youcansの200のOpenCVルーチン]30。画像スケーリング(cv2.resize)
[YoucansのOpenCVルーチン200]31.画像ピラミッド(cv2.pyrDown)
[youcansのOpenCVルーチン200] 32.画像の歪み(ミスカット)
[youcansのOpenCVルーチン200]33.画像複合変換
[youcansのOpenCVルーチン200]34.画像投影変換
[youcansのOpenCVルーチン200]35.画像投影変換(境界の塗りつぶし)
[youcansのOpenCVルーチン200]36.カルテシアン座標と極座標変換
[youcansのOpenCVルーチン200]37.画像のグレースケール処理と2値化
[youcansのOpenCVルーチン200]38。画像の逆色変換(画像反転)
[youcansのOpenCVルーチン200記事]39。画像グレースケールの線形変換
[youcansのOpenCVルーチン200記事]40。画像の断片的な線形グレースケール変換
[youcansのOpenCVルーチン200記事]41。画像グレースケール変換(灰色度レベルの階層化)
[youcansのOpenCVルーチン200] 42.画像のグレースケール変換(ビット平面の階層化)
[youcansのOpenCVルーチン200] 43.画像のグレースケール変換(対数変換)
[Youcans200のOpenCVルーチンの記事]44。画像のグレースケール変換(ガンマ変換)
[youcansのOpenCVルーチンの200記事]45。画像のグレースケールヒストグラム
[youcansのOpenCVルーチンの200記事]46。ヒストグラム等化の変更
[YoucansのOpenCVルーチン200記事]47。画像強調-ヒストグラムマッチング
[youcansのOpenCVルーチン200記事]48。画像強調-色ヒストグラムマッチング
[youcansのOpenCVルーチン200記事]49。画像強調-ローカルヒストグラム処理
[youcansのOpenCVルーチン200記事] ]50.画像強調-ヒストグラム統計画像強調
[youcansのOpenCVルーチン200記事]51。画像強調-ヒストグラム逆追跡
[youcansのOpenCVルーチン200記事]]52.画像相関および畳み込み操作
[youcansのOpenCVルーチン200]53.Scipyの実装2次元画像畳み込み
[youcansのOpenCVルーチン200]54.OpenCVは画像2次元畳み込みを実装します
[youcansのOpenCV200ルーチン]55。分離可能な畳み込みカーネル
[youcansのOpenCVルーチン200]56.ローパスボックスフィルター
[youcansのOpenCVルーチン200] 57.ローパスガウスフィルター
[youcansのOpenCV例]Cheng200記事]58。非線形フィルタリング-メディアンフィルタリング
[youcansのOpenCVルーチン200記事]59。非線形フィルタリング-バイラテラルフィルタリング
[youcansのOpenCVルーチン200記事]60。非線形フィルタリング-共同バイラテラルフィルタリング
[OpenCVルーチンの200記事]61。ガイド付きフィルター
[YoucanのOpenCVルーチンの200記事]62。画像の鮮明化-パッシベーションマスキング
[YoucansのOpenCVルーチン200]63.画像の鮮鋭化-ラプラシアン演算子
[youcansのOpenCVルーチン200]64.画像の鮮鋭化-Sobel演算子
[youcansのOpenCVルーチン200]65.画像の鮮鋭化-Scharr演算子
[youcansのOpenCVルーチン200]66.画像フィルタリング低-pass / high-pass / band-stop /band-pass
[youcansのOpenCVルーチン200]67.空間ドメイン画像強調の包括的なアプリケーション
[YoucansのOpenCVルーチン200の記事]68。空間ドメイン画像強調の包括的なアプリケーション
[youcansのOpenCVルーチン200記事]69。連続非周期信号のフーリエ係数
[youcansのOpenCVルーチン200記事]70。[youcansのOpenCVルーチン200]の1次元連続関数フーリエ変換
71.連続関数のサンプリング
[youcansのOpenCVルーチン200]72.One -次元離散フーリエ変換
[youcansのOpenCVルーチン200]73.二次元連続フーリエ変換
[youcansのOpenCVルーチン200]74.画像アンチエイリアシング
[youcansのOpenCVルーチン200]75.Numpyは画像フーリエ変換を実装します
[youcansのOpenCVルーチン200]76 .OpenCVは画像フーリエ変換を実装します
[youcansのOpenCVルーチン200]77.OpenCVは高速フーリエ変換を実装します
[YoucansのOpenCVルーチン200]78.周波数領域画像フィルタリングの基本
[youcansのOpenCVルーチン200]79.周波数領域画像フィルタリングの基本手順
[youcansのOpenCVルーチン200]80.周波数領域画像フィルタリングの詳細手順
[youcansのOpenCVルーチン200] 81.周波数領域ガウス低域フィルター
[youcansのOpenCVルーチン200]82.周波数領域バターワース低域フィルター
[youcansのOpenCVルーチン200]83.周波数領域低域フィルタリング:印刷されたテキスト文字の修復
[youcansのOpenCVルーチン200] 84 。ローパスフィルターからハイパスフィルターを取得する
[youcansのOpenCVルーチン200]85.周波数領域ハイパスフィルターの適用
[youcans200記事のOpenCVルーチン]86。周波数領域フィルターの適用:指紋画像処理
[200記事youcansのOpenCVルーチンの概要]87。周波数領域のパッシベーションマスキング[youcansのOpenCVルーチン200
件]88。周波数領域のラプラシアンハイパスフィルタリング
[youcansのOpenCVルーチン200]89.バンドストップフィルターの転送機能
[youcans OpenCVルーチン200]90.周波数領域ノッチフィルター
[youcansのOpenCVルーチン200]91.ガウスノイズ、レイリーノイズ、アイルランドノイズ
[youcansのOpenCVルーチン200] 92.指数ノイズ、均一ノイズ、ソルトアンドペッパーノイズ
[youcansのOpenCVルーチン200] 93.ノイズモデルのヒストグラム
[YoucansのOpenCVルーチン200]94.算術平均フィルター
[YoucansのOpenCVルーチン200]95.幾何平均フィルター
[YoucansのOpenCVルーチン200]96.調和平均フィルター
[YoucansのOpenCV200ルーチン]97。逆調和平均フィルター
[YoucansのOpenCVルーチン200 ]98.統計的ソートフィルター
[youcansのOpenCVルーチン200]99.修正されたアルファ平均フィルター
[youcansのOpenCVルーチン]200記事]100。適応ローカルノイズリダクションフィルター
[youcansのOpenCVルーチン200記事]101。適応メディアンフィルター
[youcansのOpenCVルーチン200記事]102。ノッチバンドストップフィルターの転送機能
[YoucansのOpenCVルーチン200]103.周期的なノイズ干渉を排除するノッチバンドストップフィルター
[youcansのOpenCVルーチン200]104.モーションブラー劣化モデル
[youcansのOpenCVルーチン200] 105.乱流ぼけ劣化モデル
[YoucansのOpenCVルーチン200]106.劣化した画像の逆フィルタリング
[youcansのOpenCVルーチン200]107.劣化した画像のWienerフィルタリング
[youcansのOpenCVルーチン200]108.制約付き最小二乗フィルタリング
[ 200YoucansのOpenCVルーチン]109.幾何平均フィルタリング
[YoucansのOpenCVルーチン200記事]110。投影と雷電変換
[youcansのOpenCVルーチン200記事]111。雷電変換逆投影再構成画像
[youcansのOpenCVルーチン200記事]112。フィルター処理された逆投影再構成画像
[youcansによる200OpenCVルーチン]113.形態学的操作の腐食
[youcansによる200のOpenCVルーチン]114
。形態学的操作の拡張[youcansによる200のOpenCVルーチン]115。形態学的操作のオープン操作
[YoucansのOpenCVルーチン200の記事]116。形態学的操作のクローズド操作
[ youcansのOpenCVルーチン200記事]117。形態学的操作のトップハット操作
[youcansのOpenCVルーチン200記事]118。形態学的操作の下部ハット操作
[youcansのOpenCVルーチン200記事]119。画像の形態学的勾配
[youcansのOpenCVルーチン200記事] ]120.ヒット-ヒット-ミス変換
[youcansのOpenCVルーチン200記事]121。hit-特徴認識に失敗
[youcansのOpenCVルーチン200]122.形態学的アルゴリズムの境界抽出
[youcansのOpenCVルーチン200]123.形態学的な穴埋めアルゴリズム
[youcansのOpenCVルーチン200]124.穴埋めのためのフラッディングアルゴリズム[youcansの200OpenCV
ルーチン]125。形態学的アルゴリズムによる接続されたコンポーネントの抽出
[YoucansのOpenCVルーチン200]126.形態学的アルゴリズム
の凸包[youcansのOpenCVルーチン200]127.形態学的アルゴリズムの改良
[youcansのOpenCVルーチン200]128.形態学的アルゴリズムのスケルトン(skimage)
[YoucansのOpenCVルーチン200]129。形態学的アルゴリズムのスケルトン(再構築操作)
[youcansのOpenCVルーチン200]130.水平線と垂直線の形態学的抽出
[youcansのOpenCVルーチン200]131.垂直線文字抽出の形態学的再構築
[youcansのOpenCVルーチン200]132.形態学的再構築穴埋めアルゴリズム
の概要[youcansのOpenCVルーチン200]133.境界クリアの形態学的再構成
[youcansのOpenCVルーチン200]記事]134。形態学的再構成のセルカウント[200YoucansのOpenCVルーチン
]135。形態学的再構成の粒度決定
[200ユーカンのOpenCVルーチン]136。グレイスケール侵食とグレイスケール
拡張[ユーカンのOpenCV例]プログラム200記事]137。グレイスケールオープン操作とグレイスケールクローズ操作の原理
[ユーカンのOpenCVルーチン200記事]138。グレイスケールオープン操作とグレイスケールクローズ操作
[ youcansのOpenCVルーチン200記事]139。影を修正するためのグレイスケールトップハット変換
[youcansのOpenCVルーチン200記事]140。照明を修正するためのグレイスケールボトムハット変換
[YoucansのOpenCVルーチン200]141.グレースケールボトムハット変換の3D地形図
[youcansのOpenCVルーチン200]142.グレースケール形態に基づく画像平滑化
[YoucansのOpenCVルーチン200]143.グレースケール形態に基づく粒子サイズの決定
[YoucansのOpenCVルーチン200 ]144.グレースケール形態に基づくテクスチャセグメンテーション
[youcansのOpenCVルーチン200]145.形態学的エッジおよびコーナー検出

おすすめ

転載: blog.csdn.net/youcans/article/details/123786190