Hello there, ('ω')ノ
✅ 画像データの読み込みと表示
✅ リサイズ・グレースケール変換
✅ データ拡張(Data Augmentation)
✅ 画像の数値ベクトル化(配列変換)
📌 1. 画像データとは?
画像データは、ピクセル(画素) の集まりです。
カラー画像(RGB)の場合、各ピクセルは (R, G, B) の3つの数値 で表されます。
ピクセル位置 | 赤(R) | 緑(G) | 青(B) |
---|---|---|---|
(0,0) | 255 | 0 | 0 | ← 赤色 |
(1,0) | 0 | 255 | 0 | ← 緑色 |
(2,0) | 0 | 0 | 255 | ← 青色 |
✅ 画像は「高さ × 幅 × 色(3チャンネル)」の数値データ!
✅ モノクロ画像なら「高さ × 幅」の2次元データ!
➡ 画像を数値データとして処理できるように前処理する!
📌 2. 画像データの読み込み
まずは、Pythonの OpenCV(cv2) や PIL(Pillow) を使って、画像データを読み込みます。
✅ (1) OpenCV を使った画像の読み込み
import cv2 import matplotlib.pyplot as plt # 画像を読み込む image = cv2.imread("/kaggle/input/honey-bee-annotated-images/bee_imgs/004_138.png") # BGR形式をRGB形式に変換(OpenCVはBGRで読み込むため) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 画像を表示 plt.imshow(image) plt.axis("off") # 軸を非表示にする plt.show()
✅ OpenCV(cv2)は、画像処理に特化したライブラリ!
✅ OpenCVはBGR(青・緑・赤)形式で画像を読み込むので、RGB変換が必要!
✅ (2) PIL(Pillow)を使った画像の読み込み
from PIL import Image # 画像を読み込む image = Image.open("/kaggle/input/honey-bee-annotated-images/bee_imgs/004_138.png") # 画像を表示 plt.imshow(image) plt.axis("off") plt.show()
✅ PIL(Pillow)は、シンプルに画像を扱うのに便利!
➡ どちらの方法でも、画像をPythonで扱えるようになる!
📌 3. 画像のリサイズ(サイズ変更)
機械学習モデルでは、入力画像のサイズを統一する 必要があります。
例えば、すべての画像を「224×224」ピクセルにリサイズ します。
※(1) OpenCV を使った画像の読み込みの後で実行します。
✅ OpenCVを使ったリサイズ
# 画像を 224x224 にリサイズ resized_image = cv2.resize(image, (224, 224)) # 画像を表示 plt.imshow(resized_image) plt.axis("off") plt.show()
✅ すべての画像を同じサイズに統一!
✅ 機械学習モデルに適した入力形式を作る!
📌 4. グレースケール変換(白黒画像に変換)
カラー画像をモノクロ(グレースケール) に変換すると、計算コストが下がり、
手書き数字の認識(MNISTデータセット) などに活用できます。
✅ OpenCVでグレースケール変換
# グレースケール変換 gray_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) # 画像を表示 plt.imshow(gray_image, cmap="gray") plt.axis("off") plt.show()
✅ グレースケール画像は、チャンネル数が1つだけになる!(高さ × 幅)
✅ 白黒画像の解析に使う!
📌 5. データ拡張(Data Augmentation)
データが少ないと、機械学習モデルの精度が下がることがあります。
そこで、データを人工的に増やす「データ拡張(Augmentation)」 を行います!
✅ 画像の回転・反転・明るさ調整
import albumentations as A from albumentations.pytorch import ToTensorV2 # 画像の前処理(回転・反転・明るさ変更) transform = A.Compose([ A.HorizontalFlip(p=0.5), # 左右反転 A.RandomBrightnessContrast(p=0.5), # 明るさのランダム変更 A.Rotate(limit=30, p=0.5) # 最大30度まで回転 ]) # 画像を変換 augmented = transform(image=image)["image"] # 画像を表示 plt.imshow(augmented) plt.axis("off") plt.show()
✅ データを増やすことで、モデルの汎化性能を向上!
✅ 異なる角度や明るさのデータを作ることで、学習が安定!
📌 6. 画像の数値ベクトル化(配列変換)
機械学習モデルでは、画像を 数値配列(NumPy配列 or Tensor) に変換する必要があります。
✅ OpenCVを使った NumPy 配列変換
import numpy as np # 画像を NumPy 配列に変換 image_array = np.array(resized_image) # 配列の形状を確認 print("画像の形状:", image_array.shape)
🔍 出力
画像の形状: (224, 224, 3) # 高さ×幅×チャンネル(RGB)
✅ NumPy配列に変換することで、機械学習モデルで扱える!
✅ PyTorchやTensorFlowに渡すための準備!
📌 7. PyTorch / TensorFlow で画像をテンソルに変換
ディープラーニングモデルでは、画像データを PyTorchのTensor や TensorFlowのTensors に変換します。
✅ PyTorch の Tensor に変換
import torch from torchvision import transforms # 画像の変換処理 transform = transforms.Compose([ transforms.ToTensor() # Tensorに変換 ]) # 画像をTensorに変換 tensor_image = transform(resized_image) # Tensorの形状を確認 print(tensor_image.shape) # (3, 224, 224)
✅ (3, 224, 224) の形式に変換し、モデルに入力できるように!
✅ PyTorchのニューラルネットワークに適用可能!
🎯 まとめ
✅ 画像データは「高さ × 幅 × 色(RGB)」の数値データ!
✅ OpenCV / PIL を使って画像を読み込み・表示!
✅ リサイズ・グレースケール変換で前処理を行う!
✅ データ拡張(Augmentation)で学習データを増やす!
✅ 画像をNumPy配列やTensorに変換し、機械学習モデルに入力可能にする!
Best regards, (^^ゞ