Python による画像前処理の完全ガイド

Python による画像前処理の完全ガイド

機械学習やコンピューター ビジョンのプロジェクトで、画像の品質が低いという問題に遭遇したことはありませんか?画像は多くの AI システムの生命線ですが、すべての画像が同じように作成されるわけではありません。モデルをトレーニングしたりアルゴリズムを実行したりする前に、最良の結果を得るために通常は画像の前処理を行う必要があります。 Python での画像前処理はあなたの新しい親友になるでしょう。

このガイドでは、Python を使用して分析用に画像を準備するためのヒントとコツをすべて学習します。サイズ変更やトリミングからノイズ低減や正規化まで、あらゆることをカバーします。その時までには、画像の詳細な分析の準備が整います。 OpenCV、Pillow、scikit-image などのライブラリを利用すれば、すぐに画像を強化できます。それでは、Python での画像前処理テクニックに関するこの完全なガイドを読んでみましょう。

画像前処理とは何ですか? また、なぜ重要ですか?

画像の前処理は、生の画像データを操作して使用可能で意味のある形式にするプロセスです。不要な歪みを除去し、コンピューター ビジョン アプリケーションに必要な特定の特性を引き出すことができます。前処理は、画像データを機械学習モデルに取り込む前に準備する上で重要な最初のステップです。

画像の前処理ではいくつかの手法が使用されます。

  • サイズ変更: 機械学習アルゴリズムが適切に機能するためには、画像を均一なサイズに変更することが非常に重要です。画像のサイズを変更するには、OpenCV の resize() メソッドを使用できます。
  • グレースケール: カラー画像をグレースケールに変換すると、画像データが簡素化され、特定のアルゴリズムの計算要件が軽減されます。 cvtColor() メソッドを使用して、RGB をグレースケールに変換できます。
  • ノイズ低減: スムージング、ぼかし、フィルタリング技術を適用して、画像から不要なノイズを除去できます。この目的では、GaussianBlur() メソッドと medianBlur() メソッドがよく使用されます。
  • 正規化: 正規化は、ピクセルの強度値を目的の範囲(通常は 0 ~ 1)に調整します。この目的には、scikit-image の Normalize() を使用できます。
  • 2 値化: しきい値処理によってグレースケール画像を白黒画像に変換します。 OpenCV では、threshold() メソッドを使用して画像を 2 値化します。
  • コントラストの強化: ヒストグラム均等化を使用して、画像のコントラストを調整できます。 equalizeHist() メソッドは画像のコントラストを高めることができます。

これらの技術を適切に組み合わせることで、画像データを大幅に改善し、より優れたコンピューター ビジョン アプリケーションを構築できます。画像の前処理により、未加工の画像を、解決しようとしている問題に適した形式に調整できます。

Python ライブラリを使用して画像を読み込み、変換する

Python で画像処理を始めるには、画像を読み込んでライブラリが処理できる形式に変換する必要があります。最も人気のある 2 つのオプションは、OpenCV と Pillow です。

OpenCV を使用して画像を読み込む: OpenCV は、PNG、JPG、TIFF、BMP などの形式の画像を読み込むことができます。次のコードを使用して画像を読み込むことができます。

 import cv2 image = cv2.imread('path/to/image.jpg')

これにより、画像が NumPy 配列として読み込まれます。画像は BGR カラー スペースにあるため、RGB に変換する必要があるでしょう。

Pillow を使用して画像を読み込みます。Pillowは PIL (Python Image Library) のフレンドリーなフォークです。 PSD、ICO、WEBP など、OpenCV よりも多くの形式をサポートしています。次のコードを使用して画像を読み込むことができます。

 from PIL import Image image = Image.open('path/to/image.jpg')

画像は RGB カラー スペースになります。

カラー スペース間の変換: RGB、BGR、HSV、グレースケールなどのカラー スペース間の変換が必要になる場合があります。これは OpenCV または Pillow を使用して実行できます。たとえば、OpenCV で BGR をグレースケールに変換するには、次のようにします。

 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

または、Pillow で RGB を HSV に変換するには、次を使用します。

 image = image.convert('HSV')

これらの基礎スキルを身に付ければ、サイズ変更、フィルタリング、エッジ検出などのより高度なテクニックに進むことができます。可能性は無限大です!どのような画像処理プロジェクトを構築しますか?

