# 画像を前処理する

前処理により、データセットが標準形式になっていることを保証します（例: すべての画像が同じサイズであること）。この手順は、モデルを学習する前にデータセットの一貫性を確保するために不可欠です。

前処理は、Train、Valid、Test セット内のすべての画像に適用されます（ [Augmentations](https://docs.roboflow.com/roboflow/roboflow-jp/datasets/dataset-versions/image-augmentation)とは異なり、こちらは Train セットにのみ適用されます）。

Roboflow プラットフォームでは、次の前処理オプションを利用できます:

* Auto-Orient
* Resize
* Grayscale
* Auto-Adjust Contrast
* Isolate Objects
* Static Crop
* Tile
* Modify Classes
* Filter Null
* Filter by Tag

各オプションについて、以下で説明します。

### Auto-Orient

Auto-orient は画像の EXIF データを削除し、ディスク上に保存されているのと同じ向きで画像が表示されるようにします。

EXIF データは、特定の画像の向きを決定します。（Mac の Preview などの）アプリケーションはこのデータを使って、ディスク上での保存向きが異なっていても、画像を特定の向きで表示します。 [**こちら**](https://news.ycombinator.com/item?id=21207411) の Hacker News のトップページでの議論を参照してください。これがオブジェクト検出モデルを静かに台無しにする可能性があります。

* Roboflow では、これを有効のままにしておき、推論時に画像がどのようにモデルへ入力されているかを確認することを推奨しています。
* 画像を auto-orient すべきかどうかについて詳しく知りたい場合は、 [ブログをご覧ください](https://blog.roboflow.com/exif-auto-orientation/).

### Resize

Resize は画像サイズを変更し、必要に応じて希望の寸法にスケーリングします。注釈は比例して調整されます（下記の「fill」の場合を除く）。

現在、サポートしているのは縮小のみです。用途に応じて、 [どの resize オプションが最適か](https://blog.roboflow.com/you-might-be-resizing-your-images-incorrectly/).

* **Stretch to:** 画像を、希望するピクセル単位の寸法に引き伸ばします。注釈は比例してスケーリングされます。画像は正方形になり、歪みは生じますが、元画像データは失われません。
* **Fill (with center crop) in:** 生成される画像は、希望する出力寸法の中央クロップです。たとえば、元画像が 2600x2080 で、resize オプションが 640x640 に設定されている場合、出力される resize は元画像の中央 640x640 になります。アスペクト比は維持されますが、元画像データは失われます。
* **Fit within:** 元画像のアスペクト比を維持したまま、元画像の寸法を出力画像の寸法に合わせてスケーリングします。たとえば、元画像が 2600x2080 で resize オプションが 640x640 に設定されている場合、長辺（2600）は 640 にスケーリングされ、短辺（2080）は約 512 ピクセルにスケーリングされます。画像のアスペクト比と元データは維持されますが、正方形にはなりません。
* **Fit (reflect edges) in:** 元画像のアスペクト比を維持したまま、元画像の寸法を出力画像の寸法に合わせてスケーリングし、新たに作成されるパディングは元画像の反射になります。たとえば、元画像が 2600x2080 で resize オプションが 416x416 に設定されている場合、長辺（2600）は 416 にスケーリングされ、短辺（2080）は約 335.48 ピクセルにスケーリングされます。残りのピクセル領域（416-335.48、つまり 80.52 ピクセル）は、元画像の反射ピクセルになります。特筆すべき点として、Roboflow は注釈もデフォルトで反射します。画像は正方形でパディングされ、アスペクト比と元データは維持されます。
* **Fit (black edges) in:** 元画像のアスペクト比を維持したまま、元画像の寸法を出力画像の寸法に合わせてスケーリングし、新たに作成されるパディングは黒い領域になります。たとえば、元画像が 2600x2080 で resize オプションが 416x416 に設定されている場合、長辺（2600）は 416 にスケーリングされ、短辺（2080）は約 335.48 ピクセルにスケーリングされます。残りのピクセル領域（416-335.48、つまり 80.52 ピクセル）は黒いピクセルになります。画像は正方形で、黒いパディングが入り、アスペクト比と元データは維持されます。
* **Fit (white edges) in:** 元画像のアスペクト比を維持したまま、元画像の寸法を出力画像の寸法に合わせてスケーリングし、新たに作成されるパディングは白い領域になります。たとえば、元画像が 2600x2080 で resize オプションが 416x416 に設定されている場合、長辺（2600）は 416 にスケーリングされ、短辺（2080）は約 335.48 ピクセルにスケーリングされます。残りのピクセル領域（416-335.48、つまり 80.52 ピクセル）は白いピクセルになります。画像は正方形で、白いパディングが入り、アスペクト比と元データは維持されます。

### Grayscale

RGB チャンネルを持つ画像を単一のグレースケールチャンネルの画像に変換し、メモリを節約できます。各グレースケールピクセルの値は、対応する赤、緑、青のピクセルの重み付き合計として計算されます: Y = 0.2125 R + 0.7154 G + 0.0721 B。

これらの重みは CRT の蛍光体で使われており、等しい重みよりも赤・緑・青に対する人間の知覚をよりよく表します。（ [Scikit-Image](https://scikit-image.org/docs/dev/auto_examples/color_exposure/plot_rgb_to_gray.html).)

### Auto-Adjust Contrast

コントラストの低い画像を強調します。私たちは、 [コントラストを前処理ステップとして使うべきかどうか](https://blog.roboflow.com/when-to-use-contrast-as-a-preprocessing-step/).

* **Contrast Stretching**について検討しました: 画像は、2パーセンタイルから 98 パーセンタイルの範囲に入るすべての強度値を含むように再スケーリングされます。 [さらに見る](http://homepages.inf.ed.ac.uk/rbf/HIPR2/stretch.htm).
* **Histogram Equalization**: 画像内で「最も頻繁に現れる強度値を広げる」処理です。均等化された画像はおおむね一様な分布になり、すべての色のピクセルがほぼ同程度に表現されます。 [さらに見る](https://en.wikipedia.org/wiki/Histogram_equalization).
* **Adaptive Equalization**: Contrast Limited Adaptive Histogram Equalization（CLAHE）。画像の異なるタイル領域ごとに計算されたヒストグラムを使う、局所コントラスト強調のアルゴリズムです。そのため、画像の大部分より暗い、または明るい領域でも、局所的な詳細を強調できます。（ [Scikit-Image](https://scikit-image.org/docs/dev/api/skimage.exposure.html#skimage.exposure.equalize_adapthist).)

## 高度な前処理機能

### Isolate Objects

Isolate Objects 変換は、各バウンディングボックスを切り出して個別の画像として抽出します。この手順により、Object Detection データセットを Classification データセットに変換します。

データセット内の多くのクラスが似ている場合、2つのモデルを順番に使うのが一般的です。最初のモデル（object detection）はオブジェクトを見つけ、2つ目のモデル（classification）はそのオブジェクトが何であるかを識別します。Isolate Objects 変換は、2つ目のモデルを学習するために必要なデータセットを作成するのに役立ちます。

### Static Crop

![static crop 機能と、その出力例。](https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-4f30e8b0a744bea04bcf0dadd480f55d4cb9a034%2FScreenshot%202025-05-20%20at%2009.44.47.png?alt=media)

### Tile

Tile は、小さなオブジェクトを検出する際に役立ちます（特に航空画像や顕微鏡画像のような状況で）。デフォルト設定は 2x2 のタイル分割ですが、必要に応じて調整できます。Tile は前処理パイプラインの *前に* resize の前に実行されます。

![タイル分割ツールと、出力のプレビュー（「grid」で表示）。](https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-7a09d308f703e2805c36bee439ee95451f05ca8b%2FScreenshot%202025-05-20%20at%2009.45.19.png?alt=media)

### Modify Classes

データセットの新しいバージョンを生成する際に、特定のクラスを除外したり、クラスを再マッピング（名前変更）したりするための前処理ツールです。これらの変更は、生成するバージョンにのみ適用されます。基となるデータセットには変更は加えられません。

![「Apple leaf」クラスを除外しています。](https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-37b01b8cc97b0d694bed8bf5d7a445fce3dbd8c9%2FScreenshot%202025-05-20%20at%2009.45.43.png?alt=media)

![クラス「scratches」を「scratch」に再マッピングしています。](https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-6c39656c789b92a25f4a7775bb027f33382c706c%2FScreenshot%202025-05-20%20at%2009.46.57.png?alt=media)

### Filter Null

Filter Null 変換では、データセット内の画像の一定割合に注釈を付けることを要求できます。null annotation としてマークされた画像、または Modify Classes ツール適用後に「unannotated」となった画像のみが、Filter Null 使用時の対象になります。

この変換は、データセットの大部分に目的のオブジェクトが含まれていない場合に便利です。

![Filter Null の前処理ステップを適用しています。](https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-438a722d13a06de4d81a8508b0f1204e3e61fc30%2FScreenshot%202025-05-20%20at%2009.47.41.png?alt=media)

{% hint style="warning" %}
このツールを使用する前に、データセット内のすべての画像に正しく注釈を付け、適切な画像を null annotation として指定し、必要のないクラスは除外しておくようにしてください。
{% endhint %}

{% hint style="info" %}
[Missing Annotations と Null Annotations の違い](https://blog.roboflow.com/missing-and-null-image-annotations/)

「Missing Annotations」は、画像に注釈が付けられていない場合に発生します（画像を未注釈のままにすると、学習済みデータセットの性能に問題が生じ、学習が失敗する原因になる可能性があります）。Null annotations は、画像内にモデルで検出したいものが *何も* 存在しない場合にのみ適用してください。
{% endhint %}

### Filter by Tag

Filter by Tag 変換では、どの Tags が適用されているかに基づいて、バージョンに含めるべき画像、または含めるべきでない画像をフィルタリングできます。 [Tags](https://docs.roboflow.com/datasets/add-tags-to-images) この変換は、新しいデータサブセットでモデルを学習したり、不要な画像を学習から除外したりするのに便利です。

各 Tag には 3 つのオプションがあります:

* **Require:** Required タグが付いた画像のみがバージョンに含まれます。
* **Exclude**: Excluded タグが付いた画像はバージョンに含まれません。
* **Allow:** Allowed タグが付いた画像は、Exclude と Require のルールに応じてバージョンに含まれます。

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-a4764e905f41d1e1b4e83aa437ce5ebdb7328219%2FScreenshot%202025-05-20%20at%2009.49.32.png?alt=media" alt=""><figcaption><p>この例では、生成される Version には <code>do-not-include</code> タグが付いていない画像のみが含まれます。</p></figcaption></figure>
