Hướng dẫn image preprocessing techniques python - kỹ thuật tiền xử lý hình ảnh python

Xử lý dữ liệu hình ảnh là một trong những vấn đề được khám phá nhiều nhất trong cộng đồng khoa học dữ liệu. Mỗi nhà phát triển có một cách độc đáo để làm điều đó. Một số công cụ và nền tảng được sử dụng trong tiền xử lý hình ảnh bao gồm Python, Pytorch, OpenCV, Keras, Tensorflow và Gối.

Giới thiệu

Khi xây dựng một dự án học máy/tầm nhìn máy tính, một điều chúng ta luôn cần là dữ liệu. Trong trường hợp này, dữ liệu hình ảnh.

Thật không may, một vài vấn đề liên quan đến dữ liệu hình ảnh bao gồm độ phức tạp, không chính xác và không thỏa đáng. Đây là lý do tại sao trước khi xây dựng mô hình tầm nhìn máy tính, điều cần thiết là dữ liệu được xử lý trước (được làm sạch và xử lý theo định dạng mong muốn) để đạt được kết quả mong muốn.

Trong hướng dẫn này, chúng tôi sẽ xem xét tiền xử lý dữ liệu hình ảnh, chuyển đổi dữ liệu hình ảnh thành một biểu mẫu cho phép các thuật toán học máy giải quyết nó.image data preprocessing, which converts image data into a form that allows machine learning algorithms to solve it.

Nó thường được sử dụng để tăng độ chính xác của mô hình, cũng như giảm độ phức tạp của nó.

Có một số kỹ thuật được sử dụng để xử lý dữ liệu hình ảnh. Những ví dụ bao gồm; Thay đổi kích thước hình ảnh, chuyển đổi hình ảnh thành thang độ xám và tăng cường hình ảnh.

Điều kiện tiên quyết

Để làm theo hướng dẫn, một nhu cầu:

  1. Một tài khoản Google Colab hoặc Kaggle. Bạn cũng có thể sử dụng máy tính xách tay Python và Jupyter được cài đặt trên máy của bạn.
  2. Một số kiến ​​thức cơ bản về Python.

Trong hướng dẫn này, chúng tôi sẽ sử dụng Google Colab. Vì vậy, sau khi tạo một sổ ghi chép mới, bước đầu tiên sẽ là tải dữ liệu vào môi trường colab của chúng tôi.

Gắn Google Drive vào Colab

Trước tiên chúng tôi sẽ tải xuống dữ liệu và sau đó tải nó lên Google Drive của chúng tôi. Sau đó, chúng tôi sẽ gắn ổ đĩa của chúng tôi đến Colab bằng mã bên dưới:

from google.colab import drive
drive.mount("/content/drive/")

Chạy ô bằng cách nhấp vào Shift + Enter Keys và làm theo các hướng dẫn bên dưới:shift + enter keys and follow the instructions below:

  1. Nhấp vào

    # importing libraries
    import tensorflow 
    import keras  
    import os
    import glob 
    from skimage import io 
    import random 
    import numpy as np
    import matplotlib.pyplot as plt  
    %matplotlib inline
    
    2 được hiển thị để xác thực với tài khoản Google mong muốn của bạn nơi có ổ đĩa dữ liệu.

  2. Sao chép mã ủy quyền được tạo, dán nó lên khoảng trống bên dưới URL và nhấp vào phím Enter để thực thi.Enter key to execute.

Nhập bộ dữ liệu

Bước tiếp theo là tải bộ dữ liệu vào colab. Để nhập bộ dữ liệu, trước tiên chúng tôi cần nhập một số thư viện cần thiết.

# importing libraries
import tensorflow 
import keras  
import os
import glob 
from skimage import io 
import random 
import numpy as np
import matplotlib.pyplot as plt  
%matplotlib inline

Khi điều này được thực hiện, chúng tôi sẽ tiếp tục và nhập dữ liệu, hiện đang có trên Google Drive bằng cách sử dụng khối mã bên dưới:

# Importing and Loading the data into a data frame

dataset_path = '/content/drive/MyDrive/Animals'
class_names = ['Cheetah', 'Jaguar', 'Leopard', 'Lion','Tiger']

