Top Ad unit 728 × 90

Latest news

recent

Tích chập (Convolution) và Thực hành

Nguồn từ: IEEV
Convolution là một phép toán quan trọng biểu diễn cho các hệ thống rời rạc tuyến tính. Tín hiệu sau khi qua hệ thống xử lý bằng các phép convolution với ma trận đáp ứng xung (impulse response) nào đó sẽ cho ra kết quả là tín hiệu đầu ra. Xét trên khía cạnh thực hành, thiết kế một hệ thống H là xác định cách tính Convolution và nguyên tắc mà hệ thống đối xử với tín hiệu (ma trận đáp ứng). Việc triển khai một cách chính xác phép tính này sẽ trợ giúp đắc lực trong quá trình xử tín hiệu, ảnh, ...Matlab đã thực hiện công việc này khá hiệu quả, do vậy bài viết này sẽ tập trung vào trả lời cho câu hỏi các hàm này hoạt động như thế nào và làm sao để xây dựng lại chúng trong một ngôn ngữ lập trình chuyên nghiệp, ở đây tôi chọn C# như là một sự minh họa.

Trong matlab sự khác nhau của các phương pháp tính Convolution cơ bản dựa vào tham số shape với 3 trạng thái same, full, valid. Dưới đây tôi sẽ tiếp cận vấn đề theo logic này.

1./ Conv2 với shape = same: conv2(matrix, kernel, 'same'), ma trận kết quả có chiều giống như matrix, và giá trị tại mổi phần tử được tính bằng cách quét tâm của kernel trên toàn bộ matrix rối tính tổng tích các cặp điểm tương ứng giữa matrix và kernel. Điểm tâm của kernel được xác định bằng điểm giữa của ma trận, ví dụ nếu kernel là ma trận 3x3 thì tâm là điểm có tọa độ 1:1, nếu kernel là ma trận 4x4 thì tâm cũng là điểm 1:1 (index đi từ 0 theo chuẩn C++, C#).

Nguồn từ: IEEV
Nguồn từ: IEEV
2./ Conv2 với shape = full: conv2(matrix, kernel, 'full'), nếu matrix có chiều là m1 x n1, kernel có chiều là m2 x n2 thì ma trận kết quả có chiều là (m1 + m2 - 1) x (n1 + n2 - 1) và giá trị tại mổi phần tử được tính bằng cách quét toàn bộ, tuần tự từng điểm của ma trận Kernel lên từng điểm trên ma trận matrix sau đó tính tổng tính các cặp điểm tương ứng, trong quá trình quét có những điểm trên Kernel nằm ngoài matrix khi đó tích của nó bằng 0.

Nguồn từ: IEEV
Nguồn từ: IEEV
3./ Conv2 voi shape = valid: conv2(matrix, kernel, 'valid'), nếu matrix có chiều là m1 x n1, kernel có chiều là m2 x n2 thì ma trận kết quả có chiều là (m1 - m2 + 1) x (n1 - n2 + 1) và giá trị tại mỗi phần tử được tính giống như trường hợp full nhưng với điều kiện là ma trận kernel trong quá trình quét luôn nằm trọn vẹn bên trong ma trận matrix.

Nguồn từ: IEEV
Nguồn từ: IEEV


Binh Nguyen - Bioz
Tích chập (Convolution) và Thực hành Reviewed by Bioz on 2:48:00 PM Rating: 5
All Rights Reserved by IEEV © 2009 - 2016
Powered By Blogger, Designed by Sweetheme

Contact Form

Name

Email *

Message *

Powered by Blogger.