画像を標準サイズにサイズ変更およびトリミングする

画像のサイズ変更とトリミングは、画像の前処理における重要な最初のステップです。画像のサイズはさまざまですが、機械学習アルゴリズムでは通常、標準サイズが必要です。画像のサイズを変更し、正方形のサイズ(通常は 224 x 224 または 256 x 256 ピクセル)にトリミングする必要があります。 Python では、サイズ変更やトリミングに OpenCV または Pillow ライブラリを使用できます。 OpenCV では resize() 関数を使用できます。例えば:

 import cv2 img = cv2.imread('original.jpg') resized = cv2.resize(img, (224, 224))

これにより、画像のサイズが 224 x 224 ピクセルに変更されます。画像を正方形にトリミングするには、中央の正方形のトリミング サイズを計算し、中心の座標で OpenCV の crop() を使用します。例えば:

 height, width, _ = img.shape size = min(height, width) x = (width size) // 2 y = (height size) // 2 cropped = img[y:y+size, x:x+size]

Pillow では、Image.open() および resize() 関数を使用できます。例えば:

 from PIL import Image img = Image.open('original.jpg') resized = img.resize((224, 224))

画像をトリミングするには、img.crop() を使用します。例えば:

 width, height = img.size size = min(width, height) left = (width size) / 2 top = (height size) / 2 right = (width + size) / 2 bottom = (height + size) / 2 cropped = img.crop((left, top, right, bottom))

画像を標準サイズにサイズ変更してトリミングすることは、重要な最初のステップです。これにより、機械学習モデルは画像を効率的に処理し、結果の精度を向上させることができます。時間をかけて慎重に画像のサイズを変更し、トリミングしてください。モデルも感謝してくれるはずです。

ピクセル値を正規化して明るさを一定に保つ

画像データを処理する際には、明るさの一貫性を保ち、コントラストを向上させるためにピクセル値を正規化することが重要です。これにより、画像が分析に適したものになり、機械学習モデルが照明条件に関係なくパターンを学習できるようになります。

ピクセル値の再スケーリング:最も一般的な正規化手法は、ピクセル値を 0 ~ 1 の範囲に再スケーリングすることです。これは、すべてのピクセルを最大ピクセル値 (通常、RGB 画像の場合は 255) で割ることによって実現されます。例えば:

 import cv2 img = cv2.imread('image.jpg') normalized = img / 255.0

これにより、すべてのピクセルが 0 から 1 の間でスケーリングされます。0 は黒、1 は白です。

ヒストグラム均等化:もう一つの便利な手法はヒストグラム均等化です。これにより、範囲全体にピクセル強度が均等に分散され、コントラストが向上します。これは OpenCV の equalizeHist() メソッドを使用して適用できます。

 eq_img = cv2.equalizeHist(img)

これは、ピクセル値が狭い範囲に集中している低コントラストの画像に適しています。一部のアルゴリズムでは、ピクセル値を平均ゼロ、分散 1 になるように正規化すると便利です。これは、平均を減算し、単位分散にスケーリングすることで実現できます。

 mean, std = cv2.meanStdDev(img) std_img = (img mean) / std

これにより、画像は標準偏差が 1 でゼロを中心として作成されます。他にもより複雑な正規化手法はありますが、0 ~ 1 の範囲への再スケーリング、ヒストグラム均等化、正規化という 3 つの方法で基本がカバーされ、ほとんどの機械学習アプリケーション用に画像データを準備できます。最良の結果を得るには、トレーニング データとテスト データの両方に同じ正規化を適用してください。

フィルターを適用してノイズを減らし、画像を鮮明にする

Python に画像を読み込んだら、画像の強化を始めます。画像フィルターは、ノイズを減らし、詳細を強調し、分析前に画像の品質を向上させるために使用されます。知っておくべき主なフィルターをいくつか紹介します。

ガウスぼかし:

ガウスぼかしフィルターは、画像の詳細とノイズを減らすために使用されます。各ピクセルとその周囲のピクセルにガウス関数を適用して画像を「ぼかします」。これにより、エッジ検出やその他の処理技術の前に、エッジと詳細を滑らかにすることができます。

中央ぼかし:

中央値ぼかしフィルターは、画像からごま塩ノイズを除去するために使用されます。これは、各ピクセルを隣接するピクセルの中央値に置き換えることによって機能します。これにより、エッジを維持しながら、孤立したノイズの多いピクセルを滑らかにすることができます。

