slide_xu_ly_anh

185
1 Khó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

Upload: commodus-brupilus

Post on 29-Dec-2014

278 views

Category:

Documents


21 download

DESCRIPTION

Slide xử lý ảnh

TRANSCRIPT

Page 1: Slide_Xu_ly_anh

1

Khóa học

Lập trình xử lý ảnh trên nền nhúngGV: 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

Page 2: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng 2

Mục tiêu khóa học

Sau khi kết thúc môn học này, sinh viên có thể

• Trình bày mô hình hệ thống xử lý ảnh

• Nắm vững các kỹ thuật cơ bản về xử lý ảnh

• 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

Page 3: Slide_Xu_ly_anh

Lậ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

Bài 4. Lập trình ứng dụng bộ lọc số

Bài 5. Trích chọn đặc trưng của ảnh

Bài 6. Lập trình nhận dạng khuôn mặt

Bài 7. Lập trình nhận dạng mã Auto ID

Bài 8. Các kỹ thuật nâng cao tốc độ xử lý ảnh

Page 4: Slide_Xu_ly_anh

Lậ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/

Page 5: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng5

Bài số 1

Tổng quan

Xử lý ảnh và ứng dụng

Model

Ứng dụng

QT & OpenCV

Page 6: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng6

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ý

ảnh và ứng dụng

• Trình bày mô hình tổng quát hệ thống thu nhận

và xử lý ảnh

• Trình bày được các thành phần cơ bản của thư

viện OpenCV và nền tảng QT

Page 7: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng7

Nội dung bài học

1.1. Tổng quan về xử lý ảnh

1.2. Giới thiệu nền tảng QT và thư viện OpenCV

Page 8: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

1.1. Tổng quan xử lý ảnh

Khái niệm xử lý ảnh

• Nâng cao chất lượng hình ảnh theo một tiêu chí

nào đó (Cảm nhận của con người)

• 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.

Page 9: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Mô hình hệ thống xử lý ảnh

Camera

Sensor

Thu nhận

ảnhSố hóa

Phân tích

ảnh

Đối sánh

Nhận dạng

Hệ

quyết địnhLưu trữ

Lưu trữ

Page 10: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Các bài toán xử lý ảnh

Image

Acquisition

Image

EnhancementImage

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

Page 11: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Các bài toán xử lý ảnh

• Thu nhận ảnh, số hóa ảnh (image aquisition)

– Hệ thống chụp ảnh, tín hiệu ảnh

– Hệ thống số hóa ảnh: Các phương pháp lấy mẫu,

lượng tử hóa

• Cải thiện ảnh, khôi phục ảnh, lọc nhiễu (tiền

xử lý – image pre-processing)

– Các phép xử lý điểm ảnh

– Các phép xử lý trên miền không gian

– Các phép xử lý trên miền tần số

1

1

Page 12: Slide_Xu_ly_anh

Lậ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,

image description)

– Phân lớp ảnh (image classification)

– Nhận dạng ảnh (image recognition)

– …

• Mã hóa, nén ảnh

– Các phương pháp nén ảnh, các chuẩn nén ảnh

• Truyền thông ảnh: các kỹ thuật streaming1

2

Page 13: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Ứng dụng xử lý ảnh

Page 14: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Ứng dụng tăng cường chất lượng

Page 15: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Hiệu ứng panorama

Page 16: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Ứng dụng nhận dạng khuôn mặt

Page 17: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Nhận dạng người chuyển động

Page 18: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Nhận dạng đối tượng chuyển động

Page 19: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Nhận dạng chữ viết tay

Page 20: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Nhận dạng vân tay

Page 21: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Nhận dạng mống mắt (iris)

Page 22: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Mô hình hóa 3D & AR (Augmented Reality)

KINECT

Page 23: Slide_Xu_ly_anh

Lậ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

Page 24: Slide_Xu_ly_anh

Lậ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

Page 25: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Thư viện OpenCV

Page 26: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Kiến trúc thư viện OpenCV

Page 27: Slide_Xu_ly_anh

Lậ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

(clustering).

• HighGUI: các hàm vào ra và các hàm lưu trữ,

nạp và hiển thị ảnh và video

• CXCore: chứa các kiểu dữ liệu cơ bản, một số

thuật toán cơ bản và các hàm vẽ, có hỗ trợ XML

Page 28: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng28

Thảo luận

Page 29: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng29

Bài số 2

Lập trình xử lý ảnh

