Cách phát hiện cạnh và cắt ảnh trong python

Phát hiện cạnh, là một nguyên tắc Xử lý ảnh kết hợp các phương pháp toán học để tìm các cạnh trong Ảnh kỹ thuật số. Phát hiện cạnh hoạt động bên trong bằng cách chạy bộ lọc/Kernel trên Hình ảnh kỹ thuật số, phát hiện sự không liên tục trong các vùng Hình ảnh như thay đổi rõ rệt về giá trị độ sáng/Cường độ của pixel. Có hai hình thức phát hiện cạnh

  • Phát hiện cạnh dựa trên tìm kiếm [Đạo hàm bậc nhất]
  • Phát hiện cạnh dựa trên Zero Crossing [Đạo hàm bậc hai]

Một số phương pháp phát hiện cạnh thường được biết đến là

  • Toán tử Laplacian hoặc Phát hiện cạnh dựa trên Laplacian [đạo hàm bậc hai]
  • Máy dò cạnh Canny [Đạo hàm bậc nhất]
  • Toán tử Prewitt [Đạo hàm bậc nhất]
  • Toán tử Sobel [Đạo hàm bậc nhất]

Chúng tôi sẽ triển khai Toán tử Laplacian để kết hợp tính năng Phát hiện cạnh trong một trong các ví dụ sau của chúng tôi. Với mục đích này, chúng tôi sẽ sử dụng thư viện gối. Để cài đặt thư viện, hãy thực hiện lệnh sau trong dòng lệnh

pip install pillow

GHI CHÚ. - Một số bản phân phối Linux có xu hướng cài đặt sẵn Python và Gối

Có hai cách để chúng tôi triển khai Phát hiện cạnh trên hình ảnh của mình. Trong phương thức đầu tiên, chúng ta sẽ sử dụng một phương thức sẵn có được cung cấp trong thư viện gối [ImageFilter. FIND_EDGES] để phát hiện cạnh. Trong phần thứ hai, chúng ta sẽ tạo Bộ lọc Laplacian bằng PIL. Bộ lọc hình ảnh. Kernel[], và sau đó sẽ sử dụng bộ lọc đó để phát hiện cạnh

TẠP CHÍ LAPLACIAN. -

 

HÌNH ẢNH MẪU. -

Phương pháp 1

Python3




from PILimport Image, ImageFilter

 

 

# Opening the image [R prefixed to string

# in order to deal with '\' in paths]

image= Image.from0from1from2from3

 

from4

from5

image= from8from9from3

 

PIL1

image= PIL4_______2_______5PIL6

 

PIL7

PIL8PIL9from3

Đầu ra [Cạnh_Sample. png]

Giải trình. -

Đầu tiên, chúng tôi tạo một đối tượng hình ảnh của hình ảnh của chúng tôi bằng Image. mở ra[]. Sau đó, chúng tôi chuyển đổi chế độ Màu hình ảnh thành thang độ xám, vì đầu vào cho toán tử Laplacian ở chế độ thang độ xám [nói chung]. Sau đó, chúng tôi chuyển hình ảnh vào Hình ảnh. filter[] bằng cách chỉ định ImageFilter. Đối số FIND_EDGES, lần lượt chạy kernel phát hiện cạnh trên đầu hình ảnh. Đầu ra của chức năng trên dẫn đến một hình ảnh có các thay đổi cường độ cao [các cạnh] có màu trắng và phần còn lại của hình ảnh có màu đen

Phương pháp 2

Python3




from PILimport Image, ImageFilter

 

import5= Image.from0from1Image, ImageFilter0from3

 

Image, ImageFilter2

Image, ImageFilter3

import5= Image, ImageFilter6from9from3

 

Image, ImageFilter9

# Opening the image [R prefixed to string0_______8_______ # Opening the image [R prefixed to string2PIL5# Opening the image [R prefixed to string4# Opening the image [R prefixed to string5# Opening the image [R prefixed to string6# Opening the image [R prefixed to string5# Opening the image [R prefixed to string8# Opening the image [R prefixed to string9# in order to deal with '\' in paths]0# Opening the image [R prefixed to string6# Opening the image [R prefixed to string9_______6_______0# Opening the image [R prefixed to string6# Opening the image [R prefixed to string9# in order to deal with '\' in paths]0_______5_______6_______5_______9_______6_______0_______5_______6_______ 5_______6_______

image3_______5_______9# in order to deal with '\' in paths]0# Opening the image [R prefixed to string6# Opening the image [R prefixed to string9# in order to deal with '\' in paths]0# Opening the image [R prefixed to string6# Opening the image [R prefixed to string9_______6_______0# Opening the image [R prefixed to string6# Opening the image [R prefixed to string9# in order to deal with '\' in paths]0=5# in order to deal with '\' in paths]0# Opening the image [R prefixed to string6=8_______8_______9

 

