Bảng màu Python

Đó có thể là kỷ nguyên của học sâu và dữ liệu lớn, nơi các thuật toán phức tạp phân tích hình ảnh bằng cách hiển thị hàng triệu hình ảnh, nhưng không gian màu vẫn hữu ích một cách đáng ngạc nhiên cho việc phân tích hình ảnh. Các phương pháp đơn giản vẫn có thể mạnh mẽ.

Trong bài viết này, bạn sẽ học cách đơn giản phân đoạn một đối tượng từ một hình ảnh dựa trên màu sắc trong Python bằng OpenCV. Một thư viện thị giác máy tính phổ biến được viết bằng C/C++ với các liên kết cho Python, OpenCV cung cấp các cách dễ dàng để thao tác các không gian màu.

Mặc dù bạn không cần phải quen thuộc với OpenCV hoặc các gói trợ giúp khác được sử dụng trong bài viết này, nhưng có thể giả định rằng bạn có ít nhất hiểu biết cơ bản về lập trình với Python.

Phần thưởng miễn phí: Nhấp vào đây để nhận Hướng dẫn nhỏ về phát hiện khuôn mặt với Python & ví dụ OpenCV hiển thị cho bạn các ví dụ mã thực tế về các kỹ thuật thị giác máy tính Python trong thế giới thực.

Không gian màu là gì?

Trong không gian màu phổ biến nhất, RGB [Red Green Blue], các màu được biểu thị dưới dạng các thành phần màu đỏ, xanh lá cây và xanh lam của chúng. Theo thuật ngữ kỹ thuật hơn, RGB mô tả một màu như một bộ ba thành phần. Mỗi thành phần có thể nhận một giá trị từ 0 đến 255, trong đó tuple 

>>> len[flags]
258
>>> flags[40]
'COLOR_BGR2RGB'
8 đại diện cho màu đen và 
>>> len[flags]
258
>>> flags[40]
'COLOR_BGR2RGB'
9 đại diện cho màu trắng.

RGB được coi là không gian màu “phụ gia” và màu sắc có thể được tưởng tượng như được tạo ra từ việc chiếu một lượng ánh sáng đỏ, lam và lục lên nền đen.

Dưới đây là một số ví dụ khác về màu sắc trong RGB:

Màu sắcGiá trị RGBMàu đỏ255, 0, 0Quả cam255, 128, 0Hồng255, 153, 255

RGB là một trong năm mô hình không gian màu chính, mỗi mô hình có nhiều nhánh. Có rất nhiều không gian màu bởi vì các không gian màu khác nhau hữu ích cho các mục đích khác nhau.

Trong thế giới in ấn, CMYK rất hữu ích vì nó mô tả sự kết hợp màu sắc cần thiết để tạo ra màu từ nền trắng. Trong khi bộ 0 trong RGB là màu đen, thì trong CMYK bộ 0 là màu trắng. Máy in của chúng ta chứa các ống mực có màu lục lam, đỏ tươi, vàng và đen.

Trong một số loại lĩnh vực y tế, các lam kính gắn với các mẫu mô nhuộm được quét và lưu dưới dạng hình ảnh. Chúng có thể được phân tích trong không gian HED, đại diện cho độ bão hòa của các loại vết - hematoxylin, eosin và DAB - được áp dụng cho mô ban đầu.

HSV và HSL là các mô tả về màu sắc, độ bão hòa và độ sáng/độ chói, đặc biệt hữu ích để xác định độ tương phản trong hình ảnh. Những không gian màu này thường được sử dụng trong các công cụ chọn màu trong phần mềm và thiết kế web.

Trong thực tế, màu sắc là một hiện tượng liên tục, có nghĩa là có vô số màu sắc. Tuy nhiên, không gian màu thể hiện màu sắc thông qua các cấu trúc rời rạc [một số cố định của các giá trị số nguyên của một số nguyên], điều này có thể chấp nhận được vì mắt người và nhận thức cũng bị hạn chế. Không gian màu hoàn toàn có thể đại diện cho tất cả các màu mà chúng ta có thể phân biệt được.

Bây giờ chúng ta đã hiểu khái niệm về không gian màu, chúng ta có thể tiếp tục sử dụng chúng trong OpenCV.

Phân đoạn đơn giản bằng cách sử dụng không gian màu

