> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/workflows/ja/burokku/blocks/classical-computer-vision/sift.md).

# SIFT

SIFT（Scale-Invariant Feature Transform）を使用して画像内の特徴的な視覚特徴を検出・記述し、スケール、回転、照明条件に対して不変な128次元の特徴記述子を持つキーポイント（関心点）を抽出することで、特徴ベースの画像マッチング、物体認識、画像類似性検出のワークフローを可能にします。

## このブロックの仕組み

このブロックは、SIFTを使用して画像内の特徴的な視覚特徴を検出し、検出された各キーポイントに対する特徴記述子を計算します。このブロックは次の処理を行います。

1. 特徴検出のために解析する入力画像を受け取ります
2. 画像をグレースケールに変換します（SIFTは効率性と堅牢性のため、グレースケール画像で動作します）
3. OpenCVのSIFT実装を使用してSIFT検出器を作成します
4. detectAndComputeを使用して、キーポイントと記述子を同時に検出します：
   * **キーポイント検出**：異なる観察条件下でも安定している、画像内の特徴的な関心点（キーポイント）を識別します
   * キーポイントはスケールの複数段階（スケール空間画像のピラミッド）で検出され、スケール変化に対応します
   * キーポイントは回転変化に対応するため、向きの割り当て付きで検出されます
   * 各キーポイントには、位置（x, y座標）、サイズ（検出されたスケール）、角度（向き）、response（強さ）、octave（スケールレベル）、class\_id という属性があります
   * **記述子計算**：キーポイント周辺の局所画像領域を記述する、各キーポイントに対する128次元の特徴記述子を計算します
   * 記述子は局所領域の勾配情報を符号化し、照明変化に対して識別性と堅牢性を持たせます
   * 記述子は正規化されており、照明変化に対して部分的に不変です
5. 可視化のために元画像にキーポイントを描画します：
   * OpenCVのdrawKeypointsを使用して、画像上にキーポイントのマーカーを重ねて表示します
   * キーポイントの位置、向き、スケールを可視化します
   * 特徴がどこで検出されたかを示す視覚表現を作成します
6. キーポイントを辞書形式に変換します：
   * キーポイントの属性（位置、サイズ、角度、response、octave、class\_id）を辞書に抽出します
   * 下流の処理や分析でキーポイントデータを利用可能にします
7. キーポイントを描画した画像、キーポイントデータ（辞書形式）、および記述子（numpy配列）を返します

SIFT特徴はスケール不変（異なるズームレベルで機能）、回転不変（回転した画像に対応）、かつ部分的に照明不変（照明変化に堅牢）です。これにより、異なる視点、距離、角度、照明条件で撮影された複数の画像間で同じ物体やシーンを照合する際に非常に効果的です。128次元の記述子は局所画像領域に関する豊富な情報を提供し、堅牢な特徴マッチングと比較を可能にします。

## 一般的な使用例

* **特徴ベースの画像マッチング**：異なる画像間で物体やシーンを照合するための特徴を検出します（例：複数画像内の物体を照合する、視点をまたいで対応する特徴を見つける、画像ペア内の一致領域を特定する）。これにより、特徴ベースのマッチングワークフローが可能になります
* **物体認識**：SIFT特徴を物体認識と識別に使用します（例：特徴マッチングを使用して物体を認識する、特徴的な特徴から物体を特定する、分類のために物体特徴を照合する）。これにより、特徴ベースの物体認識ワークフローが可能になります
* **画像類似性検出**：SIFT特徴を比較して類似画像を検出します（例：データベース内で類似画像を見つける、重複画像を検出する、一致するシーンを特定する）。これにより、画像類似性ワークフローが可能になります
* **分析のための特徴抽出**：さらなる分析のために画像から特徴的な特徴を抽出します（例：処理用に特徴を抽出する、画像特性を分析する、興味深い領域を特定する）。これにより、特徴抽出ワークフローが可能になります
* **視覚的ローカライゼーション**：SIFT特徴を視覚的ローカライゼーションとマッピングに使用します（例：シーン内の物体を位置特定する、フレーム間で特徴を追跡する、特徴対応関係をマッピングする）。これにより、視覚的ローカライゼーションワークフローが可能になります
* **画像位置合わせ**：SIFT特徴の対応関係を使用して画像を整列します（例：画像を位置合わせしてスティッチングする、異なる視点からの画像を整列する、位置合わせのために画像を照合する）。これにより、画像位置合わせワークフローが可能になります

