Top Ad unit 728 × 90

Latest news

recent

Gaussian Blur

Gaussian Blur là cách làm mờ một ảnh bằng hàm Gaussian. Phương pháp này được ứng dụng một cách rộng rãi và hiệu quả trong các phần mềm xử lý đồ họa. Nó cũng là công cụ phổ biến để thực hiện quá trình tiền xử lý (preprocessing) hình ảnh dùng làm dữ liệu đầu vào tốt cho các phân tích cao cấp hơn như trong Computer Vision, hoặc cho các giải thuật được thực hiện trong một tỉ lệ khác của hình được cho. Nó có thể giúp làm giảm nhiễu (Noise) và mức độ chi tiết (không mong muốn) của hình ảnh.
Một cách trực quan, đây được xem như là phương pháp làm mờ mịn cũng giống như hiệu ứng hình ảnh được đặt dưới một lớp màn trong suốt bị mờ. Nó không giống với trường hợp hình ảnh bị mờ do hậu quả của ống kính bị mất tiêu điểm (out of focus) hay do bóng của đối tượng dưới ánh sáng thường.
Trong toán học, việc ứng dụng Gaussian Blur cho một hình cũng chính là tính tích chập (Convolution) hình đó với hàm Gaussian. Vì biến đổi Fourier của một Gaussian sẽ tạo ra một Gaussian khác cho nên nếu xét trên miền tần số thì phương pháp này sẽ làm giãm các thành phần có tần số cao trong hình. Hay nói cách khác Gaussian Blur là một bộ lọc tần số cao (low pass filter : chỉ giữ lại các thành phần tần số thấp).
Hình gốc


Hình bị Blur

Như vậy phát biểu một cách thực hành hơn Gaussian blurr là một loại bộ lọc làm mờ ảnh, sử dụng lý thuyết hàm Gaussian (cũng được biết đến như là dạng phân tán chuẩn (Normal Distribution) trong thống kê) để tính toán việc chuyển đổi (Transformation) mỗi Pixel của hình. Dưới đây là phương trình hàm Gaussian dùng trong không gian một chiều và hai chiều.

Một chiều
Hai chiều (image)

Trong đó x và y là tọa độ theo hai trục đứng và ngang còn σ là phương sai chuẩn của phân tán Gaussian hay là giá trị quyết định độ lệch giữa các điểm trên bề mặt Gaussian. Trong không gian hai chiều, công thức này sản sinh ra những đường viền là những đường tròn đồng tâm, tuân theo logic phân tán Gaussian từ điểm trung tâm. Giá trị từ hệ thống phân tán này sẽ được sử dụng để xây dựng một ma trận tích chập (Convolution) dùng tính tóan phép tích chập (Convolution) với hình ảnh gốc. Các phương pháp tính Convolution khi biết ma trận tích chập (kernel) và ma trận gốc (ma trận ảnh) có thể được tham khảo trong bài viết về Convolution trong blog này.

Giá trị mới của mỗi Pixel sau khi tính tích chập với kernel đại diện cho hàm Gaussian có thể coi là trung bình lượng giá của các pixel xung quanh nó. Ta thấy rằng giá trị lượng giá của phần tử trung tâm kernel tương ứng với pixel đang xét là lớn nhất, giá trị này sẽ nhỏ hơn đối với các phần tử tương ứng với những pixel kế cận một cách đối xứng và tỉ lệ thuận với khoảng cách của phần tử này với trung tâm. Tính chất này giúp giữ lại đường viền và biên cũng như làm mờ một cách đồng bộ hơn so với các phương pháp khác.

Trong lý thuyết, hàm Gaussian tại mỗi điểm trên hình là khác 0. Điều này có nghĩa là Gaussian Kernel nên có kích thước bằng với hình ảnh và giá trị tại mỗi phần tử luôn khác 0. Tuy nhiên trong thực hành, do việc tính tóan dựa trên xấp xỉ rời rạc (Discrete Approximation) cho nên giá trị của các phần tử trên bề mặt Gaussian ở khỏang cách lớn hơn 3σ so với trung tâm gần như không đáng kể (tiệm cận 0). Do vậy các phân tán Gaussian ngòai bán kính này sẽ bị bỏ qua, đó cũng là lý do mà thông thường Gaussian kernel có kích thước giới hạn 3, 5, 7... (Cái này còn tùy vào giá trị phương sai chuẩn mà bạn chọn). Khoảng cách giữa hai điểm gần nhau trong Gaussian Kernel là σ.