Trên KIT nhúng micro2440

OpenCV

Thu nhận

Hiển thị

Page 30: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng30

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

Page 31: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng31

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

Page 32: Slide_Xu_ly_anh

Lậ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

• Chi tiết: Xem tài liệu hướng dẫn cài đặt

Page 33: Slide_Xu_ly_anh

Lậ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

• Chi tiết: Xem tài liệu hướng dẫn cài đặt

Page 34: Slide_Xu_ly_anh

Lậ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

Page 35: Slide_Xu_ly_anh

Lậ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

Page 36: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng36

2.4. Lập trình đọc ảnh và hiển thị

• Các kiểu dữ liệu cơ bản trong OpenCV

cvArr

cvMat

IplImage

CvCapture

Page 37: Slide_Xu_ly_anh

Lậ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" );

Page 38: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

2.5. Lập trình kết nối webcam

• Hàm mở webcam:

CvCapture* capture=cvCreateCameraCapture(0)

• Hàm mở file video:

Page 39: Slide_Xu_ly_anh

Lậ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);

Page 40: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo

Page 41: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo hiển thị file ảnh

Page 42: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo kết nối camera

Page 43: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng43

Thảo luận

Page 44: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng44

Bài số 3

Các phép biến đổi cơ bản

Page 45: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng45

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

Page 46: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng46

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

Page 47: Slide_Xu_ly_anh

Lậ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

Page 48: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Ảnh số

• Một ảnh số thường được biểu diễn như một ma

trận các điểm ảnh

• Trong đó mỗi điểm ảnh có thể được biểu diễn

bằng

– 1 bit (ảnh nhị phân)

– 8 bit (ảnh đa mức xám)

– 16, 24 bit (ảnh màu)

Page 49: Slide_Xu_ly_anh

Lậ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

Page 50: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

3.2. Chuyển ảnh màu -> đa mức xám

Sử dụng công thức:

Gray scale= 0.2989*R+ 0.5870*G + 0.1140*B;

50

Page 51: Slide_Xu_ly_anh

Lậ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

Page 52: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo chuyển sang ảnh đa mức xám

Page 53: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

3.3. Histogram

Biều đồ này đơn giản cho chúng ta biết số điểm

ảnh (pixel) trong một ảnh đa mức xám có một

giá trị mức xám tương ứng.

Thông số: số bins (=256 với ảnh đa mức xám)

53

Page 54: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Histogram

Ảnh tối

54

Page 55: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Histogram

Ảnh sáng

55

Page 56: Slide_Xu_ly_anh

Lậ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

Page 57: Slide_Xu_ly_anh

Lậ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

Page 58: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Hàm tính Histogram

• Bước 2: Tính Histogram sử dụng hàm

cvCalcHist

– Image: Ảnh cần tính Histogram

– 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

Page 59: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Hàm tính Histogram

• Bước 3: Vẽ phân bố Histogram

• Bước 4: Giải phóng bộ nhớ sử dụng hàm

cvClearHist

Page 60: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo tính Histogram của ảnh

Page 61: Slide_Xu_ly_anh

Lậ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

Page 62: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Dãn độ tương phản

62

Ảnh trước và sau khi tiến hành dãn độ tương phản

Page 63: Slide_Xu_ly_anh

Lậ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

Page 64: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Cân bằng Histogram

Công thức thực hiện:

bk = (bmax – bmin)

Trong đó bmin, bmax là những giá trị được chọn, pi là

xác suất xuất hiện giá trị mức xám i trong ảnh ban

đầu, với i [amin, amax]

64

Page 65: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Hàm cân bằng Histogram

• Sử dụng hàm cvEqualizeHist

– Src: ma trận ảnh gốc

– Dst: ma trận ảnh sau khi đã cân bằng Histogram

Page 66: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo cân bằng Histogram

Page 67: Slide_Xu_ly_anh

Lậ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

Page 68: Slide_Xu_ly_anh

Lậ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

Page 69: Slide_Xu_ly_anh

Lậ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

Page 70: Slide_Xu_ly_anh

Lậ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)

Page 71: Slide_Xu_ly_anh

Lậ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

Page 72: Slide_Xu_ly_anh

Lậ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)

Page 73: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo chuyển sang ảnh nhị phân

Page 74: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng74

Thảo luận

Page 75: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng75

Bài số 4

Lập trình ứng dụng bộ lọc số

Page 76: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng76

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

Page 77: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Nội dung bài 4