## 他のブロックへの接続

このブロックは画像を受け取り、SIFTキーポイントと記述子を生成します：

* **画像入力ブロックの後に** 入力画像からSIFT特徴を抽出するために使用します（例：カメラフィード内の特徴を検出する、画像入力から特徴を抽出する、画像内の特徴を分析する）。これにより、SIFT特徴抽出ワークフローが可能になります
* **前処理ブロックの後に** 前処理済み画像から特徴を抽出するために使用します（例：フィルタリング後に特徴を検出する、強調された画像から特徴を抽出する、前処理後に特徴を分析する）。これにより、前処理済み特徴抽出ワークフローが可能になります
* **SIFT比較ブロックの前** 画像比較のためのSIFT記述子を提供するために使用します（例：マッチング用に記述子を提供する、比較用に特徴を準備する、類似性検出用に記述子を供給する）。これにより、SIFTベースの画像比較ワークフローが可能になります
* **フィルタリングまたはロジックブロックの前に** 特徴数や属性を意思決定に使用するもの（例：特徴数に基づいてフィルタリングする、検出された特徴に基づいて判断する、特徴属性に基づいてロジックを適用する）。これにより、特徴ベースの条件分岐ワークフローが可能になります
* **データ保存ブロックの前** 特徴データを保存するために使用します（例：キーポイントと記述子を保存する、特徴情報を保存する、分析用に特徴データを記録する）。これにより、特徴データ保存ワークフローが可能になります
* **可視化ブロックの前** 検出された特徴を表示するために使用します（例：キーポイントを可視化する、特徴の位置を表示する、特徴分析結果を示す）。これにより、特徴可視化ワークフローが可能になります

### 型識別子

ステップで次の識別子を使用してください `"type"` フィールド： `roboflow_core/sift@v1` ワークフローにこのブロックをステップとして追加するには。

### プロパティ

| **名前** | **型** | **説明**                  | 参照 |
| ------ | ----- | ----------------------- | -- |
| `name` | `str` | このステップの一意の識別子を入力してください。 | ❌  |

この **参照** 列は、で利用可能な動的値を使ってプロパティをパラメータ化できる可能性を示します `ワークフロー` 実行時。参照 *バインディング* 詳細は。

### 入力と出力のバインディング

利用可能な接続は、そのバインディング種別によって異なります。どのバインディング種別が `SIFT` のバージョン `v1` あるか確認してください。

<details>

<summary>入力と出力のバインディング</summary>

* 入力
  * `image` ([*`image`*](/workflows/ja/gaido/developer-guide/kinds/image.md)）：SIFT特徴検出のために解析する入力画像。画像はSIFT処理のために内部でグレースケールに変換されます。SIFTは、テクスチャとディテールが十分にある画像で最も効果的に動作します。豊かな視覚的内容（エッジ、コーナー、パターン）を持つ画像は、均一または滑らかな画像よりも多くのキーポイントを生成します。検出された各キーポイントには、128次元の記述子が計算されます。出力には、可視化のためにキーポイントを描画した画像、キーポイントデータ（位置、サイズ、角度、response、octave）、および照合と比較のための記述子配列が含まれます。SIFT特徴はスケールおよび回転不変であるため、異なる視点や条件間での照合に効果的です。.
* 出力
  * `image` ([`image`](/workflows/ja/gaido/developer-guide/kinds/image.md)): ワークフロー内の画像。
  * `キーポイント` ([`image_keypoints`](/workflows/ja/gaido/developer-guide/kinds/image-keypoints.md)）：古典的なコンピュータビジョン手法によって検出された画像キーポイント。
  * `記述子` ([`numpy_array`](/workflows/ja/gaido/developer-guide/kinds/numpy-array.md))：Numpy 配列。

</details>

<details>

<summary>JSON 定義の例</summary>

```json
{
	    "name": "<your_step_name_here>",
	    "type": "roboflow_core/sift@v1",
	    "image": "$inputs.image"
	}
```

</details>
