Các bước xử lý ảnh trong Python là gì?

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách chúng ta có thể thực hiện xử lý ảnh bằng ngôn ngữ Python. Chúng tôi sẽ không giới hạn bản thân trong một thư viện hoặc khuôn khổ duy nhất; . Chúng tôi sẽ bắt đầu bằng cách nói một chút về xử lý hình ảnh và sau đó chúng tôi sẽ chuyển sang xem các ứng dụng/tình huống khác nhau mà xử lý hình ảnh có thể hữu ích. Vì vậy, chúng ta hãy bắt đầu

Xử lý hình ảnh là gì?

Điều quan trọng là phải biết chính xác xử lý hình ảnh là gì và vai trò của nó trong bức tranh lớn hơn trước khi đi sâu vào cách thức xử lý. Xử lý hình ảnh thường được gọi là 'Xử lý hình ảnh kỹ thuật số' và miền mà nó thường được sử dụng là 'Thị giác máy tính'. Đừng nhầm lẫn - chúng ta sẽ nói về cả hai thuật ngữ này và cách chúng kết nối. Cả thuật toán Xử lý hình ảnh và thuật toán Thị giác máy tính (CV) đều lấy hình ảnh làm đầu vào;

Tại sao chúng ta cần nó?

Dữ liệu mà chúng tôi thu thập hoặc tạo ra chủ yếu là dữ liệu thô, tôi. e. nó không phù hợp để sử dụng trực tiếp trong các ứng dụng do một số lý do có thể xảy ra. Do đó, chúng ta cần phân tích nó trước, thực hiện tiền xử lý cần thiết và sau đó sử dụng nó

Chẳng hạn, giả sử rằng chúng ta đang cố gắng xây dựng bộ phân loại mèo. Chương trình của chúng tôi sẽ lấy một hình ảnh làm đầu vào và sau đó cho chúng tôi biết hình ảnh đó có chứa con mèo hay không. Bước đầu tiên để xây dựng bộ phân loại này là thu thập hàng trăm bức ảnh về mèo. Một vấn đề phổ biến là tất cả các hình ảnh chúng tôi đã cạo sẽ không có cùng kích thước/kích thước, vì vậy trước khi đưa chúng vào mô hình để đào tạo, chúng tôi cần thay đổi kích thước/xử lý trước tất cả chúng thành kích thước tiêu chuẩn

Đây chỉ là một trong nhiều lý do tại sao xử lý ảnh lại cần thiết cho bất kỳ ứng dụng thị giác máy tính nào.

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

Trước khi tiếp tục, hãy thảo luận về những gì bạn cần biết để làm theo hướng dẫn này một cách dễ dàng. Đầu tiên, bạn nên có một số kiến ​​thức lập trình cơ bản về bất kỳ ngôn ngữ nào. Thứ hai, bạn nên biết máy học là gì và những điều cơ bản về cách thức hoạt động của nó, vì chúng ta sẽ sử dụng một số thuật toán máy học để xử lý hình ảnh trong bài viết này. Như một phần thưởng, sẽ hữu ích nếu bạn đã từng tiếp xúc hoặc có kiến ​​thức cơ bản về Open CV trước khi tiếp tục với hướng dẫn này. Nhưng điều này là không bắt buộc

Một điều bạn chắc chắn nên biết để làm theo hướng dẫn này là một hình ảnh được thể hiện chính xác như thế nào trong bộ nhớ. Mỗi hình ảnh được đại diện bởi một tập hợp các điểm ảnh i. e. một ma trận các giá trị pixel. Đối với hình ảnh thang độ xám, các giá trị pixel nằm trong khoảng từ 0 đến 255 và chúng biểu thị cường độ của pixel đó. Chẳng hạn, nếu bạn có một hình ảnh có kích thước 20 x 20, nó sẽ được biểu thị bằng một ma trận 20x20 (tổng cộng các giá trị 400 pixel)

Nếu bạn đang xử lý một hình ảnh có màu, bạn nên biết rằng nó sẽ có ba kênh - Đỏ, Lục và Lam (RGB). Do đó, sẽ có ba ma trận như vậy cho một hình ảnh