4.1. Tổng quan về lọc số

4.2. Bộ lọc trung bình

4.3. Bộ lọc trung vị

4.4. Bộ lọc Gaussian

4.5. Các phép xử lý hình thể (morphology)

4.6. Dò tìm đường thẳng

Page 78: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

4.1. Tổng quan về lọc số

Page 79: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Công thức nhân chập (convolution)

• Công thức nhân chập

• Trong đó

– X(m,n) là ma trận ban đầu của ảnh kích thước

mxn

– H(k,l) là ma trận hạt nhân của phép nhân chập

hay còn gọi là mặt nạ

– Y(m,n) là ma trận đầu ra của phép nhân chập

giữa X và H

( , ) ( , )* ( , ) ( , ) ( , )r r

k r l r

Y m n X m n H k l X m k n l H k l

Page 80: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Hàm tính nhân chập của OpenCV

• Src: ảnh gốc, dst: kết quả

• Kernel: mặt nạ nhân chập

• Anchor: điểm neo, điểm mốc để đặt mặt nạ nhân

chập

Page 81: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

4.2. Bộ lọc trung bình

Ý tưởng bộ lọc trung bình: thay thế giá trị tại mỗi

pixel bằng trung bình các giá trị pixel trong mặt

nạ lân cận

• loại bỏ những pixel biến đổi lớn so với lân cận

(nhiễu)

• những pixel nằm trên biên cũng có sự biến đổi

lớn so với lân cận làm mờ

Page 82: Slide_Xu_ly_anh

Lậ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

Page 83: Slide_Xu_ly_anh

Lậ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

Page 84: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Thực thi bộ lọc trung bình

• Sử dụng hàm cvSmooth với tham số smoothtype

là CV_BLUR

– Src: ảnh gốc, dst: kết quả

– Param1, param2, param3, param4: các tham số

tùy thuộc vào bộ lọc

– Param1 và param 2 quy định kích thước mặt nạ

nhân chập

Page 85: Slide_Xu_ly_anh

Lậ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ụ :

Page 86: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Lọc trung vị

• Xét vùng ảnh 5x5 và sử dụng mặt nạ 3x3

• Bước 1: Sắp xếp các giá trị trong mặt nạ

90, 111, 120, 123, 132, 142, 137, 179, 198

• Bước 2: Lựa chọn giá trị mới thay thế cho giá trị 90, ở đây là

132

Page 87: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Lọc trung vị

Page 88: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Thực thi bộ lọc trung vị

• Sử dụng hàm cvSmooth với tham số smoothtype

là CV_MEDIAN

– Src: ảnh gốc, dst: kết quả

– Param1, param2, param3, param4: các tham số

tùy thuộc vào bộ lọc

– Param1 và param 2 quy định kích thước mặt nạ

nhân chập

Page 89: Slide_Xu_ly_anh

Lậ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)

Page 90: Slide_Xu_ly_anh

Lậ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

Page 91: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Thực thi bộ lọc GAUSSIAN

• Sử dụng hàm cvSmooth với tham số smoothtype

là CV_GAUSSIAN

– Src: ảnh gốc, dst: kết quả

– Param1, param2, param3, param4: các tham số

tùy thuộc vào bộ lọc

– Param1 và param 2 quy định kích thước mặt nạ

nhân chập

Page 92: Slide_Xu_ly_anh

Lậ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)

Page 93: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Phép Dilation

• Mở rộng vùng ảnh

Page 94: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Phép Erosion

• Thu hẹp vùng ảnh

Page 95: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Phép Opening

• Thu nhỏ trước – Phóng to sau

Page 96: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Phép Closing

• Phóng to trước – Thu nhỏ sau

Page 97: Slide_Xu_ly_anh

Lậ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

Page 98: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

4.6. Dò tìm đường thẳng

• Sử dụng mặt nạ nhân chập phù hợp theo các

hướng đường thẳng muốn trích chọn

Page 99: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo

Page 100: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo tính tích chập

Page 101: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo lọc trung bình

Page 102: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo lọc trung vị

Page 103: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo lọc Gaussian

Page 104: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng104

Thảo luận

Page 105: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng105

Bài số 5

Trích chọn đặc trưng của ảnh

Page 106: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng106

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

Page 107: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng107

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

Page 108: Slide_Xu_ly_anh

Lậ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

Page 109: Slide_Xu_ly_anh

Lậ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

Page 110: Slide_Xu_ly_anh