# apply glob module to retrieve files/pathnames  

animal_path = os.path.join(dataset_path, class_names[1], '*')
animal_path = glob.glob(animal_path)

Bây giờ chúng tôi đã tải bộ dữ liệu của chúng tôi vào không gian làm việc của mình, bước tiếp theo sẽ là trực quan hóa dữ liệu.

Để xác minh xem dữ liệu của chúng tôi có được tải đúng không, chúng tôi sẽ thử truy cập tệp hình ảnh từ bộ dữ liệu:

# accessing an image file from the dataset classes
image = io.imread(animal_path[4])  

# plotting the original image
i, (im1) = plt.subplots(1)
i.set_figwidth(15)
im1.imshow(image)

Bằng cách thực thi khối mã trên, chúng ta sẽ in ngẫu nhiên một hình ảnh từ bộ dữ liệu.

Hướng dẫn image preprocessing techniques python - kỹ thuật tiền xử lý hình ảnh python

Tiền xử lý dữ liệu

Bây giờ chúng tôi đã thực hiện việc nhập thư viện và dữ liệu, hãy để tiến hành xử lý trước dữ liệu.

Vì hình ảnh tồn tại ở các định dạng khác nhau, tức là, tự nhiên, giả, thang độ xám, v.v., chúng ta cần xem xét và chuẩn hóa chúng trước khi cho chúng vào mạng lưới thần kinh.

Trong hướng dẫn này, chúng ta sẽ xem xét các kỹ thuật tiền xử lý hình ảnh sau:

  1. Chuyển đổi thang độ xám
  2. Bình thường hóa
  3. Tăng cường dữ liệu
  4. Tiêu chuẩn hóa hình ảnh

Trước khi chúng tôi bắt đầu khám phá các kỹ thuật tiền xử lý, trước tiên hãy khám phá các kênh RGB của hình ảnh gốc của chúng tôi;

# plotting the original image and the RGB channels  

i, (im1, im2, im3, im4) = plt.subplots(1, 4, sharey=True)
i.set_figwidth(20) 

im1.imshow(image)  #Original image
im2.imshow(image[:, : , 0]) #Red
im3.imshow(image[:, : , 1]) #Green
im4.imshow(image[:, : , 2]) #Blue
i.suptitle('Original & RGB image channels')

Đầu ra

Hướng dẫn image preprocessing techniques python - kỹ thuật tiền xử lý hình ảnh python

Chuyển đổi thang độ xám

Bình thường hóa

Tăng cường dữ liệu

Tiêu chuẩn hóa hình ảnh

gray_image = skimage.color.rgb2gray(image)
plt.imshow(gray_image, cmap = 'gray')

Đầu ra

Hướng dẫn image preprocessing techniques python - kỹ thuật tiền xử lý hình ảnh python

Tr có thể chuyển đổi hình ảnh từ màu sang đen và trắng. Nó thường được sử dụng để giảm độ phức tạp tính toán trong các thuật toán học máy.: Converting images to grayscale might not always be practical in solving some problems. A few examples where it would be impractical to use grayscale include: traffic lights, healthcare diagnosis, autonomous vehicles, agriculture, etc. The best way to know whether to use it or not depends on your human visual ability to identify an object without color.

Vì hầu hết các hình ảnh don don cần màu sắc được nhận ra, nên việc sử dụng thang độ xám là khôn ngoan, điều này làm giảm số lượng pixel trong một hình ảnh, do đó, làm giảm các tính toán cần thiết.

Thực hiện mã bên dưới để chuyển đổi hình ảnh gốc thành Grayscale:

NB: Chuyển đổi hình ảnh thành thang độ xám có thể không phải lúc nào cũng thực tế trong việc giải quyết một số vấn đề. Một vài ví dụ sẽ không thực tế khi sử dụng thang độ xám bao gồm: đèn giao thông, chẩn đoán chăm sóc sức khỏe, phương tiện tự trị, nông nghiệp, v.v ... Cách tốt nhất để biết có nên sử dụng hay không phụ thuộc vào khả năng hình ảnh của con người để xác định một vật không màu.

