Tải bản đầy đủ (.docx) (23 trang)

Nhận diện khuôn măt sử dụng vector SVM AI

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.53 MB, 23 trang )

TRƯỜNG ĐẠI HỌC TÂN TRÀO
KHOA KHOA HỌC CƠ BẢN
BỘ MÔN TIN HỌC

BÀI TẬP LỚN MƠN HỌC
Mơn học: Kỹ thuật lập trình tiên tiến
Tên đề tài: Phát hiện, nhận dạng khn mặt từ dữ liệu thu được từ Webcam Laptop

Nhóm thực hiện: Nhóm 8
1: Hồng Anh Tuấn
2: Ma Thị Thủy Trang
3: Tạ Văn Khánh
4: Cherxong Kertongpao

Giảng viên hướng dẫn: TS. Lê Văn Hùng

Tuyên Quang, ngày

tháng

năm 2021


MỤC LỤC

PHẦN I: MỞ ĐẦU
1. Tính cấp thiết của ứng dụng
Cơng nghệ thơng tin ngày càng phát triển và có vai trị hết sức quan trọng
khơng thể thiếu trong cuộc sống hiện đại. Con người ngày càng tạo ra những cỗ
máy thơng minh có khả năng tự nhận biết và xử lí được các cơng việc một cách tự
động, phục vụ cho lợi ích của con người. Ngày nay, với sự phát triển của nền khoa


học máy tính và việc nhận dạng hình ảnh khn mặt đã được ứng dụng rất nhiều
trong cuộc sống của chúng ta. Thông qua camera cho biết việc thực hiện các việc
phát hiện đối tượng, khách hàng để bảo mật, cảnh báo hoặc các ứng dụng như
robot để điều khiển việc giúp đỡ tự động từ hình ảnh khn mặt thu thập được.
Cùng với sự phát triển của trí tuệ nhân tạo là đặc trưng của lĩnh vực dự đốn,
phân tích các dự báo trong thế giới kỹ thuật số có tính học máy, địi hỏi cần phải
thu nhập dữ liệu và cho hệ thống máy tính học dần các dữ liệu để phân tích đưa ra
kết quả dự đoán. Ngày nay, trong những chiếc ô tô tự động thông minh, đã tích hợp
các hệ thống để cảnh báo về sự buồn ngủ của lái xe, (được minh họa trong hình 1)

Hình 1: Minh họa lái xe buồn ngủ

Điều đó giúp tránh được những tai nạn đáng tiếc xảy ra.
2


Hay phát hiện nhận dạng khuôn mặt được ứng dụng trong các tịa nhà lớn, nó
sử dụng để điểm danh hay giám sát người di chuyển hoặc hoạt động trong tịa nhà
(minh họa trong hình 2)

Hình 2: Điểm danh bằng hệ thống tự động

Điều đó phát hiện ra các hoạt động bất thường và định danh được kẻ trộm.
Từ lý do trên đã giúp nhóm chúng em tìm hiểu, quyết định lựa chọn thực hiện
đề tài này.
2. Mục tiêu
Một trong những đổi mới quan trọng nhất của giới nghiên cứu trong thập kỷ
qua là sự ra đời của các công nghệ nhận dạng. Từ giữa thế kỷ trước, vấn đề nhận
dạng vật thể đã được coi là nhiệm vụ khó khăn nhất trong lĩnh vực thị giác máy
tính. Cơng nghệ nhận dạng khn mặt có thể được sử dụng cho vô số ứng dụng, từ

bảo mật đến quảng cáo. Một số trường hợp sử dụng bao gồm:


Bảo mật trên thiết bị di động.



Mạng xã hội (chẳng hạn như Facebook, để gắn thẻ các cá nhân trong ảnh).
3




Bảo mật doanh nghiệp, vì các doanh nghiệp có thể sử dụng nhận dạng khn
mặt để vào tịa nhà.



Tiếp thị. Các nhà tiếp thị có thể sử dụng nhận dạng khn mặt để xác định
độ tuổi, giới tính và dân tộc để nhắm mục tiêu tới đối tượng cụ thể.
PHẦN II: NỘI DUNG
Chương I: Tổng quan