Lậ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)

Page 111: Slide_Xu_ly_anh

Lậ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)

Page 112: Slide_Xu_ly_anh

Lậ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ổ.

Page 113: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Dò biên Sobel dựa trên gradient

• Với hai cửa sổ này, chúng ta sẽ tính được gradient theo hai

hướng bằng cách tích chập ảnh với từng cửa sổ. Giả sử

gradient thu được theo 2 hướng là các ma trận Gx, Gy (kích

thước bằng kích thước ảnh). Sau đó, chúng ta cần tính độ

lớn Gradient tại một điểm ảnh, có hai cách tính thông dụng

đó là:

Sau đó, ta sẽ tìm một ngưỡng phù hợp để lọc biên. Ta ký

hiệu ngưỡng này là T. nếu Gradient tại điểm đó lớn hơn

hoặc bằng T, ta sẽ thiết lập nó bằng 1 (tương ứng với

điểm biên), nếu không, ta thiết lập nó bằng 0 (nền).

Page 114: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Kết quả dò biên sobel

Page 115: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Thực thi dò biên Sobel

• Hàm dò biên sobel: cvSobel

– Src: ảnh gốc, dst: kết quả

– Xorder: cấp đạo hàm theo trục X

– Yorder: cấp đạo hàm theo trục Y

– apertureSize: kích thước mặt nạ nhân chập

Page 116: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo dò biên Sobel

Page 117: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo dò biên Canny

Page 118: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Thực thi dò biên Canny

• Hàm dò biên sobel: cvCanny

– Src: ảnh gốc, edges: kết quả

– Threshold1: ngưỡng 1

– Threshold2: ngưỡng 2

– apertureSize: kích thước mặt nạ nhân chập

Page 119: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

5.3. Trích chọn đặc trưng SURF

• Đặc tính kỹ thuật của SURF

– Sử dụng bộ phát hiện đặc trưng Hessian blob detector

– Sử dụng biến đổi Haar wavelet 2 chiều

– Sử dụng kỹ thuật tích phân ảnh (integral image) để tăng

tốc độ tính toán

• Có nhiều điểm tương đồng với SIFT nhưng tốc độ

trích chọn đặc trưng nhanh hơn SIFT

• Ứng dụng: nhận dạng vật thể (Object Recognition)

hay mô hình hóa 3D (3D recontruction)

Page 120: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Trình tự trích chọn đặc trưng SURF

• Bước 1: Xác định các điểm đáng quan tâm

(interest point) sử dụng Hessian blob detector.

SURF áp dụng kỹ thuật tính phân ảnh để tăng

tốc công đoạn này

• Bước 2: Trích chọn và biểu diễn đặc trưng.

Ở bước này sẽ duyệt lại các đặc trưng đã tìm

ra ở bước 1 và chỉ lọc ra các đặc trưng tốt

nhất (bất biến về tỷ lệ và góc quay). Mỗi đặc

trưng sẽ được biểu diễn bởi một vector 128

phần tử

Page 121: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Đặc trưng SURF

• Mỗi hình tròn biểu

diễn cho một interest

point tìm được

(keypoint)

• Bán kính hình tròn

biểu diễn tỷ lệ của

keypoint

Page 122: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Thực thi trích chọn đặc trưng SURF

• Sử dụng hàm cvExtractSURF

– Image: Ảnh đa mức xám

– Keypoints: danh sách các điểm bất biến theo góc

quay và tỉ lệ

– Descriptors: các vector mô tả cho các Keypoints

– Storage: vùng nhớ lưu trữ các Keypoints và các

Descriptor của nó

Page 123: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo trích chọn đặc trưng SURF

Page 124: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Ứng dụng tìm kiếm, đối sánh ảnh

• Yêu cầu bài toán: Đầu vào là 2 ảnh khác nhau.

Mục tiêu là cần đánh giá hai ảnh đấy có biểu

diễn cùng một đối tượng, vật thể hay không

• Bước 1: Trích chọn đặc trưng SURF của cả hai

ảnh

• Bước 2: Sử dụng các hàm tính độ tương đồng

để đánh giá các cặp Interesed point tương đồng

giữa hai ảnh

• Bước 3: Đánh giá hai ảnh có tương đồng hay

không dựa trên số cặp interested point tương

đồng

Page 125: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo: đối sảnh ảnh sử dụng SURF

Page 126: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng126

Thảo luận

Page 127: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng127

Bài số 6

Lập trình