Cài đặt

Ghi chú. Vì chúng ta sẽ sử dụng OpenCV thông qua Python, nên yêu cầu ngầm định là bạn đã cài đặt sẵn Python (phiên bản 3) trên máy trạm của mình

các cửa sổ

$ pip install opencv-python

Hệ điều hành Mac

$ brew install opencv3 --with-contrib --with-python3

Linux

$ sudo apt-get install libopencv-dev python-opencv

Để kiểm tra xem cài đặt của bạn có thành công hay không, hãy chạy lệnh sau trong trình bao Python hoặc dấu nhắc lệnh của bạn

import cv2

Một số vấn đề cơ bản bạn nên biết

Trước khi chúng ta chuyển sang sử dụng Xử lý hình ảnh trong một ứng dụng, điều quan trọng là phải biết được loại thao tác nào thuộc danh mục này và cách thực hiện các thao tác đó. Các hoạt động này, cùng với các hoạt động khác, sẽ được sử dụng sau này trong các ứng dụng của chúng tôi. Vì vậy, hay thực hiện ngay bây giơ

Đối với bài viết này, chúng tôi sẽ sử dụng hình ảnh sau đây

Ghi chú. Hình ảnh đã được thu nhỏ để hiển thị trong bài viết này, nhưng kích thước ban đầu chúng tôi đang sử dụng là khoảng 1180x786

Bạn có thể nhận thấy rằng hình ảnh hiện đang được tô màu, có nghĩa là nó được thể hiện bằng ba kênh màu i. e. Đỏ, Xanh lục và Xanh lam. Chúng tôi sẽ chuyển đổi hình ảnh sang thang độ xám, cũng như chia hình ảnh thành các kênh riêng lẻ bằng mã bên dưới

Tìm chi tiết hình ảnh

Sau khi tải hình ảnh bằng hàm imread(), chúng ta có thể truy xuất một số thuộc tính đơn giản về nó, như số pixel và kích thước

import cv2

img = cv2.imread('rose.jpg')

print("Image Properties")
print("- Number of Pixels: " + str(img.size))
print("- Shape/Dimensions: " + str(img.shape))

đầu ra

Image Properties
- Number of Pixels: 2782440
- Shape/Dimensions: (1180, 786, 3)

Tách hình ảnh thành các kênh riêng lẻ

Bây giờ chúng ta sẽ chia hình ảnh thành các thành phần màu đỏ, xanh lục và xanh lam bằng OpenCV và hiển thị chúng

Để cho ngắn gọn, chúng tôi sẽ chỉ hiển thị hình ảnh thang độ xám

Hình ảnh thang độ xám

Ngưỡng hình ảnh

Khái niệm ngưỡng khá đơn giản. Như đã thảo luận ở trên trong biểu diễn hình ảnh, giá trị pixel có thể là bất kỳ giá trị nào trong khoảng từ 0 đến 255. Giả sử chúng ta muốn chuyển đổi một hình ảnh thành một hình ảnh nhị phân. e. gán một pixel giá trị 0 hoặc 1. Để làm điều này, chúng ta có thể thực hiện ngưỡng. Ví dụ: nếu giá trị Ngưỡng (T) là 125, thì tất cả pixel có giá trị lớn hơn 125 sẽ được gán giá trị là 1 và tất cả pixel có giá trị nhỏ hơn hoặc bằng giá trị đó sẽ được gán giá trị 0. Hãy làm điều đó thông qua mã để hiểu rõ hơn

Hình ảnh được sử dụng cho Ngưỡng

đầu ra

Như bạn có thể thấy, trong hình ảnh kết quả, hai vùng đã được thiết lập, trong. e. vùng đen (giá trị pixel 0) và vùng trắng (giá trị pixel 1). Hóa ra, ngưỡng chúng tôi đặt nằm ngay giữa hình ảnh, đó là lý do tại sao các giá trị đen trắng được chia ở đó

#1. Loại bỏ nhiễu khỏi hình ảnh