1.1: Lập trình hướng đối tượng
Lập trình hướng đối tượng (cịn được gọi là Object Oriented Programming,
viết tắt là “OOP”) là một phương thức lập trình mà lập trình viên lấy đối tượng làm
nền tảng để viết chương trình. Theo một định nghĩa khác, lập trình hướng đối
tượng là một phương pháp lập trình dựa trên khái niệm về lớp và đối tượng và tập
trung vào các đối tượng thao tác, giúp code dễ quản lý, tái sử dụng được và dễ bảo
trì.

Hiện nay, OOP là một trong những phương pháp lập trình rất quan trọng và
được sử dụng rộng rãi. Hầu hết các ngôn ngữ lập trình hiện nay như Java, PHP,
.NET, Ruby, Python… đều hỗ trợ OOP.
* Giải thích cụ thể về định nghĩa hướng đối tượng
- Đối tượng ( Object ): Đối tượng có thể là con người, điện thoại, máy tính, xe
cộ…mỗi một đối tượng sẽ gồm có 2 thơng tin là phương thức và thuộc tính.
+ Thuộc tính: Là các thơng tin, đặc điểm của đối tượng mà lập trình viên
hướng đến
+ Phương thức: Chính là các thao tác, hành động mà đối tượng lập trình có
thể thực hiện được.
Ví dụ: Nếu 1 chiếc điện thoại là một đối tượng


Điện thoại sẽ có các thuộc tính như: màu sắc, kích thước, bộ nhớ, …
4




Và các phương thức như: qt virus, khóa màn hình, phím khởi động,
sử dụng các trình duyệt.

- Lớp ( Class ): Mỗi một lớp là một kiểu dữ liệu chứa nhiều thuộc tính và
phương thức đã được định nghĩa sẵn từ trước. Đây được xem là sự trừu tượng hóa
của rất nhiều đối tượng. Kiểu dữ liệu này khác xa với các kiểu dữ liệu thông
thường, mỗi một lớp là một đơn vị bao gồm các sự kế hợp giữa các phương thức
và các thuộc tính. Nói một cách dễ hiểu là các đối tượng có các đặc tính giống
nhau sẽ được tập trung lại thành một lớp đối tượng.
*Đặc điểm cơ bản của OOP





Tính kế thừa ( Inheritance )
Tính đa hình (Polymorphism )
Tính trừu tượng ( Abstraction )

1.2: Tổng quan về xử lý ảnh và thị giác máy tính
1.3: Bộ thư viện OpenCV
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.
Thư viện OpenCV được phát hành với giấy phép BDS. Do đó các dịch vụ nó
cung cấp là hồn tồn miễn phí và được hạn chế tối đa các rào cản thông thường.
Cụ thể, bạn được phép sử dụng phần mềm này cho cả hoạt động thương mại lẫn
phi thương mại. OpenCV sở hữu giao diện thiên thiện với mọi loại ngơn ngữ lập
trình, ví dụ như C++, C, Python hay Java… Ngồi ra, nó cũng dễ dàng tương thích
với các hệ điều hành khác nhau, bao gồm từ Windows, Linux, Mac OS, iOS cho
đến cả Android.
5


Kể từ lần đầu xuất hiện từ năm 1999, giờ đây OpenCV đã sở hữu đội ngũ
người dùng hùng hậu, con số ước tính có thể lên tới 47.000 người. Tất cả là nhờ
những ưu điểm vượt trội của OpenCV.
*Chức năng có trong thư viện OpenCV



Bộ cơng cụ hỗ trợ 2D và 3D



Nhận diện khuôn mặt



Nhận diện cử chỉ



Nhận dạng chuyển động, đối tượng, hành vi.



Tương tác giữa con người và máy tính



Điều khiển Robot



Hỗ trợ thực tế tăng cường.

*Ứng dụng OpenCV trong thế giới thực






Giám sát tự động
Tìm kiếm, phục hồi, xử lý ảnh
Nhận dạng khuôn mặt, cử chỉ
Nhận dạng chữ viết, con số kí tự,