Bình thường hóa

  • Cũng được gọi là tỷ lệ lại dữ liệu, đó là quá trình chiếu các pixel dữ liệu hình ảnh (cường độ) đến phạm vi được xác định trước (thường là

    # importing libraries
    import tensorflow 
    import keras  
    import os
    import glob 
    from skimage import io 
    import random 
    import numpy as np
    import matplotlib.pyplot as plt  
    %matplotlib inline
    
    3 hoặc
    # importing libraries
    import tensorflow 
    import keras  
    import os
    import glob 
    from skimage import io 
    import random 
    import numpy as np
    import matplotlib.pyplot as plt  
    %matplotlib inline
    
    4). Điều này thường được sử dụng trên các định dạng dữ liệu khác nhau và bạn muốn bình thường hóa tất cả chúng để áp dụng cùng một thuật toán trên chúng.

  • Chuẩn hóa thường được áp dụng để chuyển đổi một giá trị pixel hình ảnh thành một ý nghĩa điển hình hoặc quen thuộc hơn.

Hãy để viết mã bên dưới để bình thường hóa dữ liệu của chúng tôi.

norm_image = (gray_image - np.min(gray_image)) / (np.max(gray_image) - np.min(gray_image))
plt.imshow(norm_image)

Đầu ra

Hướng dẫn image preprocessing techniques python - kỹ thuật tiền xử lý hình ảnh python

Tăng cường dữ liệu

Tăng cường dữ liệu là quá trình thực hiện các thay đổi nhỏ đối với dữ liệu hiện có để tăng tính đa dạng của nó mà không cần thu thập dữ liệu mới.

Nó là một kỹ thuật được sử dụng để mở rộng một bộ dữ liệu. Các kỹ thuật tăng dữ liệu tiêu chuẩn bao gồm lật ngang và dọc, xoay, cắt xén, cắt, v.v.

Thực hiện tăng cường dữ liệu giúp ngăn chặn một mạng lưới thần kinh học các tính năng không liên quan. Điều này dẫn đến hiệu suất mô hình tốt hơn.

Các kỹ thuật tăng dữ liệu tiêu chuẩn bao gồm lật ngang và dọc, xoay, cắt xén, cắt, v.v.

Có hai loại tăng cường:

  • Tăng cường ngoại tuyến - Được sử dụng cho các bộ dữ liệu nhỏ. Nó được áp dụng trong bước tiền xử lý dữ liệu. Chúng tôi sẽ đề cập đến sự gia tăng này trong hướng dẫn này.

  • Tăng cường trực tuyến- được sử dụng cho các bộ dữ liệu lớn. Nó thường được áp dụng trong thời gian thực.

Đối với hướng dẫn này, chúng tôi sẽ sử dụng lớp Keras từ ____15 để tăng dữ liệu của chúng tôi. Điều này là do nó cung cấp một cách nhanh chóng và dễ dàng để tăng cường hình ảnh của bạn.Keras’s

# importing libraries
import tensorflow 
import keras  
import os
import glob 
from skimage import io 
import random 
import numpy as np
import matplotlib.pyplot as plt  
%matplotlib inline
5 class to augment our data. This is because it provides a quick and easy way to augment your images.

Ngoài ra, nó hỗ trợ các kỹ thuật tăng cường như lật, xoay, thay đổi độ sáng, v.v.

Bây giờ hãy xem xét các kỹ thuật tăng dữ liệu được sử dụng nhiều nhất:

Sự thay đổi

Đây là quá trình thay đổi hình ảnh pixel theo chiều ngang hoặc chiều dọc.

Hãy cùng xem một ví dụ dưới đây dịch chuyển theo chiều ngang:

# import libraries

from numpy import expand_dims
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.preprocessing.image import ImageDataGenerator

# convert to numpy array
data = img_to_array(image)

# expand dimension to one sample
samples = expand_dims(image, 0)

# create image data augmentation generator
datagen = ImageDataGenerator(width_shift_range=[-200,200])

# create an iterator
it = datagen.flow(samples, batch_size=1)
fig, im = plt.subplots(nrows=1, ncols=3, figsize=(15,15))