Bây giờ bạn đã có một ý tưởng cơ bản về xử lý ảnh là gì và nó được sử dụng để làm gì, hãy tiếp tục tìm hiểu về một số ứng dụng cụ thể của nó

Trong hầu hết các trường hợp, dữ liệu thô mà chúng tôi thu thập có tạp âm trong đó. e. các tính năng không mong muốn làm cho hình ảnh khó nhận biết. Mặc dù những hình ảnh này có thể được sử dụng trực tiếp để trích xuất tính năng, nhưng độ chính xác của thuật toán sẽ bị ảnh hưởng rất nhiều. Đây là lý do tại sao quá trình xử lý hình ảnh được áp dụng cho hình ảnh trước khi chuyển nó sang thuật toán để có độ chính xác cao hơn

Có nhiều loại nhiễu khác nhau, như nhiễu Gaussian, nhiễu muối tiêu, v.v. Chúng ta có thể loại bỏ nhiễu đó khỏi hình ảnh bằng cách áp dụng bộ lọc loại bỏ nhiễu đó hoặc ít nhất là giảm thiểu ảnh hưởng của nó. Có rất nhiều tùy chọn khi nói đến bộ lọc, mỗi bộ lọc đều có những điểm mạnh khác nhau và do đó, đây là cách tốt nhất cho một loại tiếng ồn cụ thể

Để hiểu điều này một cách chính xác, chúng ta sẽ thêm nhiễu 'muối và hạt tiêu' vào phiên bản thang độ xám của hình ảnh hoa hồng mà chúng ta đã xem xét ở trên, sau đó cố gắng loại bỏ nhiễu đó khỏi hình ảnh nhiễu của chúng ta bằng các bộ lọc khác nhau và xem bộ lọc nào là tốt nhất-

Được rồi, chúng tôi đã thêm nhiễu cho hình ảnh hoa hồng của mình và đây là giao diện của nó bây giờ

Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó

Hình ảnh ồn ào

Bây giờ hãy áp dụng các bộ lọc khác nhau trên đó và ghi lại các quan sát của chúng tôi. e. mỗi bộ lọc giảm tiếng ồn tốt như thế nào

Bộ lọc số học với hạt nhân sắc nét

Hình ảnh thu được, từ việc áp dụng bộ lọc số học trên hình ảnh có nhiễu hạt tiêu, được hiển thị bên dưới. Khi so sánh với hình ảnh thang độ xám ban đầu, chúng ta có thể thấy rằng nó làm sáng hình ảnh quá nhiều và không thể làm nổi bật các điểm sáng trên bông hồng. Do đó, có thể kết luận rằng bộ lọc số học không loại bỏ được nhiễu muối tiêu

Đầu ra bộ lọc số học

Bộ lọc trung điểm
from scipy.ndimage import maximum_filter, minimum_filter

def midpoint(img):
    maxf = maximum_filter(img, (3, 3))
    minf = minimum_filter(img, (3, 3))
    midpoint = (maxf + minf) / 2
    cv2_imshow(midpoint)

print("\n\n---Effects on S&P Noise Image with Probability 0.5---\n\n")
midpoint(sp_05)

Hình ảnh thu được, từ việc áp dụng Bộ lọc điểm trung bình trên hình ảnh có nhiễu hạt tiêu, được hiển thị bên dưới. Khi so sánh với hình ảnh thang độ xám ban đầu, chúng ta có thể thấy rằng, giống như phương pháp kernel ở trên, làm sáng hình ảnh quá nhiều; . Do đó, chúng ta có thể nói rằng nó là lựa chọn tốt hơn so với bộ lọc số học, nhưng nó vẫn không khôi phục hoàn toàn ảnh gốc

Đầu ra bộ lọc điểm giữa

Bộ lọc trung bình ngược điều hòa

Ghi chú. Việc triển khai các bộ lọc này có thể được tìm thấy trực tuyến một cách dễ dàng và cách chúng hoạt động chính xác nằm ngoài phạm vi của hướng dẫn này. Chúng tôi sẽ xem xét các ứng dụng từ cấp độ trừu tượng/cao hơn