1.4: Học máy ( Machine Learning )
Học máy hay máy học có tên tiếng Anh đầy đủ là Machine Learning, (viết tắt
là ML). Thuật tốn Machine Learning là các chương trình máy tính có khả năng
học hỏi và hoàn thành các nhiệm vụ, đồng thời là cách để cải thiện hiệu suất theo
thời gian vô cùng hiệu quả.
Học máy là công nghệ được phát triển từ trí tuệ nhân tạo
Ngồi ra, Machine Learning cịn được biết là cịn là cơng nghệ phát triển từ
lĩnh vực trí tuệ nhân tạo tiên tiến nhất hiện nay. Để đảm bảo khơng có sai lệch và
khơng xuất hiện dữ liệu giả, Machine Learning vẫn cần quá trình tìm hiểu và lựa
chọn kỹ thuật phân tích dữ liệu từ con người.

6


Học máy ngày càng mang tính phổ biến trên tồn thế giới. Sự tăng trưởng
vượt bậc của dữ liệu lớn (Big Data) và các thuật toán Machine Learning đã cải
thiện độ chính xác của những mơ hình và dự đốn tương lai.
*Thuật toán học máy được chia thành 2 loại chính
- Học có giám sát (Supervised Learning)
- Học khơng có giám sát (Unsupervised Learning)
- Học bán giám sát (Semi – Supervised)

- Học củng cố (Reinforcement learning)
*Ứng dụng của Machine Learning trong thực tiễn
- Cảnh báo giao thông trên ứng dụng (trên ứng dụng Google Maps), (minh
họa trong hình 3)

Hình 3: Cảnh báo giao thơng

- Nhận dạng hình ảnh (Image Recognition): là một trong những ứng dụng phổ
biến nhất của Machine Learning. Có nhiều tình huống để phân loại đối tượng trong
một hình ảnh kỹ thuật số. Ví dụ, trường hợp ảnh đen trắng thì sẽ sử dụng phép đo
mức xám của từng pixel cịn trong ảnh màu thì lại sử dụng phép đo cường độ của 3
màu khác nhau tạo nên 1 pixel (R-G-B), (minh họa trong hình 4)

7


Hình 4:sử dụng phép đo mức xám của từng pixel

- Trợ lý ảo Siri của Apple (minh họa trong hình 5)

Hình 5: Ứng dụng Siri trên Iphone của Apple

- Xe tự hành của Google và Tesla (minh họa hình 6)

Hình 6: Xe tự hành của Google

- Máy chơi cờ vây AlphaGo của Google DeepMind (minh họa hình 7)
8



Hình 7: Máy chơi cờ vây của Google

- Hệ thống gợi ý phim của Netflix (minh họa hình 8)

Hình 8: Ứng dụng gợi ý phim trên Netflix

- Ứng dụng tag khn mặt trên Facebook (minh họa hình 9)

Hình 9: Ứng dụng tag khuôn mặt trên Facebook
9


5. Visual Studio
Visual Studio là một trong những công cụ hỗ trợ lập trình website rất nổi
tiếng nhất hiện nay của Mcrosoft và chưa có một phần mềm nào có thể thay thế
được nó. Visual Studio được viết bằng 2 ngơn ngữ đó chính là C# và VB+. Đây là
2 ngơn ngữ lập trình, giúp người dùng có thể lập trình được hệ thống một các dễ
dàng và nhanh chóng nhất thông qua Visual Studio.
Visual Studio là một phần mềm lập trình hệ thống được sản xuất trực tiếp
từ Microsoft. Từ khi ra đời đến nay, Visual Studio đã có nhiều phiên bản sử dụng
khác nhau. Điều đó, giúp cho người dùng có thể lựa chọn được phiên bản tương
thích với dịng máy của mình cũng như cấu hình sử dụng phù hợp nhất.
Bên cạnh đó, Visual Studio cịn cho phép người dùng có thể tự chọn lựa giao
diện chính cho máy của mình tùy thuộc vào nhu cầu sử dụng.
* Một số tính năng của Visual Studio

















Biên tập mã
Trình gỡ lỗi
Thiết kế
+ Windows Forms Designer
+ WPF Designer
+ Web designer/development
Đa nền tảng
Đa ngơn ngữ lập trình
Hỗ trợ website
Kho tiện ích mở rộng phong phú
Lưu trữ phân cấp
Kho lưu trữ an tồn
Màn hình đa nhiệm
Hỗ trợ viết code
Hỗ trợ thiết bị đầu cuối
Hỗ trợ Git
Intellisense

