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:
- 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.
- 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:
Nhấp vào
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.# 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
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.
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:
- 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
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
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
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à
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.# 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
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
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
Đ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
Đ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
Đ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
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 xoayQuá 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
1Cắ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.