Đến cuối hướng dẫn này, bạn sẽ có thể tự tin áp dụng các chức năng làm mờ của OpenCV cho hình ảnh của riêng mình
Để tìm hiểu cách thực hiện làm mịn và làm mờ với OpenCV, chỉ cần tiếp tục đọc
Tìm kiếm mã nguồn cho bài viết này?
Jump Right To The Downloads SectionLàm mịn và làm mờ OpenCV
Tôi khá chắc rằng tất cả chúng ta đều biết mờ là gì. Trực quan, đó là điều xảy ra khi máy ảnh của bạn chụp ảnh mất nét. Các vùng sắc nét hơn trong ảnh bị mất chi tiết. Mục tiêu ở đây là sử dụng bộ lọc thông thấp để giảm lượng nhiễu và chi tiết trong ảnh
Trên thực tế, điều này có nghĩa là mỗi pixel trong ảnh được trộn lẫn với cường độ pixel xung quanh nó. “Hỗn hợp” pixel này trong một vùng lân cận trở thành pixel bị mờ của chúng tôi
Mặc dù hiệu ứng này thường không mong muốn trong các bức ảnh của chúng tôi, nhưng nó thực sự khá hữu ích khi thực hiện các tác vụ xử lý ảnh. Trên thực tế, làm mịn và làm mờ là một trong những bước tiền xử lý phổ biến nhất trong xử lý hình ảnh và thị giác máy tính.
Ví dụ: chúng ta có thể thấy rằng làm mờ được áp dụng khi xây dựng một trình quét tài liệu đơn giản trên blog PyImageSearch. Chúng tôi cũng áp dụng tính năng làm mịn để hỗ trợ chúng tôi tìm điểm đánh dấu khi đo khoảng cách từ một đối tượng đến máy ảnh của chúng tôi. Trong cả hai ví dụ này, các chi tiết nhỏ hơn trong ảnh đều được làm mịn và chúng ta có nhiều khía cạnh cấu trúc hơn của ảnh
Như chúng ta sẽ thấy qua loạt bài hướng dẫn này, nhiều chức năng xử lý hình ảnh và thị giác máy tính, chẳng hạn như tạo ngưỡng và phát hiện cạnh, hoạt động tốt hơn nếu hình ảnh được làm mịn hoặc làm mờ lần đầu tiên
Tại sao làm mịn và làm mờ lại là một hoạt động tiền xử lý quan trọng như vậy?
Làm mịn và làm mờ là một trong những bước tiền xử lý quan trọng nhất trong tất cả các xử lý hình ảnh và thị giác máy tính. Bằng cách làm mịn hình ảnh trước khi áp dụng các kỹ thuật như phát hiện cạnh hoặc tạo ngưỡng, chúng tôi có thể giảm lượng nội dung tần số cao, chẳng hạn như nhiễu và các cạnh [i. e. , "chi tiết" của một hình ảnh]
Mặc dù điều này nghe có vẻ phản trực giác, nhưng bằng cách giảm chi tiết trong ảnh, chúng ta có thể dễ dàng tìm thấy các đối tượng mà chúng ta quan tâm hơn
Hơn nữa, điều này cho phép chúng tôi tập trung vào các đối tượng cấu trúc lớn hơn trong hình ảnh
Trong phần còn lại của bài học này, chúng ta sẽ thảo luận về bốn tùy chọn làm mịn và làm mờ chính mà bạn sẽ thường sử dụng trong các dự án của mình
- Làm mờ trung bình đơn giản
- Làm mờ Gaussian
- lọc trung bình
- lọc song phương
Bắt đầu nào
Định cấu hình môi trường phát triển của bạn
Để làm theo hướng dẫn này, bạn cần cài đặt thư viện OpenCV trên hệ thống của mình
May mắn thay, OpenCV có thể cài đặt bằng pip
$ pip install opencv-contrib-python
Nếu bạn cần trợ giúp để định cấu hình môi trường phát triển của mình cho OpenCV, tôi thực sự khuyên bạn nên đọc hướng dẫn cài đặt OpenCV theo pip của tôi — nó sẽ giúp bạn thiết lập và chạy trong vài phút
Bạn gặp sự cố khi định cấu hình môi trường phát triển của mình?
Tất cả những gì đã nói, là bạn
- Thời gian ngắn?
- Tìm hiểu trên hệ thống bị khóa quản trị của chủ nhân của bạn?
- Bạn muốn bỏ qua những rắc rối khi chiến đấu với dòng lệnh, trình quản lý gói và môi trường ảo?
- Bạn đã sẵn sàng chạy mã ngay bây giờ trên các hệ thống Windows, macOS hoặc Linux của mình chưa?
Sau đó tham gia Đại học PyImageSearch ngay hôm nay
Có quyền truy cập Jupyter Notebooks cho hướng dẫn này và các hướng dẫn khác của PyImageSearch được định cấu hình sẵn để chạy trên hệ sinh thái của Google Colab ngay trong trình duyệt web của bạn. Không cần cài đặt
Và trên hết, những Notebook Jupyter này sẽ chạy trên Windows, macOS và Linux
Cấu trúc dự án
Trước khi chúng ta có thể tìm hiểu cách áp dụng tính năng làm mờ với OpenCV, trước tiên hãy xem lại cấu trúc thư mục dự án của chúng ta
Bắt đầu bằng cách truy cập phần “Tải xuống” của hướng dẫn này để truy xuất mã nguồn và hình ảnh ví dụ
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files
Tập lệnh đầu tiên của chúng tôi,
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files4, sẽ chỉ cho bạn cách áp dụng độ mờ trung bình, độ mờ Gaussian và độ mờ trung bình cho một hình ảnh [
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files5] bằng OpenCV
Tập lệnh Python thứ hai,
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files6, sẽ trình bày cách sử dụng OpenCV để áp dụng hiệu ứng mờ hai bên cho hình ảnh đầu vào của chúng ta
Làm mờ trung bình [ cv2. mơ hồ ]
Phương pháp làm mờ đầu tiên chúng ta sẽ khám phá là tính trung bình
Bộ lọc trung bình thực hiện chính xác những gì bạn nghĩ nó có thể làm — lấy một vùng pixel bao quanh pixel trung tâm, tính trung bình cộng tất cả các pixel này lại với nhau và thay thế pixel trung tâm bằng pixel trung bình
Bằng cách lấy giá trị trung bình của khu vực xung quanh một pixel, chúng tôi sẽ làm mịn nó và thay thế nó bằng giá trị của vùng lân cận cục bộ của nó. Điều này cho phép chúng tôi giảm nhiễu và mức độ chi tiết, đơn giản bằng cách dựa vào mức trung bình
Bạn có nhớ khi chúng ta thảo luận về kernel và convolution không?
Để đạt được độ mờ trung bình, chúng tôi thực sự sẽ kết hợp hình ảnh của mình với một
Hạt nhân này sẽ trượt từ trái sang phải và từ trên xuống dưới cho từng pixel trong hình ảnh đầu vào của chúng ta. Pixel ở trung tâm của kernel [và do đó tại sao chúng ta phải sử dụng một số lẻ, nếu không sẽ không có "trung tâm" thực sự] sau đó được đặt thành trung bình của tất cả các pixel khác xung quanh nó
Hãy tiếp tục và xác định một
Lưu ý cách mỗi mục nhập của ma trận hạt nhân được tính trọng số đồng đều - chúng tôi đang tính trọng số bằng nhau cho tất cả các pixel trong hạt nhân. Một cách khác là cung cấp cho các pixel các trọng số khác nhau, trong đó các pixel ở xa pixel trung tâm đóng góp ít hơn vào mức trung bình;
Chúng ta cũng có thể định nghĩa một
Nhân này chiếm nhiều pixel hơn so với mức trung bình và sẽ làm mờ hình ảnh nhiều hơn
Do đó, điều này đưa chúng ta đến một quy tắc quan trọng. khi kích thước của hạt nhân tăng lên, mức độ mờ của hình ảnh cũng tăng theo
Chỉ cần đặt. nhân làm mịn của bạn càng lớn thì hình ảnh của bạn trông càng mờ
Để điều tra khái niệm này, hãy khám phá một số mã. Mở tệp
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files4 trong cấu trúc thư mục dự án của bạn và bắt đầu làm việc
# import the necessary packages import argparse import cv2 # construct the argument parser and parse the arguments ap = argparse.ArgumentParser[] ap.add_argument["-i", "--image", type=str, default="adrian.png", help="path to input image"] args = vars[ap.parse_args[]]
Dòng 2 và 3 nhập các gói cần thiết của chúng tôi trong khi Dòng 6-9 phân tích các đối số dòng lệnh của chúng tôi
Chúng tôi chỉ cần một đối số duy nhất,
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files8, là đường dẫn đến hình ảnh đầu vào của chúng tôi trên đĩa mà chúng tôi muốn áp dụng làm mịn và làm mờ cho. Theo mặc định, chúng tôi đặt đối số này thành
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files5
Bây giờ hãy tải hình ảnh đầu vào của chúng tôi từ đĩa
# load the image, display it to our screen, and initialize a list of # kernel sizes [so we can evaluate the relationship between kernel # size and amount of blurring] image = cv2.imread[args["image"]] cv2.imshow["Original", image] kernelSizes = [[3, 3], [9, 9], [15, 15]] # loop over the kernel sizes for [kX, kY] in kernelSizes: # apply an "average" blur to the image using the current kernel # size blurred = cv2.blur[image, [kX, kY]] cv2.imshow["Average [{}, {}]".format[kX, kY], blurred] cv2.waitKey[0]
Dòng 14 và 15 tải đầu vào của chúng tôi
# import the necessary packages import argparse import cv2 # construct the argument parser and parse the arguments ap = argparse.ArgumentParser[] ap.add_argument["-i", "--image", type=str, default="adrian.png", help="path to input image"] args = vars[ap.parse_args[]]0 từ đĩa và hiển thị nó trên màn hình của chúng tôi
Sau đó, chúng tôi xác định danh sách
# import the necessary packages import argparse import cv2 # construct the argument parser and parse the arguments ap = argparse.ArgumentParser[] ap.add_argument["-i", "--image", type=str, default="adrian.png", help="path to input image"] args = vars[ap.parse_args[]]1 trên Dòng 16 — kích thước của các hạt nhân này tăng dần để chúng tôi có thể hình dung tác động của kích thước hạt nhân đối với hình ảnh đầu ra
Từ đó, chúng tôi bắt đầu lặp lại từng kích thước hạt nhân trên Dòng 19
Để làm mờ trung bình một hình ảnh, chúng tôi sử dụng chức năng
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files0. Hàm này yêu cầu hai đối số. hình ảnh chúng tôi muốn làm mờ và kích thước của kernel
Như Dòng 22-24 hiển thị, chúng tôi làm mờ hình ảnh của mình bằng cách tăng kích thước hạt nhân. Hạt nhân của chúng ta càng lớn, hình ảnh của chúng ta sẽ càng mờ
Khi chạy tập lệnh này, bạn sẽ nhận được kết quả sau khi áp dụng hàm
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files0
Ở phía trên bên trái, chúng ta có hình ảnh đầu vào ban đầu. Ở trên cùng bên phải, chúng tôi đã làm mờ nó bằng
Một lần nữa, khi kích thước hạt nhân của bạn tăng lên, hình ảnh của bạn sẽ ngày càng mờ hơn. Điều này có thể dễ dàng dẫn đến việc bạn bị mất các cạnh của các đối tượng cấu trúc quan trọng trong ảnh. Chọn mức độ làm mịn phù hợp là rất quan trọng khi phát triển các ứng dụng thị giác máy tính của riêng bạn
Mặc dù làm mịn trung bình khá đơn giản để hiểu, nhưng nó cũng đánh trọng số từng pixel bên trong vùng nhân như nhau — và bằng cách này, hình ảnh của chúng ta sẽ dễ bị mờ quá mức và bỏ sót các cạnh quan trọng. Chúng ta có thể khắc phục vấn đề này bằng cách áp dụng làm mờ Gaussian
Làm mờ Gaussian [ cv2. GaussianBlur]
Tiếp theo, chúng ta sẽ xem xét làm mờ Gaussian. Làm mờ Gaussian tương tự như làm mờ trung bình, nhưng thay vì sử dụng giá trị trung bình đơn giản, chúng tôi hiện đang sử dụng giá trị trung bình có trọng số, trong đó các pixel lân cận gần pixel trung tâm hơn sẽ đóng góp nhiều "trọng lượng" hơn cho mức trung bình
Và như tên cho thấy, làm mịn Gaussian được sử dụng để loại bỏ nhiễu xấp xỉ theo phân phối Gaussian
Kết quả cuối cùng là hình ảnh của chúng ta ít bị mờ hơn, nhưng “mờ tự nhiên” hơn so với sử dụng phương pháp trung bình đã thảo luận trong phần trước. Hơn nữa, dựa trên trọng số này, chúng tôi sẽ có thể giữ được nhiều cạnh hơn trong hình ảnh của mình so với làm mịn trung bình
Giống như làm mờ trung bình, làm mịn Gaussian cũng sử dụng nhân
Tuy nhiên, vì chúng tôi đang tính trọng số cho các pixel dựa trên khoảng cách của chúng với pixel trung tâm, nên chúng tôi cần một phương trình để xây dựng nhân của chúng tôi. Phương trình của hàm Gaussian theo một hướng là
Và sau đó, việc mở rộng phương trình này theo hai hướng, một cho trục x và một cho trục y, tương ứng trở nên đơn giản
trong đó
Một lần nữa, như chúng ta sẽ thấy trong đoạn mã bên dưới, khi kích thước hạt nhân của chúng ta tăng lên thì mức độ mờ được áp dụng cho hình ảnh đầu ra của chúng ta cũng tăng theo. Tuy nhiên, hiệu ứng làm mờ sẽ có vẻ “tự nhiên” hơn và sẽ bảo vệ các cạnh trong ảnh của chúng ta tốt hơn so với làm mịn trung bình đơn giản
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files4
Dòng 27 và 28 chỉ cần đóng tất cả các cửa sổ đang mở và hiển thị hình ảnh ban đầu của chúng tôi làm điểm tham chiếu
Làm mờ Gaussian thực tế diễn ra trên Dòng 31-35 bằng cách sử dụng hàm
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files1. Đối số đầu tiên của hàm là hình ảnh chúng ta muốn làm mờ. Sau đó, tương tự như
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files0, chúng tôi cung cấp một bộ đại diện cho kích thước hạt nhân của chúng tôi. Một lần nữa, chúng tôi bắt đầu với kích thước nhân nhỏ là
Tham số cuối cùng là
# import the necessary packages import argparse import cv2 # construct the argument parser and parse the arguments ap = argparse.ArgumentParser[] ap.add_argument["-i", "--image", type=str, default="adrian.png", help="path to input image"] args = vars[ap.parse_args[]]6, chúng tôi đang hướng dẫn OpenCV tự động tính toán
Trong hầu hết các trường hợp, bạn sẽ muốn
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files1 để đảm bảo bạn hiểu ý nghĩa.
Chúng ta có thể thấy đầu ra của Gaussian blur trong Hình 3
Hình ảnh của chúng tôi có ít hiệu ứng mờ hơn so với khi sử dụng phương pháp lấy trung bình trong Hình 2;
Nói chung, tôi có xu hướng khuyên bạn nên bắt đầu với hiệu ứng làm mờ Gaussian đơn giản và điều chỉnh các tham số của bạn khi cần. Mặc dù độ mờ Gaussian chậm hơn một chút so với độ mờ trung bình đơn giản [và chỉ bằng một phần rất nhỏ], độ mờ Gaussian có xu hướng cho kết quả đẹp hơn nhiều, đặc biệt là khi áp dụng cho hình ảnh tự nhiên
Làm mờ trung tuyến [ cv2. medianBlur ]
Theo truyền thống, phương pháp làm mờ dải phân cách có hiệu quả nhất khi loại bỏ nhiễu muối tiêu. Loại tiếng ồn này chính xác là âm thanh của nó. hãy tưởng tượng chụp một bức ảnh, đặt nó trên bàn ăn của bạn và rắc muối và hạt tiêu lên trên nó. Sử dụng phương pháp làm mờ trung bình, bạn có thể loại bỏ muối và hạt tiêu khỏi hình ảnh của mình
Khi áp dụng độ mờ trung bình, trước tiên chúng tôi xác định kích thước hạt nhân của mình. Sau đó, như trong phương pháp làm mờ trung bình, chúng tôi xem xét tất cả các pixel trong vùng lân cận có kích thước
Lưu ý, không giống như làm mờ trung bình và làm mờ Gaussian trong đó kích thước hạt nhân có thể là hình chữ nhật, kích thước hạt nhân cho trung vị phải là hình vuông. Hơn nữa [không giống như phương pháp lấy trung bình], thay vì thay thế pixel trung tâm bằng giá trị trung bình của vùng lân cận, chúng tôi thay thế pixel trung tâm bằng trung vị của vùng lân cận
Lý do làm mờ trung bình hiệu quả hơn trong việc loại bỏ nhiễu kiểu muối tiêu khỏi hình ảnh là vì mỗi pixel trung tâm luôn được thay thế bằng cường độ pixel tồn tại trong hình ảnh. Và vì giá trị trung bình mạnh đối với các giá trị ngoại lệ, nên nhiễu muối tiêu sẽ ít ảnh hưởng đến giá trị trung bình hơn so với một phương pháp thống kê khác, chẳng hạn như giá trị trung bình
Một lần nữa, các phương pháp như phương tiện tính toán trung bình và Gaussian hoặc phương tiện có trọng số cho vùng lân cận - cường độ pixel trung bình này có thể có hoặc không có trong vùng lân cận. Nhưng theo định nghĩa, pixel trung vị phải tồn tại trong vùng lân cận của chúng ta. Bằng cách thay thế pixel trung tâm bằng trung vị thay vì trung bình, chúng tôi có thể giảm nhiễu đáng kể
Bây giờ hãy áp dụng độ mờ trung bình của chúng ta
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files9
Việc áp dụng độ mờ trung bình được thực hiện bằng cách gọi hàm
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files2. Phương thức này nhận hai tham số. hình ảnh chúng tôi muốn làm mờ và kích thước của hạt nhân của chúng tôi
Trên Dòng 42, chúng tôi bắt đầu lặp lại các kích thước hạt nhân [hình vuông]. Chúng tôi bắt đầu với kích thước hạt nhân là
# import the necessary packages import argparse import cv2 # construct the argument parser and parse the arguments ap = argparse.ArgumentParser[] ap.add_argument["-i", "--image", type=str, default="adrian.png", help="path to input image"] args = vars[ap.parse_args[]]9 và sau đó tăng lên thành
# load the image, display it to our screen, and initialize a list of # kernel sizes [so we can evaluate the relationship between kernel # size and amount of blurring] image = cv2.imread[args["image"]] cv2.imshow["Original", image] kernelSizes = [[3, 3], [9, 9], [15, 15]] # loop over the kernel sizes for [kX, kY] in kernelSizes: # apply an "average" blur to the image using the current kernel # size blurred = cv2.blur[image, [kX, kY]] cv2.imshow["Average [{}, {}]".format[kX, kY], blurred] cv2.waitKey[0]0 và
# load the image, display it to our screen, and initialize a list of # kernel sizes [so we can evaluate the relationship between kernel # size and amount of blurring] image = cv2.imread[args["image"]] cv2.imshow["Original", image] kernelSizes = [[3, 3], [9, 9], [15, 15]] # loop over the kernel sizes for [kX, kY] in kernelSizes: # apply an "average" blur to the image using the current kernel # size blurred = cv2.blur[image, [kX, kY]] cv2.imshow["Average [{}, {}]".format[kX, kY], blurred] cv2.waitKey[0]1
Các hình ảnh mờ trung bình thu được sau đó được xếp chồng lên nhau và hiển thị cho chúng ta xem trong Hình 4
Lưu ý rằng chúng tôi không còn tạo hiệu ứng “làm mờ chuyển động” như trong tính năng làm mờ Gaussian và trung bình — thay vào đó, chúng tôi đang loại bỏ nhiều chi tiết và nhiễu hơn đáng kể
Ví dụ: hãy xem màu sắc của những tảng đá ở bên phải tôi trong ảnh. Khi kích thước hạt nhân của chúng tôi tăng lên, chi tiết và màu sắc trên đá trở nên ít rõ rệt hơn. Vào thời điểm chúng tôi đang sử dụng
Điều tương tự cũng xảy ra đối với khuôn mặt của tôi trong ảnh — khi kích thước hạt nhân tăng lên, khuôn mặt của tôi nhanh chóng mất đi chi tiết và gần như hòa trộn với nhau
Độ mờ trung bình hoàn toàn không phải là “độ mờ tự nhiên” như làm mịn Gaussian. Tuy nhiên, đối với ảnh bị hỏng hoặc ảnh được chụp trong điều kiện dưới mức tối ưu, độ mờ trung bình thực sự có thể hữu ích như một bước tiền xử lý trước khi chuyển ảnh theo các phương pháp khác, chẳng hạn như tạo ngưỡng và phát hiện cạnh
Làm mờ hai bên [ cv2. bộ lọc song phương]
Phương pháp cuối cùng chúng ta sẽ khám phá là làm mờ song phương
Cho đến nay, mục đích của các phương pháp làm mờ của chúng tôi là giảm nhiễu và chi tiết trong ảnh;
Để giảm nhiễu trong khi vẫn duy trì các cạnh, chúng ta có thể sử dụng làm mờ song phương. Làm mờ song phương thực hiện điều này bằng cách giới thiệu hai bản phân phối Gaussian
Hàm Gaussian đầu tiên chỉ xem xét các lân cận không gian. Nghĩa là, các pixel xuất hiện gần nhau trong không gian tọa độ
Theo trực giác, điều này có ý nghĩa. Nếu các pixel trong cùng một vùng lân cận [nhỏ] có giá trị pixel giống nhau, thì chúng có thể đại diện cho cùng một đối tượng. Nhưng nếu hai pixel trong cùng một vùng lân cận có các giá trị tương phản, thì chúng tôi có thể kiểm tra cạnh hoặc ranh giới của một đối tượng — và chúng tôi muốn giữ lại cạnh này
Nhìn chung, phương pháp này có thể bảo toàn các cạnh của hình ảnh, trong khi vẫn giảm nhiễu. Nhược điểm lớn nhất của phương pháp này là nó chậm hơn đáng kể so với các phương pháp làm mờ trung bình, Gaussian và trung vị của nó
Hãy đi sâu vào mã để làm mờ song phương. Mở tệp
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files6 trong cấu trúc thư mục dự án của bạn và chúng tôi sẽ bắt đầu làm việc
# import the necessary packages import argparse import cv2 # construct the argument parser and parse the arguments ap = argparse.ArgumentParser[] ap.add_argument["-i", "--image", type=str, default="adrian.png", help="path to input image"] args = vars[ap.parse_args[]]
Dòng 2 và 3 nhập các gói Python cần thiết của chúng tôi trong khi Dòng 6-9 phân tích đối số dòng lệnh của chúng tôi
Một lần nữa, chỉ cần một đối số duy nhất,
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files8, là đường dẫn đến hình ảnh đầu vào mà chúng tôi muốn áp dụng làm mờ song phương cho
Bây giờ hãy tải hình ảnh của chúng tôi từ đĩa
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files7
Sau đó, chúng tôi xác định danh sách các tham số làm mờ trên Dòng 15. Các tham số này tương ứng với đường kính,
Từ đó, chúng tôi lặp lại từng bộ tham số này trên Dòng 18 và áp dụng tính năng lọc song phương bằng cách thực hiện cuộc gọi tới
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files3 trên Dòng 21
Cuối cùng, Dòng 24-27 hiển thị hình ảnh mờ của chúng tôi trên màn hình của chúng tôi
Hãy dành một chút thời gian và xem xét các thông số mà chúng tôi cung cấp cho
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files3. Tham số đầu tiên chúng tôi cung cấp là hình ảnh chúng tôi muốn làm mờ. Sau đó, chúng ta cần xác định đường kính của vùng lân cận pixel — đường kính này càng lớn thì càng có nhiều pixel được đưa vào tính toán làm mờ. Hãy nghĩ về tham số này như một kích thước hạt nhân hình vuông
Đối số thứ ba là độ lệch chuẩn màu của chúng tôi, được ký hiệu là
Cuối cùng, chúng ta cần cung cấp độ lệch chuẩn không gian mà chúng ta gọi là
Khi bạn thực thi tập lệnh này, bạn sẽ thấy đầu ra sau từ lọc song phương
Ở phía trên bên trái, chúng ta có hình ảnh đầu vào ban đầu. Và ở trên cùng bên phải, chúng tôi bắt đầu với đường kính
Hiệu ứng làm mờ của chúng tôi vẫn chưa hoàn toàn rõ ràng, nhưng nếu bạn phóng to các tảng đá và so sánh chúng với hình ảnh ban đầu của chúng tôi, bạn sẽ nhận thấy rằng phần lớn kết cấu đã biến mất. Những tảng đá trông nhẵn nhụi hơn nhiều, như thể chúng đã bị bào mòn và nhẵn nhụi qua nhiều năm dòng nước chảy xiết. Tuy nhiên, các cạnh và ranh giới giữa hồ và đá được duy trì rõ ràng
Bây giờ, hãy nhìn vào phía dưới bên trái nơi chúng tôi đã tăng cả
Các nút trên áo hoodie đen của tôi thực tế đã biến mất và gần như tất cả các chi tiết và nếp nhăn trên da của tôi đã được loại bỏ. Tuy nhiên, đồng thời vẫn có một ranh giới rõ ràng giữa tôi và nền của bức ảnh. Nếu chúng ta đang sử dụng độ mờ trung bình hoặc Gaussian, hậu cảnh sẽ hòa trộn với tiền cảnh
Cuối cùng, chúng ta có góc dưới bên phải, nơi tôi đã tăng
Bây giờ gần như tất cả các chi tiết và kết cấu từ đá, nước, bầu trời, da và áo hoodie của tôi đều biến mất. Nó cũng bắt đầu trông như thể số lượng màu trong hình ảnh đã bị giảm đi
Một lần nữa, đây là một ví dụ phóng đại và bạn có thể sẽ không áp dụng nhiều hiệu ứng làm mờ này cho hình ảnh, nhưng nó chứng tỏ hiệu ứng lọc song phương sẽ có trên các cạnh của bạn. chi tiết và kết cấu được làm mịn đáng kể, trong khi vẫn giữ được các đường viền và cạnh
Vậy là bạn đã có nó — tổng quan về các kỹ thuật làm mờ. Nếu vẫn chưa hoàn toàn rõ ràng khi nào bạn sẽ sử dụng từng phương pháp làm mờ hoặc làm mịn, thì không sao. Chúng ta sẽ xây dựng cơ bản dựa trên các kỹ thuật làm mờ này trong loạt bài hướng dẫn này và bạn sẽ thấy rất nhiều ví dụ về thời điểm áp dụng từng loại làm mờ. Hiện tại, chỉ cần cố gắng tiêu hóa tài liệu và lưu trữ làm mờ và làm mịn như một công cụ khác trong bộ công cụ của bạn
Kết quả làm mờ OpenCV
Bạn đã sẵn sàng chạy các tập lệnh làm mịn và làm mờ của chúng tôi chưa?
Đảm bảo truy cập phần “Tải xuống” của hướng dẫn này để truy xuất mã nguồn và hình ảnh ví dụ
Sau đó, bạn có thể áp dụng làm mịn và làm mờ cơ bản bằng cách thực thi tập lệnh
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files4
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files1
Để xem kết quả làm mờ song phương, hãy chạy lệnh sau
$ tree . --dirsfirst . ├── adrian.png ├── bilateral.py └── blurring.py 0 directories, 3 files2
Đầu ra của các tập lệnh này phải khớp với hình ảnh và số liệu tôi đã cung cấp ở trên
Cái gì tiếp theo?
Thông tin khóa học.
Tổng cộng hơn 60 lớp • Hơn 64 giờ video hướng dẫn mã theo yêu cầu • Cập nhật lần cuối. Tháng 12 năm 2022
★★★★★ 4. 84 [128 Xếp hạng] • Hơn 15.800 Học sinh Ghi danh
Tôi thực sự tin rằng nếu bạn có đúng giáo viên, bạn có thể thành thạo thị giác máy tính và học sâu
Bạn có nghĩ rằng việc học thị giác máy tính và học sâu tốn nhiều thời gian, quá sức và phức tạp không?
Đó không phải là trường hợp
Tất cả những gì bạn cần để thành thạo thị giác máy tính và học sâu là nhờ ai đó giải thích mọi thứ cho bạn bằng các thuật ngữ đơn giản, trực quan. Và đó chính xác là những gì tôi làm. Nhiệm vụ của tôi là thay đổi giáo dục và cách dạy các chủ đề Trí tuệ nhân tạo phức tạp
Nếu bạn nghiêm túc về việc học thị giác máy tính, điểm dừng chân tiếp theo của bạn phải là Đại học PyImageSearch, khóa học trực tuyến về thị giác máy tính, học sâu và OpenCV toàn diện nhất hiện nay. Tại đây, bạn sẽ học cách áp dụng thành công và tự tin tầm nhìn máy tính vào công việc, nghiên cứu và dự án của mình. Tham gia cùng tôi trong việc làm chủ thị giác máy tính
Bên trong Đại học PyImageSearch, bạn sẽ tìm thấy
- ✓ Hơn 60 khóa học về chủ đề thị giác máy tính thiết yếu, học sâu và OpenCV
- ✓ Hơn 60 Chứng chỉ Hoàn thành
- ✓ Hơn 64 giờ video theo yêu cầu
- ✓ Các khóa học hoàn toàn mới được phát hành thường xuyên, đảm bảo bạn có thể theo kịp các kỹ thuật tiên tiến nhất
- ✓ Máy tính xách tay Jupyter được định cấu hình sẵn trong Google Colab
- ✓ Chạy tất cả các mẫu mã trong trình duyệt web của bạn — hoạt động trên Windows, macOS và Linux [không yêu cầu cấu hình môi trường nhà phát triển. ]
- ✓ Truy cập kho lưu trữ mã tập trung cho tất cả hơn 500 hướng dẫn trên PyImageSearch
- ✓ Dễ dàng tải xuống bằng một cú nhấp chuột đối với mã, bộ dữ liệu, mô hình được đào tạo trước, v.v.
- ✓ Truy cập trên thiết bị di động, máy tính xách tay, máy tính để bàn, v.v.
Nhấn vào đây để tham gia Đại học PyImageSearch
Tóm lược
Trong hướng dẫn này, chúng ta đã học cách làm mịn và mờ hình ảnh bằng OpenCV. Chúng tôi bắt đầu bằng cách thảo luận về vai trò của hạt nhân trong việc làm mịn và làm mờ
Sau đó, chúng tôi đã xem xét bốn phương pháp chính để làm mịn hình ảnh trong OpenCV
- Làm mờ trung bình đơn giản
- Làm mờ Gaussian
- lọc trung bình
- lọc song phương
Phương pháp trung bình đơn giản nhanh, nhưng có thể không bảo toàn các cạnh trong ảnh
Áp dụng hiệu ứng làm mờ Gaussian tốt hơn trong việc bảo toàn các cạnh, nhưng chậm hơn một chút so với phương pháp trung bình
Bộ lọc trung vị chủ yếu được sử dụng để giảm nhiễu kiểu muối tiêu vì thống kê trung vị mạnh hơn nhiều và ít nhạy cảm hơn với các ngoại lệ so với các phương pháp thống kê khác như giá trị trung bình
Cuối cùng, bộ lọc song phương bảo toàn các cạnh, nhưng chậm hơn đáng kể so với các phương pháp khác. Lọc song phương cũng tự hào có hầu hết các tham số để điều chỉnh, điều này có thể gây phiền toái để điều chỉnh chính xác
Nói chung, tôi khuyên bạn nên bắt đầu với hiệu ứng làm mờ Gaussian đơn giản để có được đường cơ sở và sau đó bắt đầu từ đó
Để tải mã nguồn về bài đăng này [và được thông báo khi các hướng dẫn trong tương lai được xuất bản tại đây trên PyImageSearch], chỉ cần nhập địa chỉ email của bạn vào biểu mẫu bên dưới
Cái gì tiếp theo?
Thông tin khóa học.
Tổng cộng hơn 60 lớp • Hơn 64 giờ video hướng dẫn mã theo yêu cầu • Cập nhật lần cuối. Tháng 12 năm 2022
★★★★★ 4. 84 [128 Xếp hạng] • Hơn 15.800 Học sinh Ghi danh
Tôi thực sự tin rằng nếu bạn có đúng giáo viên, bạn có thể thành thạo thị giác máy tính và học sâu
Bạn có nghĩ rằng việc học thị giác máy tính và học sâu tốn nhiều thời gian, quá sức và phức tạp không?
Đó không phải là trường hợp
Tất cả những gì bạn cần để thành thạo thị giác máy tính và học sâu là nhờ ai đó giải thích mọi thứ cho bạn bằng các thuật ngữ đơn giản, trực quan. Và đó chính xác là những gì tôi làm. Nhiệm vụ của tôi là thay đổi giáo dục và cách dạy các chủ đề Trí tuệ nhân tạo phức tạp
Nếu bạn nghiêm túc về việc học thị giác máy tính, điểm dừng chân tiếp theo của bạn phải là Đại học PyImageSearch, khóa học trực tuyến về thị giác máy tính, học sâu và OpenCV toàn diện nhất hiện nay. Tại đây, bạn sẽ học cách áp dụng thành công và tự tin tầm nhìn máy tính vào công việc, nghiên cứu và dự án của mình. Tham gia cùng tôi trong việc làm chủ thị giác máy tính
Bên trong Đại học PyImageSearch, bạn sẽ tìm thấy
- ✓ Hơn 60 khóa học về chủ đề thị giác máy tính thiết yếu, học sâu và OpenCV
- ✓ Hơn 60 Chứng chỉ Hoàn thành
- ✓ Hơn 64 giờ video theo yêu cầu
- ✓ Các khóa học hoàn toàn mới được phát hành thường xuyên, đảm bảo bạn có thể theo kịp các kỹ thuật tiên tiến nhất
- ✓ Máy tính xách tay Jupyter được định cấu hình sẵn trong Google Colab
- ✓ Chạy tất cả các mẫu mã trong trình duyệt web của bạn — hoạt động trên Windows, macOS và Linux [không yêu cầu cấu hình môi trường nhà phát triển. ]
- ✓ Truy cập kho lưu trữ mã tập trung cho tất cả hơn 500 hướng dẫn trên PyImageSearch
- ✓ Dễ dàng tải xuống bằng một cú nhấp chuột đối với mã, bộ dữ liệu, mô hình được đào tạo trước, v.v.
- ✓ Truy cập trên thiết bị di động, máy tính xách tay, máy tính để bàn, v.v.
Nhấn vào đây để tham gia Đại học PyImageSearch
Tải xuống Mã nguồn và Hướng dẫn tài nguyên 17 trang MIỄN PHÍ
Nhập địa chỉ email của bạn dưới đây để có được một. zip của mã và Hướng dẫn tài nguyên 17 trang MIỄN PHÍ về Thị giác máy tính, OpenCV và Học sâu. Bên trong, bạn sẽ tìm thấy các hướng dẫn, sách, khóa học và thư viện được chọn lọc thủ công của tôi để giúp bạn thành thạo CV và DL