CHƯƠNG II

10


Đối tượng và phạm vi nghiên cứu, phương pháp thực hiện
2.1: Đối tượng và phạm vi nghiên cứu
Tập trung chính vào đối tượng nghiên cứu là mặt người, kỹ thuật nhận diện
khuôn mặt bằng Machine Learning (Học máy)
Đề tài tập trung tìm hiểu một số phương pháp nhận dạng khn mặt người
phổ biến hiện nay và đưa ra phương án nhận dạng cho bài tốn nhận dạng khn
mặt người.
2.2: Phương pháp thực hiện
Phương pháp thực hiện và phát triển hệ thống nhận dạng sinh trắc học dựa
trên nhận dạng khuôn mặt bằng thư viện OpenCV và phát trực tuyến thời gian thực
qua camera ghi hình. Để hệ thống hoạt động, cần thực hiện, đầu tiên, nó phải phát
hiện được khn mặt. Sau đó, nó phải nhận ra khn mặt đó là ai gần như ngay lập
tức.
Q trình nhận dạng khn mặt bắt đầu bằng một trình ứng dụng cho
camera, được cài đặt trên bất kỳ thiết bị tương thích nào và được kết nối với máy
ảnh, sau đó có thể sử dụng thị giác máy tính (Computer Vision) và mạng thần kinh
sâu (Deep Neural Network) để tìm ra một khn mặt tiềm năng trong luồng hình
ảnh. Khi một khn mặt được chụp lại, hình ảnh cắt khung sẽ được chuyển tiếp
đến một đường dẫn đã chỉ định và được lưu trữu lại.

11


CHƯƠNG III: Các bước thực hiện
3.1: Cấu hình thư viện OpenCV với Visual Studio
Bước 1: Mở Visual Studio và Tạo Empty Project Visual C++ mới


Bước 2: Thêm file C++ vào Project vừa tạo

12


Bước 3: Chuyển build platform của Project sang x64 vì bản OpenCV đã
build sẵn chỉ hỗ trợ 64-bit.

Bước 4: Click chuột phải vào Project và chọn Properties để mở cửa
sổ Project Properties

13


Bước 5: Chọn mục C/C++ -> General. Ở dòng Additional Include
Directories, thêm vào đường dẫn đến thư mục build\include của thư mục
OpenCV đã giải nén ở bước trên. Bấm vào Apply

Bước 6: Chuyển sang mục Linker->General. Ở dòng Additional Library
Directories, thêm vào đường dẫn đến thư mục build\x64\vc15/lib

14


Bước 7: Chuyển sang mục Linker -> Input. Ở dòng Additional
Dependencies, thêm vào tên file opencv_world341d.lib (vì đang build ở chế độ
Debug). Nếu build ở chế độ Release thì tên file là opencv_world341d.lib. Hai file
này có thể được tìm thấy trong thư mục build\x64…\bin. Bấm vào Apply.

Bước 8: Nhấn OK.

3.2: Lập trình mở webcam và nhận dạng khn mặt
// Chương trình CPP để phát hiện khn mặt trong video
// Bao gồm các tệp tiêu đề bắt buộc từ thư mục OpenCV
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\objdetect\objdetect.hpp>
#include "opencv2/opencv.hpp"
#include <time.h>
#include <iostream>
15