def contraharmonic_mean(img, size, Q):
    num = np.power(img, Q + 1)
    denom = np.power(img, Q)
    kernel = np.full(size, 1.0)
    result = cv2.filter2D(num, -1, kernel) / cv2.filter2D(denom, -1, kernel)
    return result

print("\n\n--- Effects on S&P Noise Image with Probability 0.5 ---\n\n")
cv2_imshow(contraharmonic_mean(sp_05, (3,3), 0.5))

Hình ảnh thu được, từ việc áp dụng Bộ lọc Trung bình Contraharmonic trên hình ảnh có nhiễu hạt tiêu, được hiển thị bên dưới. Khi so sánh với hình ảnh thang độ xám ban đầu, chúng ta có thể thấy rằng nó đã tái tạo gần như chính xác hình ảnh giống như hình ảnh ban đầu. Mức cường độ/độ sáng của nó là như nhau và nó cũng làm nổi bật các điểm sáng trên hoa hồng. Do đó, chúng ta có thể kết luận rằng bộ lọc trung bình ngược điều hòa rất hiệu quả trong việc xử lý tiếng ồn muối tiêu.

Đầu ra bộ lọc trung bình ngược điều hòa

Bây giờ chúng tôi đã tìm thấy bộ lọc tốt nhất để khôi phục ảnh gốc từ ảnh nhiễu, chúng tôi có thể chuyển sang ứng dụng tiếp theo của mình

#2. Phát hiện cạnh bằng Canny Edge Detector

Hình ảnh hoa hồng mà chúng tôi đã sử dụng cho đến nay có nền không đổi. e. màu đen, do đó, chúng tôi sẽ sử dụng một hình ảnh khác cho ứng dụng này để thể hiện rõ hơn khả năng của thuật toán. Lý do là nếu nền không đổi, nó làm cho tác vụ phát hiện cạnh trở nên đơn giản hơn và chúng tôi không muốn điều đó

Chúng ta đã nói về bộ phân loại mèo trước đó trong hướng dẫn này, hãy tiếp tục lấy ví dụ đó và xem cách xử lý hình ảnh đóng vai trò không thể thiếu trong hướng dẫn đó.

Trong một thuật toán phân loại, hình ảnh đầu tiên được quét tìm 'đối tượng' i. e. khi bạn nhập một hình ảnh, thuật toán sẽ tìm tất cả các đối tượng trong hình ảnh đó và sau đó so sánh chúng với các đặc điểm của đối tượng mà bạn đang cố tìm. Trong trường hợp bộ phân loại mèo, nó sẽ so sánh tất cả các đối tượng được tìm thấy trong một hình ảnh với các đặc điểm của hình ảnh con mèo và nếu tìm thấy sự trùng khớp, nó sẽ cho chúng ta biết rằng hình ảnh đầu vào có chứa một con mèo

Vì chúng tôi đang sử dụng bộ phân loại con mèo làm ví dụ, nên sẽ công bằng khi chúng tôi sử dụng hình ảnh con mèo trong tương lai. Dưới đây là hình ảnh chúng tôi sẽ sử dụng

Hình ảnh được sử dụng để phát hiện cạnh

Đầu ra phát hiện cạnh

Như bạn có thể thấy, một phần của hình ảnh chứa một đối tượng, trong trường hợp này là một con mèo, đã được chấm/tách thông qua tính năng phát hiện cạnh. Bây giờ chắc hẳn bạn đang thắc mắc, Canny Edge Detector là gì và nó đã làm điều này như thế nào;

Để hiểu những điều trên, có ba bước chính cần được thảo luận. Đầu tiên, nó thực hiện giảm nhiễu trên hình ảnh theo cách tương tự mà chúng ta đã thảo luận trước đây. Thứ hai, nó sử dụng đạo hàm bậc nhất tại mỗi pixel để tìm các cạnh. Logic đằng sau điều này là tại điểm tồn tại cạnh, có sự thay đổi cường độ đột ngột, gây ra sự tăng đột biến về giá trị của đạo hàm đầu tiên, do đó biến pixel đó thành 'pixel cạnh'

