Nếu vì một lý do nào đó, bạn bị giới hạn trong việc sử dụng các hoạt động hình thái, thì bạn có thể xem xét sử dụng "sơ đồ bỏ phiếu" của các hoạt động gần theo định hướng.
Một vấn đề với các hoạt động hình thái là chúng không thực sự tính đến tính định hướng. Đối với pixel trung tâm, một vùng lân cận như thế này
1 0 0
1 1 0
0 1 1
thực sự không khác gì một khu phố như thế này
0 1 0
1 1 0
1 1 0
Điều đó có thể gây ra vấn đề vì sự giãn nở và xói mòn không thiên về hướng khi bạn có thể thích chúng. Vì vậy, một điều bạn có thể làm là tìm hoạt động hình thái sai lệch định hướng thích hợp nhất bằng cách sử dụng các nhân như thế này:
1 1 0 1 0 0 1 0 0
0 1 0 1 1 0 1 1 0
0 1 1 0 1 1 0 1 1 . . .
Điều này sẽ tốt hơn với 5 x 5 hạt nhân, nhưng tôi nghĩ ý tưởng này đã đủ rõ ràng. Về cơ bản, ý tưởng về hạt nhân phát hiện góc được kéo dài một chút để nó là hạt nhân phát hiện phân đoạn dòng. Bạn cũng có thể sử dụng nó để tìm đường cong phù hợp nhất:
0 0 0 1 1
0 0 1 1 0
0 1 1 0 0
0 0 1 1 0
0 0 0 1 1
Rõ ràng điều này dẫn đến một số lượng lớn hạt nhân, nhưng nếu ý tưởng cơ bản hoạt động cho thấy lời hứa cho bạn thì có một cách để tối ưu hóa kỹ thuật để tìm thấy hạt nhân phù hợp nhất trong một lần chạy.
Trong mọi trường hợp, nếu bạn sử dụng nhiều hạt nhân và một số logic, mỗi thao tác tại (x, y) đòi hỏi nhiều tính toán hơn một bước hình thái truyền thống:
- Tại mỗi pixel (x, y), áp dụng từng toán tử hình thái. Đối với mỗi toán tử, tính cả kết quả của phép toán hình thái VÀ mức độ đầu vào khớp với hạt nhân. ("Độ" = số pixel phù hợp)
- Chọn kết quả hình thái cho hạt nhân phù hợp nhất với cấu hình pixel bật / tắt thực tế.
Kích thước của hạt nhân phải phù hợp với kích thước của đầu vào. Thay vì sử dụng kernel lớn hơn, bạn có thể sử dụng kernel "lây lan" để giảm số lượng thao tác. Hạt nhân sau chỉ là hạt nhân 3 x 3 với bán kính lớn hơn 1.
1 0 0 0 0 0 0
0 0 0 0 0 0 0
1 0 0 1 0 0 0
0 0 0 0 0 0 0
1 0 0 0 0 0 1