Article:
Tìm cạnh bằng Sobel filter
1733
id.cntt.tv/[Anonymous] 9Updated over 4 years ago |
Ý tưởng cơ bản của Edge Detection là nếu 1 điểm nằm trên đường viền (edge) giữa 2 vật thì các điểm 2 bên của nó có sự sai khác về độ sáng lớn. Ví dụ những điểm trên mũ của của cô Lena có màu khác với hình nền phía sau nên vành mũ sẽ là đường viền, nơi chia cắt 2 vật (mũ và nền) có độ sáng khác nhau. Chúng ta chỉ cần lấy 1 điểm làm trung tâm, tính toán sự sai khác về độ sáng giữa các điểm xung quanh nó, nếu vượt qua 1 ngưỡng nào đó (threshold) thì điểm được chọn sẽ là điểm nằm trên đường viền.
Có nhiều công thức được đưa ra, trong đó có công thức của Sobel mà người ta hay gọi là Sobel Filter. Sobel Filter là một ma trận 3×3, ví dụ như sau
1 2 1 0 0 0 -1 -2 -1Nhìn vào ta thấy hàng ở giữa đều là 0, nghĩa là ma trận này dùng để tìm đường viền ngang. Tương tự như vậy
1 0 1 2 0 -2 1 0 1dùng để tìm đường viền dọc.
Có tất cả 8 hướng nên sẽ cần 8 ma trận.
Chương trình demo chỉ dùng 2 ma trận tìm đường viền dọc, ngang.
- input
- Chuyển đổi ảnh màu thành đen trắng lưu vào mảng data
- process
- Tạo một mảng mới dataOut để lưu kết quả xử lý
- Áp dụng công thức của Sobel Filter để tính.
- Chú ý là ta bỏ qua các pixel nằm ngoài đường viền nên columns, rows phải trừ đi 2 **Những điểm có giá trị vượt quá THRESHOLD thì đổi sang màu trắng (đường viền), còn lại thì để nguyên màu đen (hình nền)
- output
- Xuất kết quả ra file ảnh
Chương trình demo và hình mẫu để ở đây. Nếu bạn đã cài Ruby, ImageMagick, RMagick thì lưu 2 file trên vào 1 thư mục rồi gõ lệnh “ruby sobel.rb” là chạy được
1 2 
Giải thuật căn bản về xử lí ảnh
9