Để chứng minh kỹ thuật phân đoạn không gian màu, chúng tôi đã cung cấp một tập dữ liệu nhỏ về hình ảnh cá hề [clownfish] trong kho tài liệu Python tại đây để bạn tải xuống và chơi cùng. Cá hề có thể dễ dàng nhận biết bởi màu cam sáng của chúng, vì vậy chúng là một ứng cử viên tốt để phân khúc. Hãy xem chúng ta có thể tìm thấy Nemo trong một hình ảnh tốt như thế nào.

Các gói Python chính mà bạn cần tuân theo là NumPy, gói quan trọng nhất dành cho tính toán khoa học bằng Python, Matplotlib, một thư viện vẽ đồ thị và tất nhiên là OpenCV. Bài viết này sử dụng OpenCV 3.2.0, NumPy 1.12.1 và Matplotlib 2.0.2. Các phiên bản hơi khác nhau sẽ không tạo ra sự khác biệt đáng kể về mặt theo dõi và nắm bắt các khái niệm.

Nếu bạn chưa quen với NumPy hoặc Matplotlib, bạn có thể đọc về chúng trong hướng dẫn chính thức về NumPy và bài viết xuất sắc của Brad Solomon trên Matplotlib.

Không gian màu và đọc ảnh trong OpenCV

Đầu tiên, bạn sẽ cần thiết lập môi trường của mình. Bài viết này sẽ giả sử bạn đã cài đặt Python 3.x trên hệ thống của mình. Lưu ý rằng mặc dù phiên bản hiện tại của OpenCV là 3.x, nhưng tên của gói cần nhập vẫn là 

>>> import matplotlib.pyplot as plt
>>> import numpy as np
0:

>>> import cv2

Nếu trước đó bạn chưa cài đặt OpenCV trên máy tính của mình, quá trình nhập sẽ không thành công cho đến khi bạn thực hiện điều đó trước. Bạn có thể tìm thấy hướng dẫn thân thiện với người dùng để cài đặt trên các hệ điều hành khác nhau tại đây, cũng như hướng dẫn cài đặt riêng của OpenCV. Khi bạn đã import OpenCV thành công, bạn có thể xem tất cả các chuyển đổi không gian màu mà OpenCV cung cấp và bạn có thể lưu tất cả chúng vào một biến:

>>> flags = [i for i in dir[cv2] if i.startswith['COLOR_']]

Danh sách và số lượng cờ có thể thay đổi một chút tùy thuộc vào phiên bản OpenCV của bạn, nhưng vẫn sẽ có rất nhiều! Xem bạn có bao nhiêu cờ:

>>> len[flags]
258
>>> flags[40]
'COLOR_BGR2RGB'

Các ký tự đầu tiên sau 

>>> import matplotlib.pyplot as plt
>>> import numpy as np
1 biểu thị không gian màu gốc và các ký tự sau 
>>> import matplotlib.pyplot as plt
>>> import numpy as np
2 là không gian màu đích. Cờ này biểu thị sự chuyển đổi từ BGR [Xanh lam, Xanh lục, Đỏ] sang RGB. Như bạn có thể thấy, hai không gian màu rất giống nhau, chỉ có kênh đầu tiên và kênh cuối cùng được hoán đổi.

Bạn sẽ cần 

>>> import matplotlib.pyplot as plt
>>> import numpy as np
3 để xem hình ảnh và NumPy để thao tác hình ảnh. Nếu bạn chưa cài đặt Matplotlib hoặc NumPy, bạn cần 
>>> import matplotlib.pyplot as plt
>>> import numpy as np
4 và 
>>> import matplotlib.pyplot as plt
>>> import numpy as np
5 trước khi import:

>>> import matplotlib.pyplot as plt
>>> import numpy as np

Bây giờ bạn đã sẵn sàng để tải và kiểm tra một hình ảnh. Lưu ý rằng nếu bạn đang làm việc từ dòng lệnh hoặc thiết bị đầu cuối, hình ảnh của bạn sẽ xuất hiện trong cửa sổ bật lên. Nếu bạn đang làm việc trong sổ ghi chép Jupyter hoặc thứ gì đó tương tự, chúng sẽ đơn giản được hiển thị như bên dưới. Bất kể thiết lập của bạn là gì, bạn sẽ thấy hình ảnh được tạo bởi lệnh 

>>> import matplotlib.pyplot as plt
>>> import numpy as np
6:

Chủ Đề