Nhận dạng khuôn mặtMachine learning

Haar

Face detection

Page 128: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng128

Mục tiêu bài học số 6

Sau khi kết thúc bài học này, sinh viên có thể

• Trình bày được các kiến thức tổng quan về học

máy

• Giới thiệu kỹ thuật nhận dạng khuôn mặt sử

dụng bộ lọc Haar

• Lập trình nhận dạng khuôn mặt

Page 129: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng129

Nội dung bài học

6.1. Tổng quan về học máy

6.2. Tổng quan về bài toán nhận dạng khuôn mặt

6.3. Đặc trưng Haar

6.4. Phương pháp Ada boost

6.5. Lập trình nhận dạng khuôn mặt

Page 130: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

6.1. Tổng quan về học máy

• Học máy (Machine Learning) là một ngành khoa

học nghiên cứu các thuật toán cho phép máy tính

có thể học được các khái niệm (concept) từ đó hỗ

trợ đưa ra các quyết định trong nhiều bài toán ứng

dụng khác nhau:

– Xử lý ngôn ngữ tự nhiên: xử lý tiếng nói, văn bản

– Nhận dạng (Pattern Recognition): nhận dạng chữ

viết, nhận dạng vân tay …

– Tìm kiếm (Search Engine): tìm kiếm ảnh, video

– Công nghệ robot

– Game: đánh cờ, đá bóng …

Page 131: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Phân loại học máy

• Có hai phương pháp chính

– Phương pháp quy nạp: Máy học/phân biệt các

khái niệm dựa trên dữ liệu đã thu thập được

trước đó. Phương pháp này cho phép tận dụng

được nguồn dữ liệu rất nhiều và sẵn có.

– Phương pháp suy diễn: Máy học/phân biệt các

khái niệm dựa vào các luật. Phương pháp này

cho phép tận dụng được các kiến thức chuyên

ngành để hỗ trợ máy tính.

Page 132: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Các nhóm giải thuật học máy

• Học có giám sát: Máy tính được xem một số

mẫu gồm đầu vào (input) và đầu ra (output)

tương ứng trước (có sự hỗ trợ của con người để

ra quyết định). Sau khi học xong các mẫu này,

máy tính quan sát một đầu vào mới và cho ra kết

quả.

• Học không giám sát: Máy tính chỉ được xem các

mẫu không có đầu ra, sau đó máy tính phải tự

tìm cách phân loại các mẫu này và các mẫu mới.

Page 133: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Các nhóm giải thuật học máy

• Học nửa giám sát: Một dạng lai giữa hai nhóm

giải thuật trên.

• Học tăng cường (Học có phản hồi): Máy tính đưa

ra quyết định hành động (action) và nhận kết

quả phản hồi (response/reward) từ môi trường

(environment). Sau đó máy tính tìm cách chỉnh

sửa cách ra quyết định hành động của mình.

Page 134: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

6.2. Bài toán nhận dạng khuôn mặt

134

Khuôn MătKhông phai

măt

Page 135: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Các phương pháp giải quyết

135

Dưa trên đăc

trưng bất biên

Phát hiên

khuôn măt

Dưa trên

tri thức

Dưa trên so

sánh mâu

Dưa trên

diên mao

Luật

Luật

Luật

Page 136: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Các phương pháp giải quyết

• Dựa trên tri thức: mã hóa hiểu biết của con người

về các loại khuôn mặt và tạo ra các tập luật để xác

định khuôn mặt

• Dựa trên đặc trưng bất biến: mục tiêu các thuật

toán tìm ra các đặc trưng mô tả cấu trúc khuôn mặt

người (đặc trưng bất biến với tư thế,vị trí ,độ sáng

tối…)

• Dựa trên so mâu: Sử dụng một mẫu chuẩn hay đặc

trưng của khuôn mặt người, tính giá trị tương quan

• Dựa trên diện mạo: Huấn luyện một tập ảnh chứa

mặt và 1 tập ảnh ko chứa mặt => luật

Page 137: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

6.3. Đặc trưng Haar

• Các đặc trưng Haar được dùng để tính độ chênh

lệch giữa các giá trị điểm ảnh trong các vùng kề

nhau. Dùng các đặc trưng trên, ta tính được giá trị

của đặc trưng Haar-like là sự chênh lệch tổng của

các pixel của các vùng đen và vùng trắng bằng công

thứ sau: f(x) = tổng vùng đên (các mức xám của

pixel) – tổng vùng trắng (các mức xám của pixel)