# generate batch of images
for i in range(3):

    # convert to unsigned integers
    image = next(it)[0].astype('uint8')
 
    # plot image
    im[i].imshow(image) 

Đầu ra

Hướng dẫn image preprocessing techniques python - kỹ thuật tiền xử lý hình ảnh python

Lật

Điều này đảo ngược các hàng hoặc cột của pixel trong các trường hợp dọc hoặc ngang tương ứng.

Hãy để Lừa làm một lật ngẫu nhiên với cả lật ngang và dọc. Từ mã trên, thay đổi các tham số ImageDatAgenerator như được hiển thị bên dưới:ImageDataGenerator parameters as shown below:

# ImageDataGenerator for flipping
datagen = ImageDataGenerator(horizontal_flip=True, vertical_flip=True)

Đầu ra

Hướng dẫn image preprocessing techniques python - kỹ thuật tiền xử lý hình ảnh python

Lật

Điều này đảo ngược các hàng hoặc cột của pixel trong các trường hợp dọc hoặc ngang tương ứng.

Hãy để Lừa làm một lật ngẫu nhiên với cả lật ngang và dọc. Từ mã trên, thay đổi các tham số ImageDatAgenerator như được hiển thị bên dưới:ImageDataGenerator parameters, as shown below:

datagen = ImageDataGenerator(rotation_range=20, fill_mode='nearest')

Đầu ra

Hướng dẫn image preprocessing techniques python - kỹ thuật tiền xử lý hình ảnh python

Lật

Điều này đảo ngược các hàng hoặc cột của pixel trong các trường hợp dọc hoặc ngang tương ứng.

Hãy để Lừa làm một lật ngẫu nhiên với cả lật ngang và dọc. Từ mã trên, thay đổi các tham số ImageDatAgenerator như được hiển thị bên dưới:ImageDataGenerator parameters, as shown below:

# importing libraries
import tensorflow 
import keras  
import os
import glob 
from skimage import io 
import random 
import numpy as np
import matplotlib.pyplot as plt  
%matplotlib inline
0

Đầu ra

Hướng dẫn image preprocessing techniques python - kỹ thuật tiền xử lý hình ảnh python

Lật

Điều này đảo ngược các hàng hoặc cột của pixel trong các trường hợp dọc hoặc ngang tương ứng.

Hãy để Lừa làm một lật ngẫu nhiên với cả lật ngang và dọc. Từ mã trên, thay đổi các tham số ImageDatAgenerator như được hiển thị bên dưới:

Vòng xoay

Quá trình này liên quan đến việc xoay một hình ảnh theo một mức độ cụ thể.

Từ mã trên, thay đổi các tham số ImageDatAgenerator, như được hiển thị bên dưới:

Thay đổi độ sáng is a method that scales and preprocesses images to have similar heights and widths. It re-scales data to have a standard deviation of

# importing libraries
import tensorflow 
import keras  
import os
import glob 
from skimage import io 
import random 
import numpy as np
import matplotlib.pyplot as plt  
%matplotlib inline
6 (unit variance) and a mean of
# importing libraries
import tensorflow 
import keras  
import os
import glob 
from skimage import io 
import random 
import numpy as np
import matplotlib.pyplot as plt  
%matplotlib inline
7.

Đây là quá trình tăng hoặc giảm độ tương phản hình ảnh.

Các kỹ thuật tăng cường khác bao gồm:ImageDataGenerator parameters as shown below:

# importing libraries
import tensorflow 
import keras  
import os
import glob 
from skimage import io 
import random 
import numpy as np
import matplotlib.pyplot as plt  
%matplotlib inline
1

Cắt xén

Đây là quá trình tạo một tập hợp con ngẫu nhiên của một hình ảnh gốc sau đó được thay đổi kích thước theo kích thước của hình ảnh gốc.

Quy mô


Một hình ảnh có thể được chia tỷ lệ vào bên trong hoặc bên ngoài. Khi tỷ lệ một hình ảnh ra bên ngoài, hình ảnh trở nên quan trọng hơn so với bản gốc và Vise Versa.