ホームページ  >  記事  >  テクノロジー周辺機器  >  Python 画像前処理の完全ガイド

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

WBOY
WBOY転載
2024-01-12 20:06:10603ブラウズ

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

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

このガイドでは、Python を使用して分析用に画像を準備するためのすべてのヒントとコツを学びます。サイズ変更やトリミングからノイズリダクションや正規化まで、すべてをカバーします。この時点で、画像は詳細な分析の準備が整います。 OpenCV、Pillow、scikit-image などのライブラリを利用すると、すぐに画像を強化できるようになります。それでは、準備を整えて、Python での画像前処理テクニックに関するこの完全なガイドに飛び込んでください。

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

画像の前処理は、生の画像データを使用可能な意味のある形式に処理するプロセスです。不要な歪みを排除し、コンピューター ビジョン アプリケーションに必要な特定の特性を強化するように設計されています。前処理は、画像データを機械学習モデルに入力する前に準備するための重要な最初のステップです。

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

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

これらの手法を適切に組み合わせることで、画像データを大幅に改善し、より優れたコンピューター ビジョン アプリケーションを構築できます。画像の前処理は、生の画像を問題解決に適した形式に変換することで、画質と使いやすさを向上させます。

Python ライブラリを使用した画像の読み込みと変換

画像処理に Python の使用を開始するには、画像を読み込み、ライブラリが使用できる形式に変換するための 2 つの一般的なオプションがあります。ハンドル: OpenCV と Pillow。

OpenCV を使用して画像をロードする: OpenCV は、PNG、JPG、TIFF、および BMP 形式の画像をロードできます。次のコードを使用してイメージをロードできます:

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

これにより、イメージが NumPy 配列としてロードされます。画像は BGR 色空間にあるため、RGB に変換することができます。

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

from PIL import Imageimage = 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')

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

调整大小和裁剪图像至标准尺寸

调整大小和裁剪图像是图像预处理的重要第一步。图像大小各异,但机器学习算法通常需要标准大小。您需要将图像调整大小和裁剪为方形尺寸,通常是224x224或256x256像素。在Python中,您可以使用OpenCV或Pillow库进行调整大小和裁剪。使用OpenCV,可以使用resize()函数。例如:

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

这将将图像调整为224x224像素。要将图像裁剪为正方形,可以计算中心正方形裁剪大小并使用OpenCV的crop()与中心坐标。例如:

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

使用Pillow,您可以使用Image.open()和resize()函数。例如:

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

裁剪图像时,使用img.crop()。例如:

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

调整大小和裁剪图像至标准尺寸是一个至关重要的第一步。这将使您的机器学习模型能够有效地处理图像,并提高结果的准确性。花时间仔细调整大小和裁剪图像,您的模型将感激不尽!

对像素值进行归一化以保持一致的亮度

在处理图像数据时,将像素值归一化以保持一致的亮度并提高对比度是很重要的。这使图像更适合进行分析,并使机器学习模型能够独立于光照条件学习模式。

像素值重新缩放:最常见的归一化技术是将像素值重新缩放到0到1的范围内。这是通过将所有像素除以最大像素值(RGB图像通常为255)来实现的。例如:

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

这将使所有像素在0到1之间缩放,其中0为黑色,1为白色。

直方图均衡化:另一种有用的技术是直方图均衡化。这将像素强度均匀分布到整个范围以提高对比度。可以使用OpenCV的equalizeHist()方法应用它:

eq_img = cv2.equalizeHist(img)

这对于像素值集中在一个狭窄范围内的低对比度图像效果很好。对于一些算法,将像素值归一化为零均值和单位方差是有用的。这可以通过减去均值并缩放到单位方差来实现:

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

这将使图像以零为中心,标准差为1。还有一些其他更复杂的归一化技术,但这三种方法——重新缩放为0-1范围、直方图均衡化和标准化——涵盖了基础知识,将为大多数机器学习应用准备好图像数据。确保对训练和测试数据都应用相同的归一化以获得最佳结果。

应用滤镜以减少噪声并锐化图像

一旦您在Python中加载了图像,就是时候开始增强它们了。图像滤镜用于减少噪声、增强细节,总体提高图像在分析之前的质量。以下是您需要了解的一些主要滤镜:

高斯模糊:

高斯模糊滤镜用于减少图像中的细节和噪声。它通过对每个像素及其周围像素应用高斯函数来“模糊”图像。这有助于在进行边缘检测或其他处理技术之前平滑边缘和细节。

中值模糊:

中值模糊滤镜用于从图像中去除椒盐噪声。它通过用其邻近像素的中值替换每个像素来工作。这有助于平滑孤立的嘈杂像素同时保留边缘。

拉普拉斯滤波器:

拉普拉斯滤波器用于检测图像中的边缘。它通过检测强度变化较快的区域来工作。输出将是突出显示边缘的图像,可用于边缘检测。这有助于识别和提取图像中的特征。

反向掩蔽:

反向掩蔽是一种用于增强图像中细节和边缘的技术。它通过从原始图像中减去模糊版本来实现。这会放大边缘和细节,使图像看起来更清晰。反向掩蔽可用于在特征提取或对象检测之前增强细节。

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

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

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

セグメンテーションを使用した背景の検出と削除

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

Thresholding:

Thresholding は、グレースケール イメージをバイナリ イメージ (白黒) に変換します。しきい値を選択することによって。しきい値より暗いピクセルは黒になり、しきい値より明るいピクセルは白になります。これは、コントラストが高く、照明が均一な画像に適しています。 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 つです。透かし、ロゴ、汚れ/傷、ガウス ノイズなどを追加すると、元のデータのリアルなバリエーションを作成できます。微妙なオーバーレイから始めて、モデルがどのように反応するかを確認してください。

結合テクニック:

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

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

アプリケーションに適切な前処理ステップを選択する

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

サイズ変更:

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

カラー変換:

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

ノイズ低減:

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

正規化:

ピクセル値を 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系统中最引人注目的部分,但它绝对是至关重要的。

以上がPython 画像前処理の完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。