using namespace std;
using namespace cv;
// Hàm phát hiện khuôn mặt
void detectAndDraw(Mat& img, CascadeClassifier& cascade,
CascadeClassifier& nestedCascade, double scale);
string cascadeName, nestedCascadeName;
int main(int argc, const char** argv)
{
Ptr<BackgroundSubtractor> pBackSub;
pBackSub = createBackgroundSubtractorKNN();
// Lớp VideoCapture để phát video mà khuôn mặt sẽ được phát
hiện
VideoCapture videos(0);//Lớp mở camera mặc định
double fps = videos.get(CAP_PROP_FPS);
//cout << "Frames per second camera : " << fps << endl;
Mat frame, image;
// Bộ phân loại XML được đào tạo được xác định trước với các đặc

điểm trên khuôn mặt
CascadeClassifier cascade, nestedCascade;
double scale = 1;
// Tải bộ phân loại từ thư mục "opencv / data / haarcascades"

nestedCascade.load("D:\\Download\\opencv\\build\\etc\\haarcascades\\haarc
asc

ade_eye_tree_eyeglasses.xml");
// Thay đổi đường dẫn trước khi thực thi

16


cascade.load("D:\\Download\\opencv\\build\\etc\\haarcascades\\haarcascade_
fro

ntalface_alt.xml");
// Bắt đầu Video..1) 0 cho WebCam 2) "Đường dẫn đến Video"

cho Video

cục bộ
videos.open(0);
if (videos.isOpened())
{
// Chụp khung hình từ video và phát hiện khuôn mặt
cout << "Bat dau nhan dien khuon mat...." << endl;
Mat frame, fgMask;
int demframe = 1;

clock_t start;
clock_t end;
cout << "CHUP " << demframe << " KHUNG HINH" <<

endl;
double ms, fpsLive;
while (1)
{
start = clock();
videos >> frame;
pBackSub->apply(frame, fgMask);
erode(fgMask, fgMask, (5, 5));
dilate(fgMask, fgMask, (5, 5));
long sum = 0;
int N = 1;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
17


{
sum += 1;
}
}

if (frame.empty())
break;
Mat frame1 = frame.clone();
detectAndDraw(frame1, cascade, nestedCascade,

scale);
char c = (char)waitKey(10);
end = clock();
double seconds = (double(end) - double(start)) /
double(CLOCKS_PER_SEC);
cout << "THOI GIAN DA MAT : " << seconds << "
GIAY" <<

endl;
fpsLive = double(demframe) / double(seconds);
//fpsLive = double(num_frames) / double(ms*0.001);
cout << "SO KHUNG HINH UOC TINH TREN GIAY : "

<<

fpsLive << endl;
putText(frame1, "FPS: " + to_string(int(fpsLive)),

{ 50, 50 }, FONT_HERSHEY_SIMPLEX, 1.5, (255,165,0), 2);
imshow("CAMERA FPS ", frame1);
// Nhấn q để thoát khỏi cửa sổ
if (c == 27 || c == 'q' || c == 'Q')
break;
}
}
else
18


cout << "Khong the mo may anh";

return 0;
}
void detectAndDraw(Mat& img, CascadeClassifier& cascade,
CascadeClassifier& nestedCascade,
double scale)
{
vector<Rect> faces, faces2;
Mat gray, smallImg;
cvtColor(img, gray, COLOR_BGR2GRAY); // Convert to Gray Scale
double fx = 1 / scale;
//Thay đổi kích thước hình ảnh thang độ xám
resize(gray, smallImg, Size(), fx, fx, INTER_LINEAR);
equalizeHist(smallImg, smallImg);
//Phát hiện các khn mặt có kích thước khác nhau bằng bộ phân
loại

tầng
cascade.detectMultiScale(smallImg, faces, 1.1,
2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
// Vẽ các vòng tròn xung quanh các khuôn mặt
for (size_t i = 0; i < faces.size(); i++)
{
Rect r = faces[i];
Mat smallImgROI;
vector<Rect> nestedObjects;
Point center;
Scalar color = Scalar(255, 0, 0); // Màu cho công cụ Vẽ
int radius;

19



double aspect_ratio = (double)r.width / r.height;
if (0.75 < aspect_ratio && aspect_ratio < 1.3)
{
center.x = cvRound((r.x + r.width * 0.5) * scale);
center.y = cvRound((r.y + r.height * 0.5) * scale);
radius = cvRound((r.width + r.height) * 0.25 * scale);
rectangle(img, faces.at(i), CV_RGB(255,165,0),4);
}
else
rectangle(img, cvPoint(cvRound(r.x * scale),
cvRound(r.y *

scale)),
cvPoint(cvRound((r.x + r.width - 1) * scale),
cvRound((r.y + r.height - 1) * scale)), color, 3,

8, 0);
if (nestedCascade.empty())
continue;
smallImgROI = smallImg(r);
//Phát hiện mắt trong hình ảnh đầu vào
nestedCascade.detectMultiScale(smallImgROI,
nestedObjects, 1.1, 2,
0 | CASCADE_SCALE_IMAGE, Size(30, 30));
//Vẽ vòng tròn quanh mắt
for (size_t j = 0; j < nestedObjects.size(); j++)
{
Rect nr = nestedObjects[j];

center.x = cvRound((r.x + nr.x + nr.width * 0.5) *
scale);
center.y = cvRound((r.y + nr.y + nr.height * 0.5) *
scale);

20


radius = cvRound((nr.width + nr.height) * 0.25 *
scale);
circle(img, center, radius, CV_RGB(255,192,203),2);
}
}

//Hiển thị hình ảnh đã xử lý với các khn mặt được phát hiện
//imshow("Camera", img);

- Mã trên sử thư viện <time.h> để truy xuất kiểm tra ra thời gian mở camera
và thời điểm kết thúc. Từ đó tính số khung hình thu được trên giây.
- Sử dụng ba kênh mà RGB để tạo màu cho nét vẽ khuôn mặt và khoanh mắt.
Hàm rectangle sử dụng vẽ hình chữ nhật cho khn mặt và hàm circle vẽ hình
trịn quanh vùng mắt.
- Sử dụng file XML của Opencv để truy xuất đặc điểm trên khuôn mặt.
- Sử dụng vector SVM để phân loại kích thước từng khn mặt và bộ phân
loại tầng để phát hiện mắt, mặt với kích thước khác nhau.
3.3: Kết quả thu được từ chương trình

21



Hình 10: Nhóm thu được kết quả với hình trịn phát hiện khuôn mặt

Chương IV: Kết luận và hướng phát triển
5.1: Kết luận
- Qua tìm hiểu bài tốn phát hiện nhận dạng khn mặt người trong ảnh, nhóm
chúng em đã thấy được sự quan trọng của xử lý ảnh, cũng như sự phát triển và tầm
quan trọng của bài toán trong đời sống.
- Trong quá trình xây dựng chương trình nhóm chúng em đã tìm hiểu về thư
viện mã nguồn mở OpenCV. Qua đó biết cách sử dụng các hàm được xây dựng sẵn
trong thư viện OpenCV.
Hình 11: Kết quả thu được phát hiện khn mặt với hình vng

- Về chương trình nhóm mới chỉ thực hiện phát hiện mặt người trong ảnh, kết
quả đạt được như mong muốn, thời gian phát hiện nhanh đối với mặt người chụp
thẳng, chất lượng ảnh tốt, khơng có vật cản…., cịn trong các ảnh như chụp hơi
nghiêng hay ảnh có màu sắc tối thì chương trình vẫn chưa phát hiện ra khn mặt
trong ảnh đó. Nhóm chúng em sẽ tìm hiểu thêm và cố gắng khắc phục.
5.2: Hướng phát triển
- Tiếp tục nghiên cứu, cải thiện những khuyết điểm nói trên
- Vẫn khai thác điểm mạnh chương trình nhận diện khn mặt của nhóm
- Nhóm chúng em sẽ kết hợp với những nhóm có chương trình nghiên cứu khác
để thực hiện việc đồng bộ chương trình với nhau sẽ cho ra được một đề tài nghiên
cứu mới, ví dụ như ứng dụng nhận diện khn mặt kết hợp với chương trình nhận
dạng biển số xe thì sẽ dễ dàng quản lý cho các bãi xe của chung cư, của bãi đỗ xe
22


cơng cộng, hoặc kết hợp với chương trình nhận dạng bàn tay để dễ dàng phát hiện
những kẻ trộm…v..v.


TÀI LIỆU THAM KHẢO

[1] Nguyễn Thanh Thuỷ, Lƣơng Mạnh Bá, Nhập môn xử lý ảnh số, Nhà xuất bản
khoa học kỹ thuật, 1999.
[2] Lương Mạnh Bá, Nguyễn Thanh Thủy, Nhập môn xử lý ảnh số, NXB Khoa học
kỹ thuật,1999.
[3] Nguyễn Kim Sách, Xử lý ảnh và video số, NXB Khoa học kỹ thuật,1997
[4] John C. Russ, The Image Processing Handbook, CRC Press,2002.
[5] Alan C. Bovik, Handbook of Image and Video Processing, Academic Press,2000

23



×