• Các cửa sổ để tính đặc trưng Haar

(a) (b) (c) (d)(a) (b) (c) (d) (e) (f) (g) (h)

Page 138: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Đặc trưng Haar

• Các đặc trưng Haar sử dụng trong bài toán nhận

dạng khuôn mặt

Page 139: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Tính đặc trưng Haar

• Để tính các giá trị đặc trưng Haar-like ta tính

tổng của các vùng pixel trên ảnh. Nhưng để tính

toán các giá trị của các đặc trưng Haar-like cho

tất cả các vị trí trên ảnh đòi hỏi chi phí tính toán

rất lớn nên sẽ không đáp ứng được cho các ứng

dụng mang tính thời gian thực->Khái niệm

Integral Image (ảnh tích phân) được đưa ra

Page 140: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Ảnh tích phân (Integral Image)

• Ảnh tích phân: mảng 2 chiều với kích thước bằng

kích thước ảnh cần tính các đặc trưng Haar-like

• Mỗi phần tử của mảng này được tính bằng cách tính

tổng của điểm ảnh phía trên và bên trái của nó. Bắt

đầu từ vị trí trên bên trái đến vị trí phía dưới bên

phải ảnh.

Page 141: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

6.4. Phương pháp Ada boots

Nguyên tắc:•Kết hợp các bộ lọc yếu

để tạo thành một bộ lọc

mạnh

•Thực hiện như một hệ

thống thác lọc

Page 142: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

6.5. Mô hình nhận dạng khuôn mặt

• Thuật toán AdaBoost là thuật toán máy học,vì

vậy hệ thống thường chia làm 2 quá trình:

Quá trình học: thực hiện với nhiều mẫu(có mặt

và không có mặt). Kết thúc quá trình học thông

thường cho ra kết quả là một bộ tham số, một mô

hình (model) ... Trong OpenCV sẽ lưu dưới dạng

file XML (haarcascade_frontalface_alt_tree.xml,

haarcascade_frontalface_default.xml,..)

Quá trình chạy: cho ra kết quả trực tiếp căn cứ

vào giá trị mô hình đã có

Page 143: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

6.5. Lập trình nhận dạng khuôn mặt

Page 144: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Mô hình nhận dạng khuôn mặt

• Từ một ảnh ban đầu, tính Integral Image

• Các vùng ảnh con này sẽ được đưa qua các

hàm Haar cơ bản để ước lượng đặc trưng, kết

quả ước lượng sẽ được đưa qua bộ điều chỉnh

AbaBoost để loại bỏ nhanh các đặc trưng không

có khả năng là đặc trưng khuôn mặt người

• Tập nhỏ đặc trưng khuôn mặt người được

chuyển sang cho bộ quyết định kết quả. Bộ

quyết định kết quả sẽ tổng hợp kết quả là khuôn

mặt người nếu kết quả của các bộ phân loại yếu

trả về khuôn mặt người.

Page 145: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Mô hình thác lọc (cascade)

Stage

Tree

Node

Feature

Page 146: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Quá trình lọc

146

Stage 0

Tree 0

Root note

<_>2 7 16 4 -

1.</_>

<_>2 9 16 2

2.</_>

Ngưỡng

Không phải mặtStage1

Page 147: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Nhận dạng khuôn mặt trên OpenCV

• Bước 1: Thu nhận video stream từ

camera/webcam, trích chọn các Frame theo một

tần suất nhất định, khoảng 10 hình/s (sử dụng

Timer)

• Bước 2: Sử dụng hàm cvHaarDetectObjects

để detect khuôn mặt

– 1) Load bộ phân lớp có được qua quá trình học

máy sử dụng hàm cvLoad

– 2) Sử dụng hàm cvHaarDetectObjets dựa trên

bộ phân lớp ở trên

Page 148: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo

Page 149: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Demo nhận dạng khuôn mặt

Page 150: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng150

Thảo luận

Page 151: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng151

Bài số 7

Lập trình

Nhận dạng mã Auto ID

Page 152: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng152

Mục tiêu bài học số 7

Sau khi kết thúc bài học này, sinh viên có thể

• Trình bày về mã Auto ID và ứng dụng

• Trình bày được chuẩn định dạng Barcode và QR

code

• Lập trình nhận dạng mã vạch Barcode

• Lập trình nhận dạng mã QR code

Page 153: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng153

Nội dung bài học

