Về cơ bản , đây là bộ lọc làm mờ ảnh sử dụng hàm Gauss . Phương trình hàm Gauss trong không gian 2 chiều như sau :
Trong đó :
x , y : tọa độ theo trục đứng và ngang, là tham số
σ : nói nôm na là ngưỡng , là độ mạnh, cũng là 1 tham số
e : số e , trong C# dùng Math.Exp([số mũ của e])
π : số Pi , trong C# dùng Math.PI
Tiếp tục quay trở lại bộ lọc , ngoài hàm Gauss , ta còn phải sử dụng 1 nhân ( kernel ) . Nhân này là 1 ma trận 2 chiều với số lượng phần tử là lẻ . Ví dụ : 3 x 3 , 5 x 5 .
Vd áp dụng hàm Gauss với " ngưỡng " = 1 . Kết quả hàm Gauss cho ta 01 nhân 3 x 3 như sau :
G(-1,-1)=0.0585498 | G(0,-1)=0.0965324 | G(1,-1)=0.0585498 |
G(-1,0)=0.0965324 | G(0,0)=0.159155 | G(1,0)=0.0965324 |
G(-1,1)=0.0585498 | G(0,1)=0.0965324 | G(1,1)=0.0585498 |
Với ảnh 3 x 3 pixel có điểm màu như sau :
A(R = 10, G = 11, B = 12) , B(5,6,7) , C(9,8,7)
D(10,11,12) , E(5,6,7) , F(9,8,7)
G(10,11,12) , H(5,6,7) , I(9,8,7)
Ta áp dụng nhân :
- Đầu tiên tính khoảng cách từ cạnh viền cho đến pixel được xử lý :
Khoảng cách = (độ rộng nhân - 1)/2 .
Với nhân 3 x 3 vd trên , ta được khoảng cách là 1.
- Pixel được xử lý :
Từ [khoảng cách, khoảng cách] đến [rộng hình-khoảng cách-1, cao hình-khoảng cách-1]
Với vd đã cho , ta được từ [1,1] đến [3 - 1 - 1, 3 - 1 - 1] ( [1,1] ) , tức điểm màu E
- Xử lý :
* E' : E'R' = AR * G(-1,-1) + BR * G(0,-1) + ... + IR * G(1,1)
Tương tự cho G và B
Kết quả là ảnh trên có 03 pixel mới là :
ABC
DE'F
GHI
Lưu ý:
Để đảm bảo hình ảnh không bị đổi màu quá nhiều , nhân cần phải được xử lý lại . Vd với nhân trên , ta lấy tổng từ G(-1, -1) đến G(1, 1) . Sau đó lấy từng G chia cho tổng đó.
0 bình luận:
Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.