Do đặc tính có cấu trúc như những hình tròn đối xứng, với hình hai chiều, Gaussian blur có thể được áp dụng như là hai phép tính toán một chiều độc lập (Độc lập tuyến tính - Linearly Separable). Có nghĩa là hiệu quả thu được từ tính toán trên ma trận hai chiều có thể tương đương với cách ứng dụng tính toán một loạt các Gaussian 1 chiều theo hướng ngang và đứng. Điều này rất hữu ích trong việc giảm chi phí tính toán thể hiện khá rỏ trong hai công thức tương ứng sau:
Một vấn đề cần quan tâm nữa của Gaussian blur là nếu bạn sử dụng lần lượt nhiều Gaussian cho một ảnh thì kết quả cũng tương đương với khi bạn dùng một Gaussian lớn hơn có bán kính bằng căn bậc hai tổng bình phương các bán kính của các Gaussian đã dùng, ví dụ: Cũng vì mối quan hệ này mà thời gian tính toán sẽ không thể được tiết kiệm khi bạn chia nhỏ các Gaussian. Do đó khuyến cáo nên sử dụng Gaussian đơn trong tính toán nếu có thể.

Ngoài ra Gaussian blur cũng được sử dụng để giảm kích thước của hình ảnh. Khi tiến hành xử lý giảm tỉ lệ lấy mẩu tín hiệu cho ảnh (Downsampling) người ta thường áp dụng bộ lọc tần số cao (Low pass filter) trước khi tái lấy mẫu. Điều này là để chắc chắn những thông tin không mong muốn, tần số cao sẽ không xuất hiện trong hình đã được Downsampling... (loại bỏ răng cưa Aliasing).

Với những gì đã trình bày ở trên, chúng ta cũng đã nhắc tới bề mặt, ma trận Gaussian, đó chính là hiện thực hóa của hàm Gaussian trong thực hành. Hàm Gaussian được áp dụng vào ảnh thông qua phép Convolution giữa ma trận Gaussian và ma trận điểm ảnh 2 chiều. Dưới đây là một ví dụ của ma trận Gaussian được tạo ra bằng công thức Gaussian ở trên với σ = 0.84089642 và sau đó chuẩn hóa lại. Lưu ý quan sát và so sánh với các đặc tính nêu trên nhằm làm rỏ thêm các vấn đề đã được trình bày.

Binh Nguyen - Bioz
Gaussian Blur Reviewed by Bioz on 8:09:00 PM Rating: 5