7.1. Tổng quan mã Auto ID và ứng dụng

7.2. Chuẩn định dạng Barcode và QR code

7.3. Giới thiệu thư viện zbar

7.4. Lập trình đọc mã Barcode

7.5. Lập trình đọc mã QR code

Page 154: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

7.1. Tổng quan về Auto ID và ứng dụng

• Auto ID (Automatic Identification) là các phương

pháp, kỹ thuật cho phép xác định và lấy về thông

tin của các đối tượng một cách nhanh chóng, tự

động

• Một số công nghệ AutoID

– Thẻ từ

– Thẻ thông minh (RFID, NFC)

– Barcode, QRcode

Page 155: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

7.2. Chuẩn định dạng Barcode và QRcode

• Barcode: biểu diễn dữ liệu bằng cách thay đổi

độ rộng của các vạch đen và khoảng trắng

Page 156: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Chuẩn định dạng Barcode

• Các chuẩn phổ biến

– UPC

– Code 39

– Code 128

– EAN-8, EAN-13

Page 157: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Format của chuẩn UPC

• Phiên bản UPC-A

– Tuân thủ format: SLLLLLLMRRRRRRE (S: Start, M:

Middle, E: End, L: Left, R: Right)

– Xác định độ rộng cơ sở (x-dimension)=0.33mm

– Xác định các thành phần khác dựa trên độ rộng cơ sở

Page 158: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Format của chuẩn UPC

• Mỗi số được biểu diễn bởi 2 vạc đen (bars) và 2

vùng trắng (spaces), kích thước khác nhau

• Tổng bề rộng của 1 số luôn luôn 7 modules (mỗi

module có bề rộng là 1 x-dimension)

• Tổng bề rộng của toàn bộ mã là 95 modules, 84

modules cho nội dung và 11 modules cho S,E và M

Page 159: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Quy trình phát hiện và đọc Barcode

• Bước 1: Phát hiện vùng chứa Barcode

• Bước 2: Đọc dữ liệu tùy theo từng phiên bản mã

hóa của mã vạch

Page 160: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Chuẩn QR code

• QR code (Quick Response Code): một dạng mã

vạch hai chiều, có thể lưu trữ nhiều loại dữ liệu

(số, ký tự, dữ liệu nhị phân, ký tự trong bảng mã

Kanji)

Page 161: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Đặc tính kỹ thuật của QR code

Page 162: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Đặc tính kỹ thuật của QR code

Page 163: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Các phiên bản QR code khác nhau

Page 164: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Các phiên bản QR code khác nhau

Page 165: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Quy trình phát hiện và đọc QR code

Page 166: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Quy trình phát hiện và đọc QR code

• Bước 1: Phát hiện Position Detection Patterns

– Phát hiện các Patterns có format 1-1-3-1-1

Page 167: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Quy trình phát hiện và đọc QR code

• Bước 2: Xác định phiên bản sử dụng

• Bước 3: Gỡ bỏ mặt nạ để lấy về dữ liệu thô

• Bước 4: Đọc các cell data và các cell sửa lỗi để

trích rút dữ liệu cần thiết

Page 168: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

7.3. Giới thiệu thư viện zbar

• Zbar là thư viện mã nguồn mở cho phép

– Nhận dạng barcode, qrcode từ nhiều nguồn khác

nhau như ảnh, luồng video hoặc dữ liệu thô từ

cảm biến ảnh

– Hỗ trợ nhiều định dạng khác nhau như EAN-

13/UPC-A, UPC-E, EAN-8, Code 128, Code 39,

QR code

– Kiến trúc linh hoạt, có tính khả chuyển cao, có

thể porting lên nhiều nền tảng khác nhau

Page 169: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Mô hình thư viện ZBar

Page 170: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

7.4. Lập trình đọc mã Barcode

Page 171: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

7.5. Lập trình đọc mã QRcode

Page 172: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng172

Thảo luận

Page 173: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng173

Bài số 8

Các kỹ thuật

Nâng cao tốc độ xử lý ảnh

Page 174: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng174

Mục tiêu bài học số 8

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ó khăn thực tế trong quá

trình triển khai phần mềm xử lý ảnh trên hệ

nhúng

• Biết cách sử dụng kỹ thuật lập trình đa luồng và

triển khai ứng dụng theo mô hình client – server

để đáp ứng thời gian xử lý

• Nắm bắt ưu điểm của công nghệ xử lý sử dụng

bộ xử lý đồ họa chuyên dụng GPU

