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
PIL
import
Image, ImageFilter
# Opening the image [R prefixed to string
# in order to deal with '\' in paths]
image
=
Image.
from
0from
1from
2from
3
from
4
from
5
image
=
from
8from
9from
3
PIL
1
image
=
PIL
4_______2_______5PIL
6
PIL
7
PIL
8PIL
9from
3
Đầ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
PIL
import
Image, ImageFilter
import
5=
Image.
from
0from
1Image, ImageFilter
0from
3
Image, ImageFilter
2
Image, ImageFilter
3
import
5=
Image, ImageFilter
6from
9from
3
Image, ImageFilter
9
# Opening the image [R prefixed to string
0_______8_______ # Opening the image [R prefixed to string
2PIL
5# Opening the image [R prefixed to string
4# Opening the image [R prefixed to string
5# Opening the image [R prefixed to string
6# Opening the image [R prefixed to string
5# Opening the image [R prefixed to string
8# Opening the image [R prefixed to string
9# in order to deal with '\' in paths]
0# Opening the image [R prefixed to string
6# Opening the image [R prefixed to string
9_______6_______0# Opening the image [R prefixed to string
6# Opening the image [R prefixed to string
9# in order to deal with '\' in paths]
0_______5_______6_______5_______9_______6_______0_______5_______6_______ 5_______6_______
image
3_______5_______9# in order to deal with '\' in paths]
0# Opening the image [R prefixed to string
6# Opening the image [R prefixed to string
9# in order to deal with '\' in paths]
0# Opening the image [R prefixed to string
6# Opening the image [R prefixed to string
9_______6_______0# Opening the image [R prefixed to string
6# Opening the image [R prefixed to string
9# in order to deal with '\' in paths]
0=
5# in order to deal with '\' in paths]
0# Opening the image [R prefixed to string
6=
8_______8_______9
Image.
0_______9_______1from
3
Đầ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