• Cài đặt được các thuật toán xử lý ảnh trên môi trường nhúng ARM trên Linux sử dụng thư viện mã nguồn mở OpenCV và nền tảng QT Framework • Có cách tiếp cận tốt cho các bài toán ứng dụng
Trang 1Khóa học
Lập trình xử lý ảnh trên nền nhúng
GV: Phạm Văn Thuận, Phạm Ngọc Hưng, Hoàng Văn Hiệp
Bộ môn Kỹ thuật Máy tính Viện CNTT&TT- ĐH BKHN
Trang 2• Cài đặt được các thuật toán xử lý ảnh trên môi
trường nhúng ARM trên Linux sử dụng thư viện
mã nguồn mở OpenCV và nền tảng QT
Framework
• Có cách tiếp cận tốt cho các bài toán ứng dụng
xử lý ảnh trong thực tiễn cuộc sống và sản xuất
Trang 3Lập trình xử lý ảnh trên nền nhúng
Nội dung khóa học
3
Bài 1 Tổng quan về xử lý ảnh và ứng dụng
Bài 2 Lập trình xử lý ảnh trên KIT nhúng micro2440
Bài 3 Các phép biến đổi cơ bản trên ảnh
Trang 4Lập trình xử lý ảnh trên nền nhúng 4
Tài liệu tham khảo
Tài liệu tham khảo chính:
• Micro2440 User Manual
• Beginning Linux Programming
• Advanced Linux Programming
• C++ GUI programming with QT
• Learning OpenCV
• Website:
http://homepages.inf.ed.ac.uk/rbf/HIPR2/
Trang 6Lập trình xử lý ảnh trên nền nhúng 6
Mục tiêu bài học số 1
Sau khi kết thúc bài học này, sinh viên có thể
• Trình bày được các khái niệm cơ bản về xử lý
Trang 8• Phân tích ảnh để thu được các thông tin đặc
trưng giúp cho việc phân loại ảnh (image
classification ), nhận dạng ảnh (image
recognition).
• Hiểu ảnh đầu vào để có những mô tả về ảnh ở mức cao hơn, sâu hơn.
Trang 9Phân tích ảnh
Đối sánh Nhận dạng
Hệ quyết định
Lưu trữ
Lưu trữ
Trang 10Image Restoration
Image Compression
Image Segmentation
Representation
& Description
Recognition & Interpretation
Knowledge Base
Các kỹ thuật tiền xử lý-mức thấp
Image Coding
Morphological Image Processing
Wavelet Analysis
Xử lý mức cao
Trang 12Lập trình xử lý ảnh trên nền nhúng
Các bài toán xử lý ảnh
• Phân tích ảnh
– Trích chọn đặc trưng (feature extraction)
– Biểu diễn, mô tả ảnh (image representation,
Trang 13Lập trình xử lý ảnh trên nền nhúng
Ứng dụng xử lý ảnh
Trang 14Lập trình xử lý ảnh trên nền nhúng
Ứng dụng tăng cường chất lượng
Trang 15Lập trình xử lý ảnh trên nền nhúng
Hiệu ứng panorama
Trang 16Lập trình xử lý ảnh trên nền nhúng
Ứng dụng nhận dạng khuôn mặt
Trang 17Lập trình xử lý ảnh trên nền nhúng
Nhận dạng người chuyển động
Trang 18Lập trình xử lý ảnh trên nền nhúng
Nhận dạng đối tượng chuyển động
Trang 19Lập trình xử lý ảnh trên nền nhúng
Nhận dạng chữ viết tay
Trang 20Lập trình xử lý ảnh trên nền nhúng
Nhận dạng vân tay
Trang 21Lập trình xử lý ảnh trên nền nhúng
Nhận dạng mống mắt (iris)
Trang 22Lập trình xử lý ảnh trên nền nhúng
Mô hình hóa 3D & AR (Augmented Reality)
KINECT
Trang 23Lập trình xử lý ảnh trên nền nhúng
1.2 Tổng quan về QT và OpenCV
• Nền tảng QT: tương thích đa nền tảng
Trang 24Lập trình xử lý ảnh trên nền nhúng
Giới thiệu OpenCV
• OpenCV: Open Computer Vision Library
– Tập hợp các hàm C và một số lớp C++ giải quyết các bài toán, thuật toán cơ bản trong xử lý ảnh
– Đa nền tảng, đã porting được trên rất nhiều nền tảng khác nhau: Windows, Linux, Embedded
Linux, iOS, Android…
http://opencvlibrary.sourceforge.net
Trang 25Lập trình xử lý ảnh trên nền nhúng
Thư viện OpenCV
Trang 26Lập trình xử lý ảnh trên nền nhúng
Kiến trúc thư viện OpenCV
Trang 27Lập trình xử lý ảnh trên nền nhúng
Kiến trúc thư viện OpenCV
• CV: chứa các hàm cơ bản và nâng cao thực thi các bài toán thị giác máy (computer vision)
• ML (Machine Learning): thư viện học máy với các công cụ phân lớp (classifier) và phân cụm
Trang 28Lập trình xử lý ảnh trên nền nhúng
28
Thảo luận
Trang 30Lập trình xử lý ảnh trên nền nhúng 30
Mục tiêu bài học số 2
Sau khi kết thúc bài học này, sinh viên có thể
• Cài đặt môi trường phát triển cho QT
• Cài đặt môi trường phát triển OpenCV trên
Desktop và trên KIT nhúng
• Lập trình cơ bản với OpenCV để tiến hành thu nhận ảnh/video từ file và webcam
Trang 31Lập trình xử lý ảnh trên nền nhúng 31
Nội dung bài học
2.1 Cài đặt môi trường phát triển QT
2.2 Cài đặt thư viện OpenCV
2.3 Lập trình đọc và hiển thị ảnh từ file
2.4 Lập trình đọc và hiển thị video từ webcam
Trang 32Lập trình xử lý ảnh trên nền nhúng
2.1 Cài đặt nền tảng QT
• Bước 1: Cài đặt nền tảng QT trên máy host
(Linux Desktop)
• Bước 2: Cài đặt nền tảng QT Everywhere để
biên dịch cho ứng dụng QT trên KIT
Trang 33Lập trình xử lý ảnh trên nền nhúng
2.2 Cài đặt thư viện OpenCV
• Bước 1: Cài đặt thư viện OpenCV trên máy host
(Linux Desktop)
• Bước 2: Biên dịch chéo, cài đặt thư viện
OpenCV để biên dịch cho các ứng dụng trên KIT
Trang 34Lập trình xử lý ảnh trên nền nhúng
2.3 Tích hợp OpenCV và QT
• Khai báo trong file pro của dự án QT: thêm các dòng lệnh sau vào cuối file pro
Trang 35Lập trình xử lý ảnh trên nền nhúng
Tích hợp OpenCV và QT
• Khai báo các thư viện sẽ được sử dụng: để ứng dụng linh hoạt, tạo file global.h chứa include tới các thư viện của OpenCV
Trang 37Lập trình xử lý ảnh trên nền nhúng
Đọc ảnh và hiển thị
Hàm đọc ảnh: cvLoadImage
• Tham số đầu vào: đường dẫn tới file ảnh
• Tham số đầu ra: dữ liệu ảnh lưu theo kiểu dữ liệu con trỏ của IplImage
Ví dụ:
IplImage* img = cvLoadImage("/home/oto.jpeg" );
Trang 39Lập trình xử lý ảnh trên nền nhúng 39
Lập trình kết nối Webcam
Bước 1: mở kết nối với Camera mặc định
CvCapture* camera = cvCreateCameraCapture(0);
Bước 2: lấy về từng Frame ảnh của camera
IplImage* preImage=cvQueryFrame(camera);
Bước 3: giải phóng đối tượng camera
cvReleaseCapture(&camera);
Trang 40Lập trình xử lý ảnh trên nền nhúng
Demo
Trang 41Lập trình xử lý ảnh trên nền nhúng
Demo hiển thị file ảnh
Trang 42Lập trình xử lý ảnh trên nền nhúng
Demo kết nối camera
Trang 43Lập trình xử lý ảnh trên nền nhúng
43
Thảo luận
Trang 44Lập trình xử lý ảnh trên nền nhúng 44
Bài số 3
Các phép biến đổi cơ bản
Trang 45Lập trình xử lý ảnh trên nền nhúng 45
Mục tiêu bài học số 3
Sau khi kết thúc bài học này, sinh viên có thể
• Trình bày được các bước chuyển đổi ảnh từ ảnh màu sang ảnh đa mức xám và ảnh nhị phân
• Cách thức xây dựng và ứng dụng của biều đồ
phân bố mức xám của ảnh
• Ứng dụng cân bằng độ tương phản cho ảnh
Trang 46Lập trình xử lý ảnh trên nền nhúng 46
Nội dung bài học
3.1 Tìm hiểu cách thức biểu diễn ảnh
3.2 Biến đổi ảnh màu sang ảnh đa mức xám
3.3 Xây dựng phân bố Histogram của ảnh
3.4 Lập trình dãn độ tương phản
3.5 Lập trình cân bằng độ tương phản
3.6 Biến đổi ảnh đa mức xám sang ảnh nhị phân
Trang 47Lập trình xử lý ảnh trên nền nhúng
3.1 Cách thức biểu diễn ảnh
• Khái niệm ảnh số: là ảnh thu được từ ảnh liên
tục bằng phép lấy mẫu và lượng tử hóa
pixel Gray level
Original picture Digital image
f(x, y) I[i, j] or I[x, y]
x
y
Trang 49Lập trình xử lý ảnh trên nền nhúng
Cách thức biểu diễn ảnh
Ảnh màu (Color image)
• Chứa thông tin màu của ảnh
• Không gian màu thường sử dụng: RGB, CMYK
• Ảnh RGB 3 kênh màu, mỗi kênh sử dụng 8 bit
Ảnh đa mức xám (Grayscale image)
• Ảnh đa mức xám là ảnh có sự chuyển dần mức xám từ
trắng sang đen.
• Sử dụng 8 bit để biểu diễn mức xám
Ảnh nhị phân (Binary image)
• Chỉ có hai màu đen, trắng (tương đương giá trị 1,0)
49
Trang 51Lập trình xử lý ảnh trên nền nhúng
Chuyển ảnh màu -> đa mức xám
Hàm chuyển ảnh màu sang ảnh đa mức xám:
• Bước 1: Tạo 1 ảnh trắng (chưa có dữ liệu) định dạng ảnh
đa mức xám
IplImage *grayimage = cvCreateImage( cvSize(
colorimg->width, colorimg->height ), IPL_DEPTH_8U, 1 );
• Bước 2: Chuyển đổi ảnh màu sang đa mức xám
cvCvtColor( img, grayimage, CV_RGB2GRAY );
51
Trang 52Lập trình xử lý ảnh trên nền nhúng
Demo chuyển sang ảnh đa mức xám
Trang 54Lập trình xử lý ảnh trên nền nhúng
Histogram
Ảnh tối
54
Trang 55Lập trình xử lý ảnh trên nền nhúng
Histogram
Ảnh sáng
55
Trang 56Lập trình xử lý ảnh trên nền nhúng
Hàm tính Histogram
• Cấu trúc CvHistogram: lưu các thông tin về phân
bố Histogram của ảnh
Trang 57Lập trình xử lý ảnh trên nền nhúng
Hàm tính Histogram
• Bước 1: Sử dụng hàm cvCreateHist khởi tạo
cấu trúc CvHistogram để chuẩn bị chứa kết quả
– Dims: số chiều của Histogram
– Sizes: số lượng bins
– Type: định dạng dữ liệu (thường sử dụng
CV_HIST_ARRAY)
– Ranges: Dải các khoảng giá trị để tính Histogram
Trang 58– Hist: lưu kết quả tính Histogram
– Accumulate: tùy chọn tích lũy, cho phép tính
Histogram từ nhiều ảnh
– Mask: xác định phạm vi các pixel sẽ được sử
dụng để tính Histogram, mặc định tính toàn ảnh
Trang 60Lập trình xử lý ảnh trên nền nhúng
Demo tính Histogram của ảnh
Trang 61Lập trình xử lý ảnh trên nền nhúng
3.4 Dãn độ tương phản
Đây là một kỹ thuật tăng cường chất lượng ảnh
thông dụng, nó có tác dụng làm tăng độ tương phản của ảnh bằng cách giãn dải gía trị mức xám của
ảnh Các bước thực hiện
• Tìm ra giới hạn mức xám nhỏ nhất (a) và lớn nhất (b) của ảnh Với ảnh đa mức xám thường a=0 và b=255.
• Tìm giá trị mức xám nhỏ nhất (c) và lớn nhất (d) trong các điểm ảnh
• Xác định giá trị mức xám mới theo công thức
61
Trang 63Lập trình xử lý ảnh trên nền nhúng
3.5 Cân bằng Histogram
Cân bằng histogram là một phương pháp thay đổi
độ tương phản của ảnh bằng cách thay đổi lược đồ phân bố mức xám của chúng
Mục đích làm thay đổi biểu đồ phân bố mức xám từ phân bố ban đầu sang sự phân bố hướng tới đều
Tác dụng nhằm phát hiện những đối tượng bi che
khuất trong ảnh ban đầu Phép biến đổi này rất có ý nghĩa đối với những bức ảnh chụp trong bóng đêm, đối tượng thường bị mờ, hay bị che khuất bởi bóng tối, áp dụng cân bằng histogram có thể làm nổi rõ
đối tượng hơn
63
Trang 66Lập trình xử lý ảnh trên nền nhúng
Demo cân bằng Histogram
Trang 67Lập trình xử lý ảnh trên nền nhúng
3.6 Chuyển sang ảnh nhị phân
Chuyển đổi dựa trên phân ngưỡng
• Phân ngưỡng cố định (fixed threshold): sử dụng khi Histogram phân bố rõ ràng hai vùng sáng, tối với hai đỉnh rõ rệt
67
Trang 68Lập trình xử lý ảnh trên nền nhúng
Chuyển sang ảnh nhị phân
Phân ngưỡng thích nghi (adaptive threshold)
• Trong trường hợp lược đồ mức xám của ảnh có tới >=3
đỉnh chóp, ví dụ trong ảnh dưới đây tương ứng với số
điểm ảnh có giá trị mức xám tương ứng là 50, 110 và 180.
68
Trang 69Lập trình xử lý ảnh trên nền nhúng
Chuyển sang ảnh nhị phân
Phân ngưỡng thích nghi:
• Sử dụng ngưỡng động cho các điểm ảnh khác
nhau
• Kỹ thuật này cho phép chúng ta có thể điều tiết,
thích nghi với sự thay đổi về điều kiện sáng của
ảnh ví dụ như ảnh có sử dụng các hiệu ứng rọi
sáng (illumination) hay đổ bóng(shadow)
69
Trang 70Lập trình xử lý ảnh trên nền nhúng
Chuyển sang ảnh nhị phân
70
Kết quả (Sử dụng ngưỡng cứng)
Kết quả (Sử dụng ngưỡng thích nghi)
Trang 71Lập trình xử lý ảnh trên nền nhúng
Hàm chuyển sang ảnh nhị phân
• Phân ngưỡng cứng
– Src: Ảnh ban đầu, dst: ảnh kết quả
– Threshold: ngưỡng được chọn
– maxValue: giá trị lớn nhất
– thresholdType: kiểu phân ngưỡng
Trang 72Lập trình xử lý ảnh trên nền nhúng
Hàm chuyển sang ảnh nhị phân
• Phân ngưỡng thích nghi
– Src: ảnh ban đầu, dst: ảnh kết quả
– maxValue: giá trị lớn nhất
– adaptiveMethod: phương pháp tính ngưỡng thích nghi (CV_ADAPTIVE_THRESH_MEAN_C hay
CV_ADAPTIVE_THRESH_GAUSSIAN_C)
Trang 73Lập trình xử lý ảnh trên nền nhúng
Demo chuyển sang ảnh nhị phân
Trang 74Lập trình xử lý ảnh trên nền nhúng
74
Thảo luận
Trang 75Lập trình xử lý ảnh trên nền nhúng 75
Bài số 4
Lập trình ứng dụng bộ lọc số
Trang 76Lập trình xử lý ảnh trên nền nhúng 76
Mục tiêu bài học số 4
Sau khi kết thúc bài học này, sinh viên có thể
• Trình bày được các khái niệm căn bản về lọc số
và ứng dụng của bộ lọc số trong xử lý ảnh
• Lập trình một số kỹ thuật cơ bản trong xử lý ảnh ứng dụng các bộ lọc trung bình, trung vị,
Gaussian
Trang 78Lập trình xử lý ảnh trên nền nhúng
4.1 Tổng quan về lọc số
Trang 82Lập trình xử lý ảnh trên nền nhúng
Bộ lọc trung bình
• Lọc trung bình với mặt nạ (kernel) kích thước
3x3
Trang 83Lập trình xử lý ảnh trên nền nhúng
Kết quả bộ lọc trung bình
• Kết quả bộ lọc trung bình sử dụng nhiều kích
thước mặt nạ khác nhau
Trang 85Lập trình xử lý ảnh trên nền nhúng
4.3 Bộ lọc trung vị
• Lọc trung vị cho kết quả tốt hơn và cho phép giữ lại nhiều chi tiết hữu ích trên ảnh hơn so với lọc trung bình Để thực hiện lọc trung vị, chúng ta cũng dùng một cửa sổ như lọc trung bình nhưng thay vì đơn
giản thay thế giá trị mức xám hiện tại với trung bình giá trị mức xám của các điểm lân cận bao bởi cửa
sổ, chúng ta phải thực hiện các bước như sau:
– Sắp xếp tất cả các giá trị mức xám trong phạm vi cửa sổ thành một chuỗi.
– Thay thế giá trị mức xám của điểm đang xét với giá trị
mức xám ở giữa Ví dụ :
Trang 87Lập trình xử lý ảnh trên nền nhúng
Lọc trung vị
Trang 89Lập trình xử lý ảnh trên nền nhúng
4.4 Bộ lọc Gaussian
Phân bố Gaussian
Mặt nạ xấp xỉ phân bố Gaussian
(sigma=1.0)
Trang 90Lập trình xử lý ảnh trên nền nhúng
Bộ lọc Gaussian
• Kết quả áp dụng bộ lọc Gaussian
Trang 92Lập trình xử lý ảnh trên nền nhúng
4.5 Các phép xử lý hình thể
• Phép mở rộng vùng ảnh: Dilation
• Phép thu hẹp vùng ảnh: Erosion
• Phép thu nhỏ-phóng to: Opening (Thực hiện
erosion trước, Dilation sau)
• Phép phóng to-thu nhỏ: Closing (Thực hiện
Dilation trước, erosion sau)
Trang 93Lập trình xử lý ảnh trên nền nhúng
Phép Dilation
• Mở rộng vùng ảnh
Trang 94Lập trình xử lý ảnh trên nền nhúng
Phép Erosion
• Thu hẹp vùng ảnh
Trang 95Lập trình xử lý ảnh trên nền nhúng
Phép Opening
• Thu nhỏ trước – Phóng to sau
Trang 96Lập trình xử lý ảnh trên nền nhúng
Phép Closing
• Phóng to trước – Thu nhỏ sau
Trang 97Lập trình xử lý ảnh trên nền nhúng
Thực thi các phép xử lý hình thể
Phép Erosion
Phép Dilation
Trang 99Lập trình xử lý ảnh trên nền nhúng
Demo
Trang 100Lập trình xử lý ảnh trên nền nhúng
Demo tính tích chập
Trang 101Lập trình xử lý ảnh trên nền nhúng
Demo lọc trung bình
Trang 102Lập trình xử lý ảnh trên nền nhúng
Demo lọc trung vị
Trang 103Lập trình xử lý ảnh trên nền nhúng
Demo lọc Gaussian
Trang 104Lập trình xử lý ảnh trên nền nhúng
104
Thảo luận
Trang 105Lập trình xử lý ảnh trên nền nhúng 105
Bài số 5
Trích chọn đặc trưng của ảnh
Trang 106Lập trình xử lý ảnh trên nền nhúng 106
Mục tiêu bài học số 5
Sau khi kết thúc bài học này, sinh viên có thể
• Trình bày được các đặc trưng cơ bản của ảnh
• Lập trình trích chọn các đặc trưng về biên ảnh và đặc trưng cục bộ trong ảnh
Trang 107Lập trình xử lý ảnh trên nền nhúng 107
Nội dung bài học
5.1 Tổng quan về các đặc trưng của ảnh
5.2 Lập trình dò biên ảnh
5.3 Lập trình trích chọn đặc trưng cục bộ SURF
Trang 108Lập trình xử lý ảnh trên nền nhúng
5.1 Tổng quan các đặc trưng ảnh
• Đặc trưng của ảnh là những thông tin phân biệt ảnh này với ảnh khác, giúp cho các bài toán về phân lớp, tìm kiếm … ảnh được thực hiện dễ
dàng và chính xác Đặc trưng ảnh được phân
làm hai nhóm
– Đặc trưng toàn cục (global feature): đặc trưng
biểu diễn cho toàn ảnh
– Đặc trưng cục bộ (local feature): đặc trưng biểu diễn cho từng vùng của ảnh
Trang 109Lập trình xử lý ảnh trên nền nhúng
Đặc trưng toàn cục
• Đặc điểm của đặc trưng cục bộ
– Cho phép biểu diễn, tổng quát hóa toàn bộ ảnh thành dạng một vector
• Ưu điểm
– Tốc độ tính toán nhanh
• Nhược điểm
– Độ phân biệt (distinctive factor) không cao
• Ví dụ: Histogram màu, Histogram mức xám,
contour, texture
Trang 110Lập trình xử lý ảnh trên nền nhúng
Đặc trưng cục bộ
• Đặc điểm của đặc trưng cục bộ
– Cho phép biểu diễn ảnh một cách chi tiết hơn, mỗi một
ảnh được biểu diễn bởi nhiều vector đặc trưng cục bộ
• Ưu điểm
– Độ phân biệt (distinctive factor) cao hơn đặc trưng toàn cục
• Nhược điểm
– Thời gian tính toán,trích chọn sẽ lâu hơn
• Ví dụ: SIFT (Scale Invariant Feature Transform),
SURF (Speed up robust feature)
Trang 111Lập trình xử lý ảnh trên nền nhúng
5.2 Lập trình dò biên ảnh
• Giới thiệu về dò biên
– Biên là các điểm mà ở đó có sự thay đổi lớn về giá trị màu/mức xám
– Dò biên sẽ giảm đáng kể lượng dữ liệu, lọc bỏ
các thông tin không cần thiết trong khi vẫn giữ
được các đặc tính quan trọng về cấu trúc của
ảnh
• Phân loại
– Phương pháp dựa trên gradient(đạo hàm cấp 1)– Phương pháp dựa trên Laplacian(đạo hàm cấp 2)
Trang 112Lập trình xử lý ảnh trên nền nhúng
Dò biên Sobel dựa trên gradient
• Phương pháp gradient dò biên bằng cách tìm các điểm cực đại và cực tiểu của đạo hàm cấp 1 của
ảnh
• Do ảnh số được lưu trữ trên miền rời rạc, 2 chiều,
do đó chúng ta phải sử dụng các ma trận xấp xỉ đạo hàm, gọi là các cửa sổ