Page 175: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng175

Nội dung bài học

8.1. Kỹ thuật lập trình đa luồng

8.2. Triển khai ứng dụng theo mô hình client-server

8.3. Giới thiệu kỹ thuật xử lý hình ảnh hiệu năng

cao trên GPU

Page 176: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

8.1. Kỹ thuật xử lý đa luồng

• Nguyên lý: tách công việc cần xử lý ra thành

nhiều luồng chạy độc lập

• Ưu điểm: tăng đáng kể tốc độ xử lý

• Nhược điểm: khó khăn trong việc đồng bộ dữ

liệu giữa các luồng

– Cách khắc phục: Cần phân chia các luồng xử lý

một cách hợp lý (độc lập, hạn chế chia sẻ tài

nguyên, dữ liệu)

Page 177: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Kỹ thuật xử lý đa luồng

• Ví dụ: Bài toán nhận đầu vào là một ảnh, yêu cầu

tìm ra các ảnh tương tự trong cơ sở dữ liệu

• Cách 1(Không sử dụng đa luồng)

– Tính đặc trưng SURF của ảnh đầu vào với tất cả các ảnh

trong cơ sở dữ liệu

– Đo độ tương đồng giữa ảnh đầu vào với từng ảnh trong

cơ sở dữ liệu

• Cách 2(Sử dụng đa luồng)

– Chia tập ảnh trong cơ sở dữ liệu ra thành các nhóm khác

nhau (tương ứng với số luồng)

– Thực hiện 1 luồng để đo độ tương đồng với các ảnh đã

tính toán xong đặc trưng

Page 178: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

8.2. Mô hình client-server

• Nguyên lý: máy tính nhúng (Client) (khả năng

xử lý thấp hơn) chỉ thu nhận đầu vào/tiền xử lý

còn các công việc phức tạp hơn sẽ đẩy lên

Server (có khả năng tính toán cao hơn) xử lý và

trả kết quả về

• Ưu điểm: tận dụng tài nguyên của Server,giảm

tải cho client, tăng tốc độ tính toán

• Nhược điểm:

– Yêu cầu kết nối mạng giữa client-server phải đủ

nhanh và thông suốt

– Server phải giải quyết bài toán cân bằng tải

Page 179: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Mô hình client-server

• Ví dụ: Đầu vào là một ảnh, yêu cầu tìm ra các

ảnh tương tự trong cơ sở dữ liệu tương đối

lớn -> ko lưu trữ được trên máy client, máy

client ko đủ năng lực tính toán

• Giải pháp:

– Client thu nhận ảnh, đẩy lên Server

– Server tìm kiếm ảnh trong cơ sở dữ liệu, trả kết

quả về cho client hiển thị

Page 180: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

8.3. Xử lý ảnh sử dụng GPU

• Giới thiệu về GPU (Graphics Processing Unit)

– Mục đích đầu tiên tập trung vào xử lý đồ họa,

thiết kế theo kiến trúc đa lõi

– GPU phổ biến sử dụng từ 16->512 lõi

– Tối ưu hóa các kiến trúc lập trình song song->

tăng tốc độ xử lý lên rất cao

Page 181: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Kiến trúc GPU

Page 182: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Lập trình tối ưu hóa GPU

• Sử dụng thư viện CUDA (Compute Unified

Device Architecture - Kiến trúc thiết bị tính toán

hợp nhất)

– Là một kiến trúc tính toán song song

– Hỗ trợ nhiều ngôn ngữ lập trình

– Giúp các thành phần trong GPU có thể dễ dàng

thực hiện các công việc tương tự CPU

– CUDA SDK hỗ trợ cả Windows và Linux, cung

cấp các hàm API

Page 183: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Mô hình xử lý của CUDA

1. Sao chép dữ liệu từ bộ

nhớ chính vào bộ nhớ

GPU

2. CPU chỉ lệnh để xử lý

tại GPU

3. GPU thực thi song

song ở mỗi nhân

4. Sao chép kết quả từ

bộ nhớ GPU sang bộ

nhớ chính.

Page 184: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng184

Thảo luận

Page 185: Slide_Xu_ly_anh

Lập trình xử lý ảnh trên nền nhúng

Phụ lục A – Website quan trọng

http://www.friendlyarm.net //download

http://www.thaieasyelec.com/FriendlyARM

//mua KIT, download tài liệu

http://qt.nokia.com //Hỗ trợ QT SDK

185