Image.0_______9_______1from3

Đầu ra [EDGE_sample. png]

Giải trình. -

Đầu tiên, chúng tôi tạo một đối tượng hình ảnh của hình ảnh của chúng tôi bằng Image. mở ra[]. Sau đó, chúng tôi chuyển đổi chế độ Màu hình ảnh thành thang độ xám, vì đầu vào cho toán tử Laplacian ở chế độ thang độ xám [nói chung]. Sau đó, chúng tôi chuyển hình ảnh vào Hình ảnh. filter[] bằng cách chỉ định toán tử/Kernel bên trong hàm làm đối số. Kernel được chỉ định bằng cách sử dụng ImageFilter. Kernel[[3, 3], [-1, -1, -1, -1, 8, -1, -1, -1, -1], 1, 0]] tạo Kernel 3 X 3 [3 . Đối số 1 [sau kernel] là viết tắt của giá trị Tỷ lệ, chia giá trị cuối cùng sau mỗi thao tác kernel, do đó chúng tôi đặt giá trị đó thành 1 vì chúng tôi không muốn bất kỳ phép chia nào cho giá trị cuối cùng của mình. Đối số 0 [sau giá trị Tỷ lệ] là phần bù được thêm vào sau phép chia theo giá trị Tỷ lệ. Chúng tôi đã đặt giá trị đó thành 0 vì chúng tôi không muốn bất kỳ mức tăng nào đối với giá trị cường độ cuối cùng sau Tích chập hạt nhân. Đầu ra của chức năng trên dẫn đến một hình ảnh có các thay đổi cường độ cao [các cạnh] có màu trắng và phần còn lại của hình ảnh có màu đen

phụ lục –

Cả hai chương trình đều cho kết quả như nhau. Lý do là thực tế là chức năng sẵn có ImageFilter. FIND_EDGE sử dụng Hạt nhân/Toán tử Laplacian có kích thước 3 X 3 trong nội bộ. Do đó chúng tôi đã kết thúc với kết quả giống hệt nhau. Lợi ích của việc sử dụng Kernel thay vì dựa vào các hàm sẵn có là chúng ta có thể xác định các kernel theo nhu cầu của mình, có thể có/không có trong thư viện. Chẳng hạn như chúng ta có thể tạo Kernel để làm mờ, làm sắc nét, phát hiện cạnh [sử dụng Kernel khác], v.v. Ngoài ra, tôi đã cố ý chọn Laplacian để chúng tôi có thể duy trì tính nhất quán trong kết quả

Lợi ích của việc sử dụng Laplacian. - Kết quả nhanh và khá. Các công cụ phát hiện cạnh phổ biến khác như Sobel [đạo hàm bậc nhất] đắt hơn khi tính toán, vì chúng yêu cầu tìm Độ dốc theo hai hướng và sau đó Bình thường hóa kết quả.  

Hạn chế của việc sử dụng laplacian. - Kết hợp với Laplacian Kernel dẫn đến nhiều tiếng ồn ở đầu ra. Sự cố này được giải quyết bằng các phương pháp Phát hiện cạnh khác như Sobel, Prewitt Operator, v.v. Vì chúng có Gaussian Blur Kernel tích hợp sẵn trong đó. Làm giảm nhiễu thu được từ hình ảnh đầu vào. Chúng cũng dẫn đến khả năng phát hiện cạnh chính xác hơn, do tính toán cao hơn liên quan đến việc tìm kiếm chúng

Làm thế nào để Python phát hiện các cạnh trong một hình ảnh?

Mở một tệp Python mới và làm theo. .
nhập cv2 nhập numpy dưới dạng np nhập matplotlib. pyplot dưới dạng plt
# đọc hình ảnh hình ảnh = cv2. .
# chuyển nó sang thang độ xám xám = cv2. .
# hiển thị hình ảnh thang độ xám plt. .
# thực hiện bộ phát hiện cạnh canny để phát hiện các cạnh của hình ảnh các cạnh = cv2. .
nhập numpy dưới dạng np nhập cv2 cap = cv2

Điều gì được sử dụng để OpenCV được sử dụng để phát hiện các cạnh của hình ảnh?

Trong bài viết này, thuật toán phát hiện cạnh canny phổ biến được sử dụng để phát hiện nhiều loại cạnh trong hình ảnh. OpenCV có chức năng dựng sẵn cv2. Canny[] lấy hình ảnh đầu vào của chúng tôi làm đối số đầu tiên và kích thước khẩu độ của nó [giá trị tối thiểu và giá trị tối đa] làm hai đối số cuối cùng.

Chủ Đề