ラプラスフィルタ:

ラプラシアン フィルターは、画像内のエッジを検出するために使用されます。強度が急激に変化する領域を検出することで機能します。出力はエッジが強調表示された画像となり、エッジ検出に使用できます。これは、画像内の特徴を識別して抽出するのに役立ちます。

逆マスキング:

逆マスキングは、画像の詳細とエッジを強調するために使用される手法です。これは、元の画像からぼかしバージョンを減算することによって行われます。これにより、エッジと詳細が強調され、画像がより鮮明になります。逆マスキングは、特徴抽出やオブジェクト検出の前に詳細を強調するために使用できます。

バイラテラルフィルター:

バイラテラル フィルターは、エッジを保持しながら画像を滑らかにします。これは、ピクセルの空間的な近接性と色の類似性の両方を考慮して行われます。空間的に近く、色が似ているピクセルは一緒に平滑化されますが、色が異なるピクセルは平滑化されません。その結果、エッジがシャープなまま滑らかな画像が得られます。バイラテラル フィルターは、エッジ検出前のノイズ低減に役立ちます。

これらのフィルターを適用することで、詳細な分析やコンピューター ビジョンのタスクに使用できる高品質の強化画像が得られます。ぜひ試してみて、画像処理の結果がどう改善されるかを確認してください。

セグメンテーションを使用して背景を検出して削除する

画像の背景を検出して削除することは、多くのコンピューター ビジョン タスクにおける重要な前処理手順です。セグメンテーションにより、前景の被写体が背景から分離され、被写体のみが写った鮮明な画像が得られます。 OpenCV と scikit-image を使用して Python で画像セグメンテーションを実行する一般的な方法がいくつかあります。

閾値設定:

しきい値設定では、しきい値を選択して、グレースケール画像をバイナリ画像 (白黒) に変換します。しきい値より暗いピクセルは黒になり、しきい値より明るいピクセルは白になります。これは、コントラストが高く、均一に照らされた画像に適しています。 OpenCV の threshold() メソッドを使用してしきい値を適用できます。

エッジ検出:

エッジ検出は、画像内のオブジェクトのエッジを検出します。エッジを接続することで、前景の被写体を分離できます。 Canny エッジ検出器は、scikit-image の canny() メソッドに実装されている一般的なアルゴリズムです。エッジを検出するには、low_threshold および high_threshold パラメータを調整します。

地域の成長:

領域拡張は、シード ポイントのセットから始まり、外側に拡張して、画像内の連続した領域を検出します。シード ポイントを指定すると、アルゴリズムは隣接するピクセルをチェックして、そのポイントを領域に追加するかどうかを決定します。ピクセルを追加できなくなるまで、この処理が続きます。 skimage.segmentation.region_growing() メソッドはこの手法を実装します。

流域:

ウォーターシェッド アルゴリズムは、画像を地形図として扱い、高輝度ピクセルが山頂を表し、谷が地域間の境界を表します。洪水となって山頂から流れ落ち、異なる地域が出会う場所に分離の壁を作ります。 skimage.segmentation.watershed() メソッドは、流域セグメンテーションを実行します。

これらのテクニックを試してみると、画像内の被写体を分離することができます。セグメンテーションは、コンピューター ビジョン モデルを画像の最も重要な部分、つまり前景の被写体に集中させるための重要な最初のステップです。

データ拡張を使用してデータセットを拡張する

データ拡張は、既存の画像から新しい画像を生成することでデータセットのサイズを人工的に拡張する手法です。これにより、過剰適合が軽減され、モデルの一般化パフォーマンスが向上します。画像データの一般的な拡張手法には次のようなものがあります。

反転と回転:

画像を反転(水平または垂直)したり、回転(90 度、180 度、270 度)するだけで、新しいデータ ポイントを生成できます。たとえば、猫の画像が 1,000 枚あり、それらを水平および垂直に反転し、90 度回転させると、合計 4,000 枚の画像 (元の画像 1,000 枚 + 水平反転した画像 1,000 枚 + 垂直反転した画像 1,000 枚 + 90 度回転した画像 1,000 枚) が得られます。

作物:

画像をさまざまなサイズと比率にトリミングすると、同じ元の画像から新しい画像が作成されます。これにより、モデルは同じコンテンツのさまざまな構成と組み合わせを確認できるようになります。さまざまなサイズのランダムな切り抜きを作成したり、正方形などのより具体的な切り抜き比率をターゲットにしたりできます。

カラー操作:

明るさ、コントラスト、色相、彩度を調整すると、新しい強化された画像を簡単に作成できます。たとえば、画像の明るさとコントラストを最大 30% までランダムに調整して、新しいデータ ポイントを生成できます。画像をあまり歪めないように注意してください。歪めすぎるとモデルが混乱する可能性があります。

画像オーバーレイ:

透明な画像、テクスチャ、またはノイズを既存の画像に重ね合わせることも、もう 1 つの簡単な強化手法です。透かし、ロゴ、汚れ/傷、ガウスノイズなどを追加することで、元のデータのリアルなバリエーションを作成できます。微妙なオーバーレイから始めて、モデルがどのように反応するかを確認します。

組み合わせ技術:

データの最大の増加を達成するには、同じ画像に対して複数の拡張手法を組み合わせることができます。たとえば、画像を反転、回転、トリミング、色調整して、単一の元の画像から多数の新しいデータ ポイントを生成できます。ただし、強調しすぎると画像が認識できなくなる可能性があるので注意してください。

データ拡張を使用すると、新しい画像を収集することなく、画像データセットのサイズを 4 倍、10 倍、あるいはそれ以上に簡単に増やすことができます。これにより、過剰適合を防ぎ、トレーニング時間とコストを一定に保ちながらモデルの精度を向上させることができます。

アプリケーションに適した前処理ステップを選択してください

画像分析プロジェクトに適した前処理手法の選択は、データと目標によって異なります。一般的な手順は次のとおりです。

サイズ変更:

機械学習アルゴリズムが適切に機能するためには、画像を一貫したサイズに変更することが重要です。通常、すべての画像の高さと幅は同じで、通常は 28 x 28 ピクセルや 64 x 64 ピクセルなどの小さいサイズにします。 OpenCV または Pillow ライブラリの resize() メソッドを使用すると、プログラムでこれを簡単に実行できます。

色変換:

画像をグレースケールまたは白黒に変換すると、分析が簡素化され、ノイズが軽減されます。 OpenCV の cvtColor() メソッドは、画像を RGB からグレースケールに変換します。白黒画像の場合は、しきい値を使用します。

ノイズキャンセリング:

ガウスぼかし、メディアンぼかし、バイラテラルフィルタリングなどの手法を使用すると、ノイズを減らして画像を滑らかにすることができます。 OpenCV の GaussianBlur()、medianBlur()、bilateralFilter() メソッドはこれらのフィルターを適用します。

正規化:

ピクセル値を 0 ~ 1 または -1 ~ 1 の標準範囲に正規化すると、アルゴリズムがより適切に機能します。 scikit-image の normalize() メソッドを使用して画像を正規化できます。

コントラスト強化:

コントラストの低い画像の場合、ヒストグラム均等化によってコントラストを向上させることができます。 OpenCV の equalizeHist() メソッドがこのタスクを実行します。

エッジ検出:

画像内のエッジや輪郭を見つけることは、多くのコンピューター ビジョン タスクに役立ちます。 OpenCV の Canny() メソッドの Canny エッジ検出器は人気のある選択肢です。

重要なのは、特定のニーズに合ったテクノロジーを選択することです。サイズ変更などの基本的な手順から始めて、品質を向上させるさまざまな方法を試し、どの方法が結果を最適化するかを確認します。いくつか実験してみると、理想的な前処理ワークフローが見つかります。

画像前処理技術に関するFAQ

Python のさまざまな画像前処理手法について十分に理解できましたが、まだいくつか疑問が残っているかもしれません。画像前処理に関するよくある質問とその回答を以下に示します。

Python はどのような画像形式をサポートしていますか?

Python は、OpenCV や Pillow などのライブラリを通じて、さまざまな画像形式をサポートしています。主な形式には次のようなものがあります。

• JPEG — 一般的な非可逆画像形式

• PNG — 透明度のある画像に適したロスレス画像形式

• TIFF — 色深度の高い画像に適したロスレス画像フォーマット

• BMP — 非圧縮ラスター画像形式

画像のサイズを変更する必要があるのはいつですか?

