CHƯƠNG II: CƠ SỞ LÝ THUYẾT
2. Phương pháp trừ nền
2.1. Tổng quan về phương pháp trừ nền.
Phương pháp chung để nhận dạng đối tượng chuyển động là trừ nền, ở đây mỗi khung video được so sánh với mô hình tham chiếu hoặc mô hình nền. Các pixel trong frame hiện thời mà lệch đáng kể so với nền sẽ được xem như là chuyển động đối tượng. Một giải thuật trừ nền tốt phải xử lý được sự thay đổi độ sáng, sương mù, tuyết và đổi bóng… Ngoài ra, nó phải tính toán nhanh và yêu cầu bộ nhớ ít, trong khi vẫn có khả năng xác định những đối tượng chính xác trong video.
2.2. Giải thuật trừ nền
Bốn bước chính trong giải thuật trừ nền là : Tiền xử lý, mô hình hóa nền, phát hiện đối tượng và hợp lệ hóa dữ liệu
Hình 7: Biểu đồ luồng chung của các giải thuật trừ nền
- Tiền xử lý bao gồm những tác vụ xử lý ảnh đơn giản cho video đầu vào
tạo điều kiện cho xử lý trong những bước tiếp theo.
- Mô hình hóa nền sử dụng những frame video mới để tính toán và cập nhật
một mô hình nền. Mô hình nền này cung cấp phần mô tả thống kê của toàn bộ cảnh nền.
- Dò tìm đối tượng là xác định những pixel trong các frame video không
tương ứng với mô hình nền.
- Hợp lệ dữ liệu khảo sát mặt nạ thích hợp này, loại bỏ những pixel không
tương ứng với những đối tượng chuyển động thật.
2.3. Một số thuật toán trừ nền
a) Frame Difference Chuỗi video đầu vào
- t: Giá trị ngưỡng cho trước - B(x,y): Giá trị nền cố định
BÁO CÁO KẾT QUẢ
- (x,y): Giá trị frame video đến, t là chỉ số frame thuộc:
0….K
- B(x,y) = ( Đặt frame đầu tiên làm nền).
- D(x,y): Mặt nạ nhị phân phát hiện chuyển động được định nghĩa như sau:
- D(x,y)=
D(x,y) = 0 (Hiệu hai frame nhỏ hơn giá trị ngưỡng t) đưa ra kết luận đây là những pixel của nền, ngược lại.
D(x,y)=1 (Hiệu hai frame lớn hơn ngưỡng t cho trước ) đưa ra kết luận đây là những pixel của đối tượng chuyển động. Tập hợp các pixel này ta sẽ có hình ảnh của đối tượng chuyển động.
b) Mean Filter
Thay vì chỉ sử dụng 1 khung hình trước đó để làm background image thì Mean Filter sử dụng N khung hình phía trước khung hình đang xét để khởi tạo
background image. Giả sử khung hình đang xét tại thời điểm t thì background tương ứng với nó sẽ được tính như sau:
Trong đó B là background image tại thời điểm t, N là số khung hình trước thời điểm t, N là số khung hình trước thời điểm t để dùng cho việc tính toán ra background image, I(x,y,t) là khung hình tại thời điểm t.
Sau khi khởi tạo background image thì phần còn lại của phương pháp này cũng giống với phương pháp frame difference.
2.4. Ưu, nhược điểm của phương pháp trừ nền
- Ưu điểm: Thuật toán rất đơn giản, thời gian tính toán nhanh. Thuật toán này rất hữu dụng trong trường hợp chỉ cần xác định những thay đổi bộ phận, mà không phải xác định sự thay đổi của toàn bộ khung hình.
- Nhược điểm: Độ chính xác của thuật toán này thấp. Đặc biệt, thuật toán này đưa ra kết quả không chính xác đối với những trường hợp đối tượng trong đoạn video hầu như không di chuyển, camera thu ảnh có nhiều nhiễu, không thể phát hiện được sự thay đổi lớn trong một vùng ảnh nhỏ và thay đổi nhỏ trong một vùng ảnh lớn.
3. Phương pháp theo vết chuyển động
Object Tracking là bài toán theo dõi một hoặc nhiều đối tượng chuyển động theo thời gian trong một video. Hiểu một cách đơn giản nhất, nó là bài toán ở mức độ cao hơn so với object detection, khi đối tượng được xử lý không đơn giản là một hình ảnh mà là một chuỗi hình ảnh mà là một chuỗi các hình ảnh:
video.
Object Tracking có thể chia thành 2 cách tiếp cận chính:
Single Object Tracking (SOT): Cái tên nói lên tất cả, Single Object
Tracking tập trung vào việc theo dõi một đối tượng duy nhất trong toàn bộ video. Và tất nhiên, để biết được cần theo dõi đối tượng nào, việc cung cấp một bounding box từ ban đầu là việc bắt buộc phải có.
Multiple Object Tracking (MOT): Multiple Object Tracking hướng tới các ứng dụng có tính mở rộng cao hơn. Bài toán cố gắng phát hiện đồng thời
BÁO CÁO KẾT QUẢ
theo dõi tất cả đối tượng trong tầm nhìn, kể cả các đối tượng mới xuất hiện trong video.
3.1 Thuật toán Meanshift
Meanshift chính là một cụm phân tích dữ liệu trong học máy, khác với K- Means cần biết một số cụm trước thì Meanshift có thể tự động phân chia dữ liệu theo cụm. Meanshift có nhiều ứng dụng, một số trong đó là theo dõi đối tượng.
Ý tưởng của Meanshift cũng khá đơn giản. Giả sử có các điểm tập hợp ( có thể là pixel phân bố như phản chiếu biểu đồ). Một window nhỏ được cho (có thể là vòng tròn), nhiệm vụ là di chuyển window đó đến nơi có mật độ pixel lớn nhất (số lượng điểm lớn nhất).
Windom đầu “C1” có màu xanh, center của nó là “C1_o”, tuy nhiên centroid của nó là “C1_r” ( trung bình các tọa độ của các điểm trong window màu xanh). “C1_o” và “C1_r” không khớp với nhau. Bây giờ sẽ dịch chuyển window sau cho center của window mới trùng với centroid của window trước đó. Tuy nhiên center của window hiện tại lại không trùng với centroid của window hiện tại. Cứ thực hiện như vậy cho đến khi center và centroid của window trùng nhau (có sai số). Cuối cùng chúng ta đạt được window với phân bố pixel lớn nhất, được đánh dấu bằng màu xanh lá “C2”.
3.2. Thuật toán Camshift
Một thuật toán theo vết khác được phát triển từ Meanshift là Camshift
(Continue Adaptive Mean-shift). Về cơ bản, thuật toán này giống với Meanshift tuy nhiên với Camshift, window tìm kiếm có thể tự điều chỉnh kích thước.
Các bước thực thi thuật toán Camshift:
Bước 1: Chọn vị trí ban đầu của cửa sổ tìm kiếm.
Bước 2: Thuật toán Meanshift ( lặp một hoặc nhiều lần), lưu moment thứ 0.
BÁO CÁO KẾT QUẢ
Bước 3: Kích cỡ của cửa sổ tìm kiếm được đặt bằng một hàm của moment thứ 0 vừa tìm được trong bước 2.
Bước 4: Lặp lại bước 2 và bước 3 cho đến khi hội tụ ( nghĩa là vị trí dịch chuyển nhỏ hơn ngưỡng thiết lập trước đó)
Cả hai thuật toán trên đều có thư viện các hàm tính toán trong OpenCV 4. Phương pháp lọc ảnh
Lọc ảnh ( làm mịn ảnh, làm mượt ảnh) là một bước rất quan trọng trong xử lý ảnh. Lọc ảnh thực tế có rất nhiều tác dụng như loại bỏ nhiễu, tìm biên đối tượng.
4.1. Nguyên tắc chung của lọc ảnh
Nguyên tắc chung của phương pháp lọc là ma trận ảnh nhân với một ma trận lọc (Kernel). Ma trận lọc (Kernel) còn có thể được gọi là phép nhân chập, cửa sổ lọc, mặt nạ,…
Việc nhân ảnh với ma trận lọc giống như việc trượt ma trận lọc theo hàng trên ảnh và nhân với từng vùng của ảnh, cộng các kết quả lại tạo thành kết quả của điểm ảnh trung tâm.
4.2. Một số bộ lọc khử nhiễu
4.2.1. Bộ lọc trung bình (Normalized Box Filter)
Đây là bộ lọc đơn giản nhất. Nó được xây dựng dựa trên ý tưởng tính giá trị một điểm ảnh bằng trung bình cộng các điểm ảnh xung quanh nó.
Ma trận lọc của lọc trung bình có dạng:
Cách lọc này áp dụng việc lọc nhiễu vẫn muốn giữ lại biên không mờ 4.2.2.Bộ lọc Gauss ( Gaussian Filter)
BÁO CÁO KẾT QUẢ
Bộ lọc Gauss được cho là bộ lọc hữu ích nhất, được thực hiện bằng cách nhân chập ảnh đầu vào với một ma trận lọc Gauss sau đó cộng chúng lại để tạo thành ảnh đầu ra.
Ý tưởng chung là giá trị mỗi điểm ảnh sẽ phụ thuộc nhiều vào các điểm ảnh ở gần hơn là các điểm ở xa. Trọng số của sự phụ thuộc được lấy theo hàm Gauss.
Biểu diễn ma trận lọc Gauss:
Giả sử ảnh là một chiều. Điểm ảnh ở trung tâm sẽ có trọng số lớn nhất. Các điểm ảnh ở càng xa trung tâm sẽ có trọng số giảm dần khi khoảng cách từ chúng tới điểm trung tâm tăng lên. Như vậy điểm càng gần trung tâm sẽ càng đóng góp nhiều hơn vào giá trị điểm trung tâm.
Kết quả lọc sử dụng phép lọc Gauss:
Hình 8: Phép lọc Gauss
4.2.3 Bộ lọc trung vị
Phép lọc trung vị cũng được thực hiện với các ma trận lọc. Tuy nhiên nó tính trung vị tất cả các giá trị điểm ảnh trong vùng ma trận lọc và sử dụng trung vị này cho giá trị điểm trung tâm. Một điều khá thú vị là với các cách lọc ở trên, giá trị điểm trung tâm được tính mới ( có thể bằng hoặc khác với giá trị một điểm trong vùng ma trận lọc), còn với phép lọc trung vị, giá trị điểm trung tâm luôn được thay bằng một giá trị điểm ảnh trong bức ảnh đầu vào. Do vậy, phương pháp lọc này có khả năng loại bỏ nhiễu muối tiêu khá tốt.
5. Công cụ phát triển 5.1. Pycharm
a. Giới thiệu
PyCharm là một nền tảng phát triển tích hợp tối đa nền tảng (IDE) được thiết kế dành riêng cho các lập trình viên Python. Chúng ta có thể chạy PyCharm trên Windows, Linux hoặc Mac OS. Ngoài ra, nó chứa các module và các package giúp các lập trình viên phát triển phần mềm bằng Python tiết kiệm thời gian và công sức. Hơn nữa, nó cũng có thể được tùy chỉnh theo yêu cầu của các nhà phát triển
b.Tính năng quan trọng của Pycharm
Trình chỉnh sửa mã do PyCharm cung cấp giúp lập trình viên viết mã chất lượng cao hơn, đọc mã dễ dàng thông qua các sơ đồ màu, tự động chèn thụt lề trên các dòng mới, chọn kiểu mã hóa phù hợp và đưa ra các đề xuất hoàn thành mã nhận biết ngữ cảnh.
Điều hướng mã : với điều hướng mã người dùng có thể chỉnh sửa và cải thiện mã mà không tốn thêm thời gian và công sức,dễ dàng điều hướng đến một hàm lớp hoặc tệp, thậm chí có thể tận dụng tính năng điều hướng mã để xem xét mã kỹ lưỡng ở chế độ thấu kính
BÁO CÁO KẾT QUẢ
Tái cấu trúc cho phép các nhà phát triển cải thiện cấu trúc bên trong mà không thay đổi hiệu suất bên ngoài của code. Pycharm cũng giúp phân chia các lớp và chức năng mở rộng tốt hơn với sự trợ giúp của phương pháp trích xuất.
PyCharm giúp các lập trình viên viết các ứng dụng web khác nhau dễ dàng hơn bằng Python hỗ trợ các công nghệ web được sử dụng rộng rãi như HTML, CSS, JavaScript , TypeScript và CoffeeScript. Các nhà phát triển web có thể sử dụng tùy chọn xem trước chỉnh sửa trực tiếp do IDE cung cấp để xem một trang web đồng thời trong trình chỉnh sửa và trình duyệt.
Hỗ trợ cho các khung công tác web Python phổ biến
PyCharm còn giúp các lập trình viên sử dụng Python hiệu quả hơn trong các dự án khoa học dữ liệu và dữ liệu lớn. Nó hỗ trợ một số thư viện khoa học được sử dụng rộng rãi cho Python - NumPy, Anaconda và Matplotlib. Các nhà phát triển có thể làm việc hiệu quả với các thư viện khoa học này bằng cách tận dụng các biểu đồ tương tác, thông tin chi tiết về mã sâu và trình xem mảng do IDE cung cấp
5.2. Open CV
a. Giới thiệu
OpenCV là tên viết tắt của open source computer vision library – có thể được hiểu là một thư viện nguồn mở cho máy tính. Cụ thể hơn OpenCV là kho lưu trữ các mã nguồn mở được dùng để xử lý hình ảnh, phát triển các ứng dụng đồ họa trong thời gian thực.
OpenCV cho phép cải thiện tốc độ của CPU khi thực hiện các hoạt động real time. Nó còn cung cấp một số lượng lớn các mã xử lý phục vụ cho quy trình của thị giác máy tính hay các learning machine khác. Các ngôn ngữ được sử dụng trong opencv khá đa dạng và phổ biến như java, C++, python
b.Ứng dụng
OpenCV được sử dụng cho đa dạng nhiều mục đích và ứng dụng khác nhau: OpenCV được dùng để khởi tạo ra những hình ảnh 3 chiều phức tạp. Hoạt động này rất được yêu thích, nhất là trong thời đại trí tuệ nhân tạo AI phát triển như thế này.
Thậm chí OpenCV xuất hiện cả trong lĩnh vực y tế, nghiên cứu khoa học.
Nó cho phép phân tích các hình ảnh ở mức độ rất tinh vi. Điều này giúp ích rất nhiều cho sự phát triển của các ngành nghề cao cấp.Đối với các công nghệ hiện đại, OpenCV cũng là một yếu tố không thể thiếu. Tất cả những ứng dụng công nghệ như robot, xe tự lái, bảng cảm ứng thông minh… đều có sự góp mặt của OpenCV trong khâu xử lý hình ảnh. Ví dụ gần gũi nhất trong cuộc sống có thể kể đến hệ thống mở khóa điện thoại bằng cách nhận diện khuôn mặt người dùng.
c.Tính năng và các module phổ biến của OpenCV
BÁO CÁO KẾT QUẢ
Theo tính năng và ứng dụng của OpenCV, có thể chia thư viện này thánh các nhóm tính năng và module tương ứng như sau:
- Xử lý và hiển thị Hình ảnh/ Video/ I/O (core, imgproc, highgui)
- Phát hiện các vật thể (objdetect, features2d, nonfree)
- Geometry-based monocular hoặc stereo computer vision (calib3d, stitching, videostab)
- Computational photography (photo, video, superres)
- Machine learning & clustering (ml, flann)
- CUDA acceleration (gpu)
5.3.Colab
Cũng được phát triển là một IDE như pycharm nhưng colab là dịch vụ đám mây của google. Nó cho phép bất kỳ người dùng nào viết mã nguồn trong trình soạn thảo của nó và chạy nó từ trình duyệt. Cụ thể, nó hỗ trợ ngôn ngữ lập trình Python và được định hướng cho các tác vụ học máy, phân tích dữ liệu, các dự án giáo dục, v.v.
Sử dụng colab có một số ưu việt như: sẵn sàng chạy Python ở bất kỳ thiết bị nào có kết nối internet mà không cần cài đặt, chia sẻ và làm việc nhóm dễ dàng, sử
dụng miễn phí GPU cho các dự án về AI. Những tính năng được đánh giá cao ở Google Colab phải kể đến như:
- Tạo mục lục dựa trên các Heading viết bằng ngôn ngữ markdown - Thêm hình ảnh, biểu mẫu dễ dàng với markdown.
- Kết nối dễ dàng với Google Drive, Google Sheets
- Tự động lưu lịch sử chỉnh sửa thành các phiên bản giúp bạn dễ dàng khôi phục lại phiên bản gần nhất nếu cần khi bạn gặp lỗi.
- Tạo dashboard viết bằng Python và chia sẻ với team dễ dàng 5.4.FLV Converter
Cuối cùng một công cụ được đề xuất nhằm làm giảm đi dung lượng đồng thời giúp video, ảnh có chất lượng cao hơn không thể không kể đến FLV Converter.
Là một phần mềm đáng giá không chỉ làm nhiệm vụ giúp bạn chuyển đổi các định dạng video FLV mà còn có thể tìm kiếm các nội dung video FLV trực tuyến trên một số dịch vụ cũng như tải về máy để thưởng thức một cách nhanh và dễ dàng nhất.
Ngoài việc giúp chuyển đổi file video FLV thành các định dạng khác, phần mềm còn cung cấp cho bạn nhiều tính năng. FLV Converter có thể tải file video FLV từ các nguồn chia sẻ video nổi tiếng như Youtube, Google video, Dailymotion, Metacafe,… Ứng dụng cũng cho phép chuyển đổi video FLV thành file AVI hay MPEG để phát trên đầu đĩa. Hoặc nó cũng cho phép chuyển sang định dạng 3GP để phát trên iPod hay iPhone. Không những vậy, phần mềm cũng cho phép trích âm thanh từ một file video FLV sang MP3 nếu như bạn muốn.
BÁO CÁO KẾT QUẢ
Ngược lại FLV Converter có thể chuyển từ định dạng FLV sang định dạng khác một cách dễ dàng. Bạn có thể chuyển đổi video từ MPEG, DivX, XviD, DVD AVI thông qua phần mềm và ngược lại.