13 comments:

  1. Một số câu hỏi quá cẩu thả, tiếng Việt không dấu nên đã không được hiển thị và trả lời, thông cảm.

    ReplyDelete
  2. ko có code ạ. Đọc ko thế này ko hiểu lắm ạ

    ReplyDelete
  3. code chỉ đơn giản là phép convolution giữa ảnh và Gaussian kernel. Cách implement 1 phép convolution như thế nào em hãy đọc bài viết

    http://www.ieev.org/2009/05/tich-chap-convolution-va-thuc-hanh.html

    Trong đó có giải thích và mã nguồn rất rỏ ràng. Trong đó Matrix sẽ được thay bằng dữ liệu ảnh cần blur, kernel chính là Gaussian Kernel có định dạng như trình bày trong bài viết trên.

    ReplyDelete
  4. Anh có viết là "Gaussian kernel có kích thước giới hạn 3, 5, 7... (Cái này còn tùy vào giá trị phương sai chuẩn mà bạn chọn). Khoảng cách giữa hai điểm gần nhau trong Gaussian Kernel là σ". Em đã làm thử với σ trong khoảng [0,1] và kích cỡ 3 mà ảnh cứ thành màu đen cả. Vậy anh cho em hỏi nên chọn kích cỡ bao nhiêu với σ trong khoảng [0,1]

    ReplyDelete
  5. xích ma là giá trị lệch của các điểm ảnh lân cận, vì vậy mà trong trường hợp giá trị xích ma em lấy trong khoảng [0, 1] là xích ma đã được nomarlize, với normalize thì giá trị pixel cũng phải được ánh xạ vào khoảng [0, 1] chứ không còn là [0, 255] nữa. Đó chính là một chút khác biệt về mặt triển khai giữa lý thuyết và thực hành. Để dễ dàng thì em có thể dùng giá trị xích ma như ví dụ sau:

    http://www.smokycogs.com/blog/image-processing-in-c-sharp-gaussian-blur/

    ReplyDelete
  6. anh có thể nói cho em rõ hơn về xích ma được không ạ, giá trị lệch của các điểm ảnh lân cận là sao ạ?

    ReplyDelete
  7. Chào anh.

    Anh có thể giải thích cho em rõ hơn về: "Gaussian Blur là một bộ lọc tần số cao (low pass filter : chỉ giữ lại các thành phần tần số thấp)" được không ạh? Theo em biết thì lọc tần số cao (high pass filter) tức là những tần số cao thì cho qua, hay nói cách khác là loại bỏ tần số thấp, không biết em hiểu thế có đúng không?

    ReplyDelete
  8. về mặt hiểu thì em đúng rồi, vấn đề chỉ là ngôn ngữ, với anh thì "lọc tần số cao" có nghĩa là loại bỏ các tần số cao, low pass filter = bộ lọc cho qua tần số thấp và loại bỏ tần số cao. Tương tự cho high pass filter. ANW thì các bài viết của anh là do kiến thức từ tài liệu tiếng anh chứ không phải từ tiếng Việt nên có thể không khớp với cách dùng từ của em.

    ReplyDelete
  9. Chào anh.
    Em xin hỏi 1 câu "ngoài lề" 1 chút, mong anh giúp đỡ. Em đang làm đề tài về "tìm hiểu bài toán làm trơn ảnh", anh có thể giúp em về "ứng dụng trong thực tế của làm trơn ảnh". Em chỉ biết được 1 vài úng dụng của làm trơn ảnh như: ứng dụng vào công nghệ giám sát "camera lọc nhiễu 3 chiều", ứng dụng vào y học : chụp ảnh siêu âm, hay các ảnh chụp radar(việc xuất hiện nhiễu đốm ảnh hưởng đến việc khai thác thông tin hữu ích trong ảnh)(mà chỉ là biết khái quát chứ không biết cụ thể ra sao). Xin cảm ơn anh.

    ReplyDelete
  10. bài toán làm trơn ảnh bản thân nó nếu đứng riêng lẻ thì hầu như chả có ứng dụng gì ngoài cái ứng dụng "đen" rỏ ràng qua tên của nó là làm ảnh mịn và giãm nhiễu. Nhưng nếu đặt nó vào một quá trình xử lý gồm nhiều bước thì nó rất quan trọng, kết quả của nó giúp các xử lý phía sau chính xác hơn. Ví dụ edge detection, với thuật toán canny, trước tiên người ta dùng Gaussian để blur ảnh trước giúp loại bỏ bớt nhiễu nhằm giúp kết quả detect edge giảm những detect sai do noise gây ra. Công dụng này rất dễ hiểu vì theo định nghĩa của edge đó là sự đứt đoạn intensity, không liên tục ... trong khi đó noise cũng có tính chất tương tự thõa mãn định nghĩa này, do vậy khi thực hiện edge detection trong một bức ảnh bị nhiễu thì rất dễ dàng detect sai noise là edge. Tương tự với các trường hợp em đề cập, trong ảnh siêu âm các object có màu trắng tuy nhiên thì noise cũng có màu trắng vì vậy dẫn tới thông tin bị nhầm lẫn giữa 2 đối tượng này. Vì vậy mà người ta tìm cách loại bớt noise trước khi tiến hành các xử lý cao hơn, như là detect abnormal object, và một trogn những phương pháp đó là Gaussian blur. Tùy theo đặc thù từng ảnh và noise mà người ta chọn phương pháp, design kernel, kích thước thích hợp nhằm đạt được hiểu quả cao nhất là loại bỏ cái cần loại, giữ lại cái cần giữ vì ghi nhớ là đôi khi noise và object cần có độ tương tự.

    ReplyDelete
  11. anh ơi có code cho 1 chương trình làm mờ ảnh hoàn chỉnh ko

    ReplyDelete
  12. nếu bạn chỉ muốn chạy thuật toán để xem kết quả bạn hãy dùng OPENCV, còn muốn implement thuật toán bạn hãy đọc các kiến thức liên quan trong blog này để hiểu cách implement các bộ lọc cũng như hiểu cách làm việc với ảnh. Chúng tôi không đáp ứng yêu cầu cụ thể về mã nguồn.

    ReplyDelete
  13. thuật ngữ down/upsampling có nghĩa là gì ạ

    ReplyDelete

chia sẻ cho chúng tôi ý tưởng hay khó khăn của bạn ...

All Rights Reserved by IEEV © 2009 - 2016
Powered By Blogger, Designed by Sweetheme

Contact Form

Name

Email *

Message *

Powered by Blogger.