画像のサイズを変更する必要がある状況は次のとおりです。

• 画像が大きすぎるため、効率的に処理できません。サイズを小さくすると処理速度が速くなります。

• 画像は機械学習モデルの入力サイズと一致する必要があります。

• 画像は画面または Web ページ上で特定のサイズで表示する必要があります。

一般的なノイズ低減技術にはどのようなものがありますか?

一般的なノイズ低減技術には次のようなものがあります。

• ガウスぼかし — ガウス フィルターを使用して画像をぼかし、高周波ノイズを減らします。

• 中央値ぼかし — 各ピクセルを隣接するピクセルの中央値に置き換えます。塩コショウノイズの除去に非常に効果的です。

• バイラテラル フィルター —エッジを保持しながら画像を滑らかにします。シャープなエッジを保ちながらノイズを除去します。

OpenCV はどのような色空間をサポートしていますか? また、それらの色空間をどのように変換しますか?

OpenCV は、RGB、HSV、LAB、グレースケールのカラー スペースをサポートしています。 cvtColor 関数を使用して、これらのカラー スペース間で変換できます。例えば:

RGB をグレースケールに変換します。

 gray = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)

RGB を HSV に変換します。

 hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)

RGBをLABに変換します:

 lab = cv2.cvtColor(img, cv2.COLOR_RGB2LAB)

画像を異なる色空間に変換することは、しきい値設定、エッジ検出、オブジェクト追跡などの特定のコンピューター ビジョン タスクに役立ちます。

結論は

必要なのは、Python で分析用に画像を準備するための完全なガイドです。 OpenCV やその他のライブラリのパワーにより、画像のサイズ変更、強化、フィルタリング、変換を行うためのすべてのツールが利用できるようになります。さまざまなテクニックを自由に試し、パラメータを微調整して、特定のデータセットとコンピューター ビジョン タスクに最適なものを見つけてください。画像の前処理は、AI システムの構築において最も魅力的な部分ではないかもしれませんが、絶対に重要です。

<<:  Baidu Smart Cloud Qianfan AppBuilder を解体し、次世代の大規模モデル アプリケーションを予測する

>>: 

ブログ    
ブログ    

推薦する

業界大手がIoTとAIを成功裏に導入するための3つのステップ

変化は避けられませんが、人間はそれに抵抗する傾向があります。エリザベス1世女王は、編み機の発明によっ...

機械学習によるディープラーニングが企業の今後の方向性となる理由

機械アルゴリズムのディープラーニングは、ビジネスの世界に多くの変化をもたらしました。定義上、これは人...

新しいモデルは99%の精度で、ChatGPTによって生成されたテキストコンテンツを認識できます。

IT Homeは11月8日、sciencedirectに掲載された最新の論文によると、科学者は20...

絶対確実な協働ロボット

人間とロボットが協力して協働ロボットを作る[[321860]]協働ロボットは人間と対話し、協働するよ...

OpenAIは人間の参照要約よりも優れており、人間のフィードバックを利用して要約生成の品質を向上させています。

言語モデルがより強力になるにつれて、特定のタスクのデータとメトリックがトレーニングと評価のボトルネッ...

AIファイナンスブームの背後にはアリババとスタートアップ企業独自の狙いがある

中国の人工知能分野の二大大手であるMegvii TechnologyとSenseTime Techn...

マスク氏は激怒:マイクロソフトはAI用のデータ収集にWindowsを使用しているが、登録なしでは使用できない

マスク氏が投稿したXダイナミックにより、Microsoft Windowsは論争の中心となった。事件...

AIとMLの自動化テストを加速する5つの方法

[[395482]] [51CTO.com クイック翻訳]近年、人工知能 (AI) と機械学習 (M...

...

...

マイクロソフトアジアリサーチは、知識蒸留を使用して小さなViTを改善するTinyMIMを提案

1. 研究の動機マスクモデリング (MIM、MAE) は、非常に効果的な自己教師ありトレーニング方法...

人工知能の3つの主要分野とその産業応用

人工知能は、人間の知能の拡張と拡大をシミュレートするための理論、方法、技術、アプリケーション システ...

AI 偽指紋が登場しても指紋ロック解除は安全ですか?

スマートフォンに生体認証指紋認証ロック解除技術が搭載されて以来、パスワードを入力する面倒なロック解除...

...