Bài viết nằm trong loạt bài viết tự học OpenCV qua ví dụ thực tế. Trong bài viết này tôi sẽ hướng dẫn một số thao tác xử lý ảnh cơ bản với thư viện EmguCV như: Gradient, Edges, Morphology, Pyramids, Smoothing, Thesold, Transform, Varsios.
Khoa học máy tính Trương Xuân Đạt 2015-08-23 13:59:29

Giới thiệu

EmguCV là một thư viện xử lý hình ảnh, thị giác máy tính dành riêng cho ngôn ngữ C#. EmguCV đã xây dựng những control mà có thể giúp bạn nhanh chóng xử lý hình ảnh với một mục đích nào đó của người dùng. Bạn hoàn toàn có thể tự xây dựng một control để xử lý. Trong bài viết này tôi sẽ tiếp tục giới thiệu một số thao tác xử lý ảnh cơ bản với control ImageBox của EmguCV.

Tiền đề bài viết

Đây là bài viết nằm trong loạt bài viết Tự Học OpenCV Qua Các Ví Dụ Thực Tế của Stdio.vn :: www.stdio.vn

Đối tượng hướng đến

Dành cho bạn đọc đã có kinh nghiệm về ngôn ngữ lập C# và hiểu được các vận hành / sử dụng thư viện. Chưa có kiến thức tương đương.

Trong bài viết này tôi sử dụng Windows 10 (64-bit)Visual Stdio 2013 Ultimate.

Filters

Có ý nghĩa trong việc tạo ra các hiệu ứng ở trong ảnh. Trong bài viết sẽ giới thiệu các chức năng xử lý hình ảnh:

  • Conversion
  • Gradient, Edges
  • Morphology
  • Pyramids 
  • Smooting
  • Theshold

ss_1

Conversion

Chuyển đổi không gian màu, tôi đã giới thiệu chức năng ở bài viết trước Một Số Thao Tác Xử Lý Ảnh Cơ Bản Với EmguCV :: www.stdio.vn/articles/read/366/mot-so-thao-tac-xu-ly-anh-co-ban-voi-emgucv.

Gradient, Edges

Là chức năng tìm biên ảnh (Grandient, edges) của đối tượng trong hình ảnh. Nguyên tắc là nhân(x, *) ma trận điểm ảnh (pixel) cho một ma trận lọc (Kernel, mask). Có 3 bộ lọc có chức năng tìm biên ảnh.

  • Sobel: Lọc tìm biên ảnh
  • Laplace: Lọc tìm biên ảnh, ước lượng chuyển động của đối tượng trong hình ảnh.
  • Canny: Lọc tìm biên ảnh. Nhưng trước khi nhân với ma trận lọc, Canny sử dụng bộ lọc Gause để loại nhiễu và làm cho ảnh mờ đi.

ss_2

Chú ý

Nội dung tiếp theo sẽ có nhắc tới những bộ lọc khác, như ở phần trên đã nói, các bộ lọc đều có một nguyên tắc chung. Tùy vào mục đích của bộ lọc nên mỗi ma trận lọc (Kernel, mask) khác nhau.

Morphology

Bao gồm các phép toán xử lý đối tượng trong ảnh. Thông thường khi bạn Zoom một tấm hình lớn lên hoặc nhỏ xuống, theo nguyên lý của Zoom ảnh thì điểm ảnh (Pixel) sẽ to lên hoặc nhỏ xuống. Nhưng đôi khi có một số đối tượng trong ảnh bạn cần phải phóng lớn lên để nhìn rõ là cái gì?,... Các phép toán phía dưới cho phép điều đó.

  • Dilation: Là một phép toán giúp đối tượng trong ảnh có thể dãn kích thước.
  • Erosion: Là một phép toán giúp cho đối tượng trong ảnh co kích thước lại.

Các phép toán trên được dùng trong ứng dụng nhận diện biển số xe. Các bạn sẽ được giới thiệu về những ứng dụng này trong những bài viết sau trong Chương Trình Tự Học OpenCV Qua Các Ví Dụ Thực Tế.

ss_3

Pyramids và Smoothing

Đều là những bộ lọc trung vị. Bộ ma trận lọc Smoothing có tác dụng làm mờ, làm trơn, khử nhiễu,... các điểm ảnh.

ss_4

Theshold

Đây là chức năng có tác dụng sửa thành ảnh nhị phân. Ảnh nhị phân là ảnh mà có các điểm ảnh (Pixel) chỉ mang 2 giá trị là 0 (Đen) hoặc 255 (Trắng).

Nhị phân hóa

Nhị phân hóa một ảnh là quá trình biến đổi một ảnh xám,... thành ảnh nhị phân. Ngưỡng nhị phân T dùng để xách định điểm ảnh của ảnh đó khi chuyển thành điểm nhị phân.

  •  Nếu giá trị điểm ảnh > T thì chuyển thành điểm ảnh nhị phân mang giá trị 255 (Trắng).
  • Nếu giá trị điểm ảnh < T thì chuyển thành điểm ảnh nhị phân mang giá trị 0 (Đen).

Nhị phân hóa với ngưỡng động

Việc bạn chuyển ảnh nhị phân bằng phương pháp nhị phân hóa. Với mỗi giá trị T (Ngưỡng nhị phân) thi lại thu được các tấm ảnh nhị phân khác nhau. Vì vậy để tìm một tấm ảnh nhị phân đẹp người ta đã sử dụng thêm một phương pháp nữa là nhị phân hóa với ngưỡng động.

  • Chia tấm ảnh thành nhiều khu vực khác nhau (Cửa sổ).
  • Dùng một thuật toán để tìm một giá trị T phù hợp với từng khu vực (Cửa sổ)
  • Áp dụng phương pháp nhị phân hóa cho từng khu vực (Cửa sổ) với T phù hợp

ss_5

Trong EmguCV có nhiều phương pháp tìm ảnh nhị phân. Để tìm một bức ảnh nhị phân thì cần các tham số sau.

  • thresholdType: Là ngưỡng nhị phân T
  • maxValue: Là giá trị lớn nhất của điểm ảnh (Pixel) trong ảnh (Thông thường là 255)
  • param1: Là một thông số  bù trừ trong trường hợp ảnh có độ tương phản rất lớn
  • blockSize: Là kích thước của một vùng cửa sổ áp dụng cho việc tính toán ngưỡng động. Có giá trị (%2 == 1 && > 1)
  • adaptiveMethod: Là cách tính T cho từng vùng của nhị phân(vùng cửa sổ)

ss_6

Transform

Gồm có các chức năng xoay hình ảnh.

  • LogPolar
  • Rotate
  • Flip

ss_7

Varios

Gồm các chức năng:

  • Rezise: Thay đổi kích thước hình ảnh
  • EqualizaHist: Cân bằng Histogram vì có một số ảnh rất tối hoặc sáng. Dựa trên nguyên lý chuyển màu dạng RCB sang HSV, sau đó cân bằng thành phần kênh màu V (Value mức độ sáng) sau đó biển đổi ngược lại
  • SetRandNormal
  • SetRandUniform

ss_8

Tham khảo

http://www.emgu.com