Cuối cùng, nó thực hiện ngưỡng độ trễ; . Trước đó trong hướng dẫn này, chúng ta đã thảo luận về ngưỡng đơn giản là gì. Ngưỡng trễ là một cải tiến về điều đó, nó sử dụng hai giá trị ngưỡng thay vì một. Lý do đằng sau đó là, nếu giá trị ngưỡng quá cao, chúng ta có thể bỏ sót một số cạnh thực (âm thực) và nếu giá trị quá thấp, chúng ta sẽ nhận được rất nhiều điểm được phân loại là các cạnh thực sự không phải là cạnh (dương giả . Một giá trị ngưỡng được đặt cao và một giá trị được đặt thấp. Tất cả các điểm trên 'giá trị ngưỡng cao' được xác định là các cạnh, sau đó tất cả các điểm trên giá trị ngưỡng thấp nhưng dưới giá trị ngưỡng cao đều được đánh giá;

Đây là những khái niệm/phương pháp cơ bản mà thuật toán Canny Edge Detector sử dụng để xác định các cạnh trong ảnh

Phần kết luận

Trong bài viết này, chúng ta đã học cách cài đặt OpenCV, thư viện phổ biến nhất để xử lý ảnh bằng Python, trên các nền tảng khác nhau như Windows, MacOS và Linux, cũng như cách xác minh rằng quá trình cài đặt đã thành công

Chúng tôi tiếp tục thảo luận về Xử lý hình ảnh là gì và công dụng của nó trong lĩnh vực thị giác máy tính của Học máy. Chúng tôi đã nói về một số loại nhiễu phổ biến và cách chúng tôi có thể loại bỏ nhiễu khỏi ảnh bằng các bộ lọc khác nhau trước khi sử dụng ảnh trong ứng dụng của mình

Ngoài ra, chúng tôi đã tìm hiểu cách xử lý hình ảnh đóng vai trò không thể thiếu trong các ứng dụng cao cấp như Phát hiện đối tượng hoặc phân loại. Xin lưu ý rằng bài viết này chỉ là phần nổi của tảng băng trôi và Xử lý hình ảnh kỹ thuật số còn nhiều hơn nữa trong cửa hàng mà không thể trình bày hết trong một hướng dẫn. Đọc phần này sẽ cho phép bạn tìm hiểu sâu hơn và tìm hiểu về các khái niệm nâng cao khác liên quan đến xử lý ảnh. Chúc may mắn

Nêu các bước xử lý ảnh?

Các bước xử lý ảnh cơ bản .
Thu nhận ảnh. Thu nhận ảnh là bước đầu tiên trong xử lý ảnh. .
Nâng cao hình ảnh. .
Khôi phục hình ảnh. .
Xử lý ảnh màu. .
Wavelet và xử lý đa phân giải. .
Nén. .
xử lý hình thái. .
phân đoạn

Cách xử lý hình ảnh được thực hiện trong Python?

Hãy bắt đầu .
Bước 1. Nhập thư viện cần thiết. Gói Skimage cho phép chúng tôi xử lý hình ảnh bằng Python. .
Bước 2. Nhập hình ảnh. Khi chúng tôi có tất cả các thư viện, chúng tôi cần nhập tệp hình ảnh của mình vào python. .
Bước 3. Tìm số sao. .
Bước 4. Đã xác thực xem chúng tôi có chụp được tất cả các ngôi sao hay không

Ba bước xử lý ảnh là gì?

Xử lý ảnh bao gồm ba bước sau. .
Nhập hình ảnh thông qua các công cụ thu thập hình ảnh;
Phân tích và xử lý hình ảnh;
Đầu ra trong đó kết quả có thể là hình ảnh đã sửa đổi hoặc báo cáo dựa trên phân tích hình ảnh

Cái nào sau đây được sử dụng để xử lý hình ảnh trong Python?

Scipy . scipy là một mô-đun khoa học cốt lõi khác của Python giống như Numpy và có thể được sử dụng cho các tác vụ xử lý và thao tác hình ảnh cơ bản.